From f7967809ab6e784c283c6214f988d6707e2440d6 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Tue, 23 Jan 2024 11:56:07 +1300 Subject: [PATCH 0001/1949] [MOL-14812][KE] Add props to hide navigation and counter pill --- .../fullscreen-image-carousel.tsx | 50 +++++++++++-------- src/fullscreen-image-carousel/types.ts | 2 + .../fullscreen-image-carousel.stories.tsx | 2 + .../fullscreen-image-carousel/props-table.tsx | 11 ++++ 4 files changed, 44 insertions(+), 21 deletions(-) diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index eb1078e39..fa90e7a2e 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -45,6 +45,8 @@ export const Component = ( items, initialActiveItemIndex, hideThumbnail, + hideNavigation, + hideCounter, onClose, ...otherProps }: FullscreenImageCarouselProps, @@ -224,22 +226,26 @@ export const Component = ( - - - - - - + {!hideNavigation && ( + <> + + + + + + + + )} {renderSlides()} - - {`${currentSlide + 1}/${ - items.length - }`} - + {!hideCounter && ( + + {`${currentSlide + 1}/${ + items.length + }`} + + )} {!hideThumbnail && renderThumbnails()} diff --git a/src/fullscreen-image-carousel/types.ts b/src/fullscreen-image-carousel/types.ts index 947496e2d..bbc45931d 100644 --- a/src/fullscreen-image-carousel/types.ts +++ b/src/fullscreen-image-carousel/types.ts @@ -16,6 +16,8 @@ export interface FullscreenImageCarouselProps /** The index of the visible item, starts from 0 */ initialActiveItemIndex?: number | undefined; hideThumbnail?: boolean | undefined; + hideNavigation?: boolean | undefined; + hideCounter?: boolean | undefined; onClose?: (() => void) | undefined; } diff --git a/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx b/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx index b8d66879e..e68115f79 100644 --- a/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx +++ b/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx @@ -81,6 +81,8 @@ export const WithManyImages: StoryObj = { setShow(false)} /> diff --git a/stories/fullscreen-image-carousel/props-table.tsx b/stories/fullscreen-image-carousel/props-table.tsx index 7f40aeda3..1cab4e249 100644 --- a/stories/fullscreen-image-carousel/props-table.tsx +++ b/stories/fullscreen-image-carousel/props-table.tsx @@ -61,6 +61,17 @@ const DATA: ApiTableSectionProps[] = [ description: "Specifies if the bottom thumbnail is visible", propTypes: ["boolean"], }, + { + name: "hideNavigation", + description: + "Specifies if the left righit navigation are visible", + propTypes: ["boolean"], + }, + { + name: "hideCounter", + description: "Specifies if the image counter pill is visible", + propTypes: ["boolean"], + }, { name: "onClose", description: From 3964b9915c99a9b8ce8e9c770991d0212d2aa7e6 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Sat, 9 Mar 2024 23:55:44 +1300 Subject: [PATCH 0002/1949] [MOL-14813][KE] Fully deprecated TimelineStatusProps and label --- src/timeline/timeline.tsx | 32 +++++---------------------- src/timeline/types.ts | 12 ++-------- stories/timeline/props-table.tsx | 27 ++-------------------- stories/timeline/timeline.stories.tsx | 21 +----------------- 4 files changed, 11 insertions(+), 81 deletions(-) diff --git a/src/timeline/timeline.tsx b/src/timeline/timeline.tsx index 34f4186f7..eef5f8f99 100644 --- a/src/timeline/timeline.tsx +++ b/src/timeline/timeline.tsx @@ -12,13 +12,8 @@ import { TimelineTitle, TimelineWrapper, } from "./timeline.style"; -import { - TimelineItemProps, - TimelineProps, - TimelineStatusProps, - TimelineStatusType, - Variant, -} from "./types"; +import { TimelineItemProps, TimelineProps, Variant } from "./types"; +import { PillProps } from "../pill"; export const Timeline = ({ items, @@ -59,34 +54,19 @@ export const Timeline = ({ return <>{title}; }; - const renderStatusPills = ( - statuses: TimelineStatusProps[] - ): JSX.Element[] => { + const renderStatusPills = (statuses: PillProps[]): JSX.Element[] => { // maximum 2 pills allowed const renderableStatuses = statuses.slice(0, 2); - return renderableStatuses.map((status: TimelineStatusProps, index) => { - let type: TimelineStatusType; - - switch (status.type) { - case "dark": - type = "solid"; - break; - case "light": - type = "outline"; - break; - default: - type = status.type; - } - + return renderableStatuses.map((status: PillProps, index) => { return ( - {status.children ? status.children : status.label} + {status.children} ); }); diff --git a/src/timeline/types.ts b/src/timeline/types.ts index 3e3ebf405..737ca0842 100644 --- a/src/timeline/types.ts +++ b/src/timeline/types.ts @@ -1,4 +1,4 @@ -import { PillProps, PillType } from "../pill"; +import { PillProps } from "../pill"; export type Variant = | "completed" @@ -7,18 +7,10 @@ export type Variant = | "upcoming-inactive" | "error"; -export type TimelineStatusType = PillType | "dark" | "light"; - -export interface TimelineStatusProps extends Omit { - type: TimelineStatusType; - /** @deprecated This attribute has been deprecated in favour of the children attribute of `PillProps` */ - label?: string; -} - export interface TimelineItemProps { title: string | JSX.Element; content: string | JSX.Element; - statuses?: TimelineStatusProps[] | undefined; + statuses?: PillProps[] | undefined; variant?: Variant | undefined; } diff --git a/stories/timeline/props-table.tsx b/stories/timeline/props-table.tsx index 9817196a5..4068139ac 100644 --- a/stories/timeline/props-table.tsx +++ b/stories/timeline/props-table.tsx @@ -123,33 +123,10 @@ const DATA: ApiTableSectionProps[] = [ mandatory: true, description: ( <> - The color style of the {code("Pill")}.
- - Note: from v2.4.0 onwards, values {code(`"dark"`)}{" "} - and {code(`"light"`)} - will no longer be supported in favour of{" "} - {code(`"solid"`)} and - {code(`"outline"`)} respectively. - + The type style of the {code("Pill")}.
), - propTypes: [`"dark"`, `"light"`, `"solid"`, `"outline"`], - }, - { - name: "label (deprecated)", - mandatory: true, - description: ( - <> - The text to be rendered on the {code("Pill")}. -
- - Note: from v2.4.0 onwards, this attribute will no - longer be available. - - - ), - - propTypes: ["string"], + propTypes: [`"solid"`, `"outline"`], }, { name: "colorType", diff --git a/stories/timeline/timeline.stories.tsx b/stories/timeline/timeline.stories.tsx index 78b789fb3..f7c380a23 100644 --- a/stories/timeline/timeline.stories.tsx +++ b/stories/timeline/timeline.stories.tsx @@ -85,25 +85,6 @@ export const Default: StoryObj = { }, { title: "Item 5", - content: ( - - This one comes with light and black status - icons. - - ), - statuses: [ - { - type: "light", - label: "Status light", - }, - { - type: "dark", - label: "Status dark", - }, - ], - }, - { - title: "Item 6", content: ( This one comes with Pill DS icons. @@ -125,7 +106,7 @@ export const Default: StoryObj = { ], }, { - title: "Item 7", + title: "Item 6", content: ( This one comes with Pill DS icons with long From b32ec4cfa32c427440f2ead594adf84a1f66de12 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Mon, 18 Mar 2024 22:04:09 +1300 Subject: [PATCH 0003/1949] [MOL-14812][KE] Add Magnifier icon and default values for configuration --- .../fullscreen-image-carousel.style.tsx | 17 +++++++++++++++ .../fullscreen-image-carousel.tsx | 21 +++++++++++++++++-- src/fullscreen-image-carousel/types.ts | 1 + 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx index 43bf83132..fe52549be 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx @@ -46,6 +46,23 @@ export const CloseButton = styled(IconButton)` } `; +export const MagnifierButton = styled(IconButton)` + position: absolute; + top: 3rem; + right: 6.5rem; + z-index: 5; + + ${MediaQuery.MaxWidth.mobileL} { + top: 1.25rem; + right: 4.75rem; + } + + svg { + height: 1.5rem; + width: 1.5rem; + } +`; + export const ArrowButton = styled(IconButton)` z-index: 4; position: absolute; diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index fa90e7a2e..248d0e4f0 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -2,6 +2,8 @@ import { ChevronLeftIcon, ChevronRightIcon, CrossIcon, + MagnifierMinusIcon, + MagnifierPlusIcon, } from "@lifesg/react-icons"; import { forwardRef, @@ -28,6 +30,7 @@ import { ImageGallerySlides, ImageGallerySwipe, ImageGalleryWrapper, + MagnifierButton, SlideImage, SlidePlaceholderImage, ThumbnailContainer, @@ -45,8 +48,9 @@ export const Component = ( items, initialActiveItemIndex, hideThumbnail, - hideNavigation, - hideCounter, + hideNavigation = false, + hideCounter = false, + hideMagnifier = false, onClose, ...otherProps }: FullscreenImageCarouselProps, @@ -224,6 +228,19 @@ export const Component = ( > + {!hideMagnifier && ( + + {zoom === 1 ? ( + + ) : ( + + )} + + )} {!hideNavigation && ( diff --git a/src/fullscreen-image-carousel/types.ts b/src/fullscreen-image-carousel/types.ts index bbc45931d..c4d319201 100644 --- a/src/fullscreen-image-carousel/types.ts +++ b/src/fullscreen-image-carousel/types.ts @@ -18,6 +18,7 @@ export interface FullscreenImageCarouselProps hideThumbnail?: boolean | undefined; hideNavigation?: boolean | undefined; hideCounter?: boolean | undefined; + hideMagnifier?: boolean | undefined; onClose?: (() => void) | undefined; } From daaba202f8f75c3971185f1e639dc2379ff9edb1 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Tue, 19 Mar 2024 19:39:17 +1300 Subject: [PATCH 0004/1949] [MOL-14812][KE] Create FullscreenImageCarousel Provider to store img dimension to calculate zoom ratio --- .../fullscreen-image-carousel-context.tsx | 81 +++++++++ .../fullscreen-image-carousel.tsx | 168 +++++++++++------- .../stateful-image.tsx | 10 ++ 3 files changed, 199 insertions(+), 60 deletions(-) create mode 100644 src/fullscreen-image-carousel/fullscreen-image-carousel-context.tsx diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel-context.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel-context.tsx new file mode 100644 index 000000000..503d57e89 --- /dev/null +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel-context.tsx @@ -0,0 +1,81 @@ +import { createContext, useContext, useReducer } from "react"; + +// ============================================================================= +// TYPINGS +// ============================================================================= +export interface ImageDimension { + src: string; + width: number; + height: number; +} + +export interface FullscreenImageCarouselState { + imagesDimension: ImageDimension[]; +} + +interface FullscreenImageCarouselContextType { + state?: FullscreenImageCarouselState; + saveImageDimension: React.Dispatch; +} + +export type TFullscreenImageCarouselActionType = "save-image-dimension"; + +export interface IFullscreenImageCarouselAction { + type: TFullscreenImageCarouselActionType; + payload?: ImageDimension; +} + +// ============================================================================= +// REDUCER +// ============================================================================= + +export const fullscreenImageCarouselReducer = ( + state: FullscreenImageCarouselState, + action: IFullscreenImageCarouselAction +): FullscreenImageCarouselState => { + switch (action.type) { + case "save-image-dimension": + if (action.payload) { + return { + imagesDimension: [...state.imagesDimension, action.payload], + }; + } + + return state; + default: + return state; + } +}; + +// ============================================================================= +// Hook +// ============================================================================= +export const useFullscreenImageCarousel = () => { + const context = useContext(FullscreenImageCarouselContext); + + const saveImageDimension = (dimension: ImageDimension) => { + context.saveImageDimension({ + type: "save-image-dimension", + payload: dimension, + }); + }; + + return { + saveImageDimension, + state: context.state, + }; +}; + +// ============================================================================= +// CONTEXT +// ============================================================================= + +export const DEFAULT_VALUES: FullscreenImageCarouselState = { + imagesDimension: [], +}; + +export const FullscreenImageCarouselContext = + createContext({ + state: DEFAULT_VALUES, + saveImageDimension: () => null, + }); diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index 248d0e4f0..a463e5cab 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -9,6 +9,7 @@ import { forwardRef, useEffect, useImperativeHandle, + useReducer, useRef, useState, } from "react"; @@ -42,6 +43,11 @@ import { FullscreenImageCarouselProps, FullscreenImageCarouselRef, } from "./types"; +import { + DEFAULT_VALUES, + FullscreenImageCarouselContext, + fullscreenImageCarouselReducer, +} from "./fullscreen-image-carousel-context"; export const Component = ( { @@ -59,6 +65,11 @@ export const Component = ( // ============================================================================= // CONST, STATE, REF // ============================================================================= + const [fullscreenImageCarouselState, saveImageDimension] = useReducer( + fullscreenImageCarouselReducer, + DEFAULT_VALUES + ); + const [currentSlide, setCurrentSlide] = useState( initialActiveItemIndex ?? 0 ); @@ -131,6 +142,36 @@ export const Component = ( } } + const handleMagnifier = () => { + if (zoom === 1) { + const zoomRatio = getZoomRatio(); + zoomRefs.current?.[currentSlide]?.centerView(zoomRatio); + setZoom(zoomRatio); + } else { + setZoom(1); + zoomRefs.current?.[currentSlide]?.resetTransform(); + } + }; + + const getZoomRatio = () => { + const src = items[currentSlide].src; + const { width, height } = + fullscreenImageCarouselState.imagesDimension.find( + (i) => i.src == src + ); + + const isImgLandscapeRelativeToDevice = + height / width < + containerRef?.current.clientHeight / + containerRef?.current.clientWidth; + + return isImgLandscapeRelativeToDevice + ? containerRef?.current.clientHeight / + (height / (width / containerRef?.current.clientWidth)) + : containerRef?.current.clientWidth / + (width / (height / containerRef?.current.clientHeight)); + }; + // ============================================================================= // HELPER FUNCTIONS // ============================================================================= @@ -179,7 +220,7 @@ export const Component = ( src={item.src} alt={item.alt ?? `Image ${index + 1}`} placeholder={} - fit="scale-down" + retrieveImageDimension /> @@ -220,68 +261,75 @@ export const Component = ( }; return ( - - - - - {!hideMagnifier && ( - + + - {zoom === 1 ? ( - - ) : ( - - )} - - )} - - - {!hideNavigation && ( - <> - - - - - - - - )} - + + {!hideMagnifier && ( + - {renderSlides()} - - {!hideCounter && ( - - {`${currentSlide + 1}/${ - items.length - }`} - - )} - - {!hideThumbnail && renderThumbnails()} - - + {zoom === 1 ? ( + + ) : ( + + )} + + )} + + + {!hideNavigation && ( + <> + + + + + + + + )} + + {renderSlides()} + + {!hideCounter && ( + + {`${currentSlide + 1}/${ + items.length + }`} + + )} + + {!hideThumbnail && renderThumbnails()} + + + ); }; diff --git a/src/fullscreen-image-carousel/stateful-image.tsx b/src/fullscreen-image-carousel/stateful-image.tsx index e308650e4..57e1ddf2e 100644 --- a/src/fullscreen-image-carousel/stateful-image.tsx +++ b/src/fullscreen-image-carousel/stateful-image.tsx @@ -5,6 +5,7 @@ import { ImageBox, ImageWrapper, } from "./stateful-image.style"; +import { useFullscreenImageCarousel } from "./fullscreen-image-carousel-context"; export interface StatefulImageProps { src: string; @@ -12,6 +13,7 @@ export interface StatefulImageProps { alt?: string | undefined; fit?: React.CSSProperties["objectFit"] | undefined; placeholder?: React.ReactNode | undefined; + retrieveImageDimension?: boolean; } export const StatefulImage = ({ @@ -20,9 +22,11 @@ export const StatefulImage = ({ alt, fit, placeholder, + retrieveImageDimension, }: StatefulImageProps) => { const [loading, setLoading] = useState(true); const [error, setError] = useState(); + const fullscreenImageCarousel = useFullscreenImageCarousel(); useEffect(() => { setLoading(true); @@ -31,6 +35,12 @@ export const StatefulImage = ({ const img = new Image(); img.src = src; img.onload = () => { + !!retrieveImageDimension && + fullscreenImageCarousel.saveImageDimension({ + src: img.src, + width: img.width, + height: img.height, + }); setLoading(false); }; img.onerror = (e: Event | string) => { From bfdad56ea6d054e8dadb06a53b9e89e300f55bd7 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Tue, 19 Mar 2024 23:56:34 +1300 Subject: [PATCH 0005/1949] [MOL-14812][KE] Added hideMagnifier in prop table --- stories/fullscreen-image-carousel/props-table.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/stories/fullscreen-image-carousel/props-table.tsx b/stories/fullscreen-image-carousel/props-table.tsx index 1cab4e249..026e54d5c 100644 --- a/stories/fullscreen-image-carousel/props-table.tsx +++ b/stories/fullscreen-image-carousel/props-table.tsx @@ -72,6 +72,11 @@ const DATA: ApiTableSectionProps[] = [ description: "Specifies if the image counter pill is visible", propTypes: ["boolean"], }, + { + name: "hideMagnifier", + description: "Specifies if the image magnifier icon is visible", + propTypes: ["boolean"], + }, { name: "onClose", description: From e3017ea0aa48bfceddc83eede8e79bc133360099 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Wed, 20 Mar 2024 00:02:04 +1300 Subject: [PATCH 0006/1949] [MOL-14812][KE] Added example in story with various newly added optional props configuration --- .../fullscreen-image-carousel.tsx | 2 +- .../fullscreen-image-carousel.mdx | 4 ++++ .../fullscreen-image-carousel.stories.tsx | 24 +++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index a463e5cab..eac208f70 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -53,7 +53,7 @@ export const Component = ( { items, initialActiveItemIndex, - hideThumbnail, + hideThumbnail = false, hideNavigation = false, hideCounter = false, hideMagnifier = false, diff --git a/stories/fullscreen-image-carousel/fullscreen-image-carousel.mdx b/stories/fullscreen-image-carousel/fullscreen-image-carousel.mdx index 577bbad87..48c0689f8 100644 --- a/stories/fullscreen-image-carousel/fullscreen-image-carousel.mdx +++ b/stories/fullscreen-image-carousel/fullscreen-image-carousel.mdx @@ -25,6 +25,10 @@ import { FullscreenImageCarousel } from "@lifesg/react-design-system/fullscreen- +Configurable + + + Component API diff --git a/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx b/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx index e68115f79..ec7c80088 100644 --- a/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx +++ b/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx @@ -81,8 +81,32 @@ export const WithManyImages: StoryObj = { setShow(false)} + /> + + ); + }, +}; + +export const Configurable: StoryObj = { + render: () => { + const [show, setShow] = useState(false); + return ( + + { + setShow((old) => !old); + }} + > + Show carousel + + setShow(false)} /> From 6fae969512e5127a6de4083fbd2e0da260f10173 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Fri, 22 Mar 2024 16:47:58 +1300 Subject: [PATCH 0007/1949] [MOL-14812][KE] Use state instead of redux --- .../fullscreen-image-carousel-context.tsx | 81 ---------- .../fullscreen-image-carousel.tsx | 148 ++++++++---------- .../stateful-image.tsx | 14 +- 3 files changed, 79 insertions(+), 164 deletions(-) delete mode 100644 src/fullscreen-image-carousel/fullscreen-image-carousel-context.tsx diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel-context.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel-context.tsx deleted file mode 100644 index 503d57e89..000000000 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel-context.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { createContext, useContext, useReducer } from "react"; - -// ============================================================================= -// TYPINGS -// ============================================================================= -export interface ImageDimension { - src: string; - width: number; - height: number; -} - -export interface FullscreenImageCarouselState { - imagesDimension: ImageDimension[]; -} - -interface FullscreenImageCarouselContextType { - state?: FullscreenImageCarouselState; - saveImageDimension: React.Dispatch; -} - -export type TFullscreenImageCarouselActionType = "save-image-dimension"; - -export interface IFullscreenImageCarouselAction { - type: TFullscreenImageCarouselActionType; - payload?: ImageDimension; -} - -// ============================================================================= -// REDUCER -// ============================================================================= - -export const fullscreenImageCarouselReducer = ( - state: FullscreenImageCarouselState, - action: IFullscreenImageCarouselAction -): FullscreenImageCarouselState => { - switch (action.type) { - case "save-image-dimension": - if (action.payload) { - return { - imagesDimension: [...state.imagesDimension, action.payload], - }; - } - - return state; - default: - return state; - } -}; - -// ============================================================================= -// Hook -// ============================================================================= -export const useFullscreenImageCarousel = () => { - const context = useContext(FullscreenImageCarouselContext); - - const saveImageDimension = (dimension: ImageDimension) => { - context.saveImageDimension({ - type: "save-image-dimension", - payload: dimension, - }); - }; - - return { - saveImageDimension, - state: context.state, - }; -}; - -// ============================================================================= -// CONTEXT -// ============================================================================= - -export const DEFAULT_VALUES: FullscreenImageCarouselState = { - imagesDimension: [], -}; - -export const FullscreenImageCarouselContext = - createContext({ - state: DEFAULT_VALUES, - saveImageDimension: () => null, - }); diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index eac208f70..c433686e8 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -9,7 +9,6 @@ import { forwardRef, useEffect, useImperativeHandle, - useReducer, useRef, useState, } from "react"; @@ -43,11 +42,6 @@ import { FullscreenImageCarouselProps, FullscreenImageCarouselRef, } from "./types"; -import { - DEFAULT_VALUES, - FullscreenImageCarouselContext, - fullscreenImageCarouselReducer, -} from "./fullscreen-image-carousel-context"; export const Component = ( { @@ -65,14 +59,11 @@ export const Component = ( // ============================================================================= // CONST, STATE, REF // ============================================================================= - const [fullscreenImageCarouselState, saveImageDimension] = useReducer( - fullscreenImageCarouselReducer, - DEFAULT_VALUES - ); const [currentSlide, setCurrentSlide] = useState( initialActiveItemIndex ?? 0 ); + const [imagesDimension, setImageDimension] = useState({}); const [zoom, setZoom] = useState(1); const [startX, setStartX] = useState(null); const [endX, setEndX] = useState(null); @@ -153,12 +144,15 @@ export const Component = ( } }; + const setDimension = ({ src, height, width }) => { + setImageDimension((oldState) => { + return { ...oldState, [src]: { height, width } }; + }); + }; + const getZoomRatio = () => { const src = items[currentSlide].src; - const { width, height } = - fullscreenImageCarouselState.imagesDimension.find( - (i) => i.src == src - ); + const { width, height } = imagesDimension[src]; const isImgLandscapeRelativeToDevice = height / width < @@ -221,6 +215,7 @@ export const Component = ( alt={item.alt ?? `Image ${index + 1}`} placeholder={} retrieveImageDimension + setDimension={setDimension} /> @@ -261,75 +256,68 @@ export const Component = ( }; return ( - - - + + + + {!hideMagnifier && ( + - - - {!hideMagnifier && ( - + ) : ( + + )} + + )} + + + {!hideNavigation && ( + <> + + + + + + + + )} + - {zoom === 1 ? ( - - ) : ( - - )} - - )} - - - {!hideNavigation && ( - <> - - - - - - - - )} - - {renderSlides()} - - {!hideCounter && ( - - {`${currentSlide + 1}/${ - items.length - }`} - - )} - - {!hideThumbnail && renderThumbnails()} - - - + {renderSlides()} + + {!hideCounter && ( + + {`${currentSlide + 1}/${ + items.length + }`} + + )} + + {!hideThumbnail && renderThumbnails()} + + ); }; diff --git a/src/fullscreen-image-carousel/stateful-image.tsx b/src/fullscreen-image-carousel/stateful-image.tsx index 57e1ddf2e..1b9634aef 100644 --- a/src/fullscreen-image-carousel/stateful-image.tsx +++ b/src/fullscreen-image-carousel/stateful-image.tsx @@ -5,7 +5,6 @@ import { ImageBox, ImageWrapper, } from "./stateful-image.style"; -import { useFullscreenImageCarousel } from "./fullscreen-image-carousel-context"; export interface StatefulImageProps { src: string; @@ -14,6 +13,15 @@ export interface StatefulImageProps { fit?: React.CSSProperties["objectFit"] | undefined; placeholder?: React.ReactNode | undefined; retrieveImageDimension?: boolean; + setDimension?: ({ + src, + width, + height, + }: { + src: string; + width: number; + height: number; + }) => void; } export const StatefulImage = ({ @@ -23,10 +31,10 @@ export const StatefulImage = ({ fit, placeholder, retrieveImageDimension, + setDimension, }: StatefulImageProps) => { const [loading, setLoading] = useState(true); const [error, setError] = useState(); - const fullscreenImageCarousel = useFullscreenImageCarousel(); useEffect(() => { setLoading(true); @@ -36,7 +44,7 @@ export const StatefulImage = ({ img.src = src; img.onload = () => { !!retrieveImageDimension && - fullscreenImageCarousel.saveImageDimension({ + setDimension({ src: img.src, width: img.width, height: img.height, From 8606272508ee63e1d116aab1b7deba481798194a Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Fri, 22 Mar 2024 17:04:43 +1300 Subject: [PATCH 0008/1949] [MOL-14812][KE] Update code styling --- .../fullscreen-image-carousel.tsx | 27 ++++++++++--------- src/fullscreen-image-carousel/types.ts | 5 ++++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index c433686e8..47fd2bc4d 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -41,6 +41,7 @@ import { import { FullscreenImageCarouselProps, FullscreenImageCarouselRef, + ImageDimension, } from "./types"; export const Component = ( @@ -63,7 +64,9 @@ export const Component = ( const [currentSlide, setCurrentSlide] = useState( initialActiveItemIndex ?? 0 ); - const [imagesDimension, setImageDimension] = useState({}); + const [imagesDimension, setImageDimension] = useState< + Record + >({}); const [zoom, setZoom] = useState(1); const [startX, setStartX] = useState(null); const [endX, setEndX] = useState(null); @@ -151,19 +154,19 @@ export const Component = ( }; const getZoomRatio = () => { - const src = items[currentSlide].src; - const { width, height } = imagesDimension[src]; + const imageDimension = imagesDimension[items[currentSlide].src]; - const isImgLandscapeRelativeToDevice = - height / width < - containerRef?.current.clientHeight / - containerRef?.current.clientWidth; + if (containerRef && !!imageDimension) { + const { clientHeight, clientWidth } = containerRef.current; + const { width, height } = imageDimension; - return isImgLandscapeRelativeToDevice - ? containerRef?.current.clientHeight / - (height / (width / containerRef?.current.clientWidth)) - : containerRef?.current.clientWidth / - (width / (height / containerRef?.current.clientHeight)); + const isImgLandscapeRelativeToDevice = + height / width < clientHeight / clientWidth; + + return isImgLandscapeRelativeToDevice + ? clientHeight / (height / (width / clientWidth)) + : clientWidth / (width / (height / clientHeight)); + } }; // ============================================================================= diff --git a/src/fullscreen-image-carousel/types.ts b/src/fullscreen-image-carousel/types.ts index c4d319201..888920482 100644 --- a/src/fullscreen-image-carousel/types.ts +++ b/src/fullscreen-image-carousel/types.ts @@ -27,3 +27,8 @@ export interface FullscreenCarouselItemProps { alt?: string | undefined; thumbnailSrc?: string | undefined; } + +export interface ImageDimension { + width: number; + height: number; +} From 951b0deb2abb1bf7c9ea7ff260fc655af85e7580 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 22 Mar 2024 12:30:22 +0800 Subject: [PATCH 0009/1949] [MISC][RL] Remove z-index from progress indicator --- src/progress-indicator/progress-indicator.style.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/progress-indicator/progress-indicator.style.tsx b/src/progress-indicator/progress-indicator.style.tsx index 62c58fdfb..2f73343f2 100644 --- a/src/progress-indicator/progress-indicator.style.tsx +++ b/src/progress-indicator/progress-indicator.style.tsx @@ -20,7 +20,6 @@ interface IndicatorProps { export const Wrapper = styled.div` position: relative; width: 100%; - z-index: 1; margin: 2rem 0; From 468c6b39e451cfea2544d87ef1a578964b98efe0 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 22 Mar 2024 12:37:36 +0800 Subject: [PATCH 0010/1949] [MISC][RL] Bump v2.4.0-canary.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a1b0b2707..8a8ab9efb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.4.0-canary.4", + "version": "2.4.0-canary.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.4.0-canary.4", + "version": "2.4.0-canary.5", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index a37f2895f..cb8927e0e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.4.0-canary.4", + "version": "2.4.0-canary.5", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 1c14dd070f26961babfc9059f1b47897d0851ef3 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Fri, 22 Mar 2024 17:51:11 +1300 Subject: [PATCH 0011/1949] [MOL-14812][KE] Update aria-label for MagnifierButton --- src/fullscreen-image-carousel/fullscreen-image-carousel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index 47fd2bc4d..2b4314805 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -269,7 +269,7 @@ export const Component = ( {!hideMagnifier && ( From 6cc7b5080be433b633c363ca2d445d3d43b0ff19 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Fri, 22 Mar 2024 18:02:11 +1300 Subject: [PATCH 0012/1949] [MOL-14812][KE] Bring back deleted fit="scale-down" --- src/fullscreen-image-carousel/fullscreen-image-carousel.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index 2b4314805..1594653e3 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -217,6 +217,7 @@ export const Component = ( src={item.src} alt={item.alt ?? `Image ${index + 1}`} placeholder={} + fit="scale-down" retrieveImageDimension setDimension={setDimension} /> From 62a6bebd29a42d84e206b1918c3ce2380fbfbce9 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Fri, 22 Mar 2024 18:06:42 +1300 Subject: [PATCH 0013/1949] [MOL-14812][KE] Calculate Zoom ratio for small images - fit to device width for landscape image - fit to device height for portrait image --- .../fullscreen-image-carousel.tsx | 7 +++++++ stories/fullscreen-image-carousel/doc-elements.tsx | 2 ++ 2 files changed, 9 insertions(+) diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index 1594653e3..ab1525718 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -159,10 +159,17 @@ export const Component = ( if (containerRef && !!imageDimension) { const { clientHeight, clientWidth } = containerRef.current; const { width, height } = imageDimension; + const isSmallImg = width < clientWidth && height < clientHeight; const isImgLandscapeRelativeToDevice = height / width < clientHeight / clientWidth; + if (isSmallImg) { + return isImgLandscapeRelativeToDevice + ? clientWidth / width + : clientHeight / height; + } + return isImgLandscapeRelativeToDevice ? clientHeight / (height / (width / clientWidth)) : clientWidth / (width / (height / clientHeight)); diff --git a/stories/fullscreen-image-carousel/doc-elements.tsx b/stories/fullscreen-image-carousel/doc-elements.tsx index e1a1590a2..f12c7bc13 100644 --- a/stories/fullscreen-image-carousel/doc-elements.tsx +++ b/stories/fullscreen-image-carousel/doc-elements.tsx @@ -6,6 +6,8 @@ const RESOLUTIONS = [ [1000, 1000], [900, 1600], [900, 1200], + [300, 500], + [500, 300], ]; export const getImages = (size: number) => { From 76121d4a46d4d14780a6d3c560ba0d50827ec11b Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Fri, 22 Mar 2024 18:38:51 +1300 Subject: [PATCH 0014/1949] [MOL-14813][KE] Update props table --- stories/timeline/props-table.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stories/timeline/props-table.tsx b/stories/timeline/props-table.tsx index 4068139ac..82e8017af 100644 --- a/stories/timeline/props-table.tsx +++ b/stories/timeline/props-table.tsx @@ -77,7 +77,7 @@ const DATA: ApiTableSectionProps[] = [   regardless how many statuses are specified ), - propTypes: ["TimelineStatusProps[]"], + propTypes: ["PillProps[]"], }, { name: "variant", @@ -101,7 +101,7 @@ const DATA: ApiTableSectionProps[] = [ ], }, { - name: "TimelineStatusProps", + name: "PillProps", attributes: [ { name: "", From 8b37fc023853f8f4f5369170fccd82b50f34da06 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Sat, 23 Mar 2024 13:47:02 +1300 Subject: [PATCH 0015/1949] [MOL-14812][KE] Check containerRef?.current instead of containerRef --- src/fullscreen-image-carousel/fullscreen-image-carousel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index ab1525718..cb9b0ba6a 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -156,7 +156,7 @@ export const Component = ( const getZoomRatio = () => { const imageDimension = imagesDimension[items[currentSlide].src]; - if (containerRef && !!imageDimension) { + if (containerRef?.current && !!imageDimension) { const { clientHeight, clientWidth } = containerRef.current; const { width, height } = imageDimension; const isSmallImg = width < clientWidth && height < clientHeight; From ea6c26cc8486616b3a5f454a25102132f85a7125 Mon Sep 17 00:00:00 2001 From: Eric Date: Tue, 26 Mar 2024 09:42:03 +0800 Subject: [PATCH 0016/1949] [MOL-15228][ES] Add hideKeyboard prop to DateInput component --- src/date-input/date-input.tsx | 2 ++ src/date-input/types.ts | 1 + .../standalone-date-input/standalone-date-input.tsx | 8 +++++--- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 3ec561223..8f0436a9a 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -18,6 +18,7 @@ export const DateInput = ({ disabled, disabledDates, error, + hideKeyboard, value, onChange, onFocus, @@ -166,6 +167,7 @@ export const DateInput = ({ names={["start-day", "start-month", "start-year"]} value={selectedDate} hoverValue={hoveredDate} + hideKeyboard={hideKeyboard} /> ) => { @@ -318,7 +320,7 @@ export const Component = ( onBlur={handleInputBlur} onChange={handleInputChange} type="text" - inputMode="numeric" + inputMode={hideKeyboard ? "none" : "numeric"} pattern="[0-9]{2}" data-testid={`${names[0]}-input`} aria-label="day" @@ -341,7 +343,7 @@ export const Component = ( onChange={handleInputChange} onKeyDown={handleKeyDown} type="text" - inputMode="numeric" + inputMode={hideKeyboard ? "none" : "numeric"} pattern="[0-9]{2}" data-testid={`${names[1]}-input`} aria-label="month" @@ -364,7 +366,7 @@ export const Component = ( onChange={handleInputChange} onKeyDown={handleKeyDown} type="text" - inputMode="numeric" + inputMode={hideKeyboard ? "none" : "numeric"} pattern="[0-9]{4}" data-testid={`${names[2]}-input`} aria-label="year" From 4b8c7755204d0923d95a692f590c93e79845bd9c Mon Sep 17 00:00:00 2001 From: Eric Date: Tue, 26 Mar 2024 09:44:45 +0800 Subject: [PATCH 0017/1949] Add hideKeyboard to DateInput stories --- stories/form/form-date-input/form-date-input.stories.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stories/form/form-date-input/form-date-input.stories.tsx b/stories/form/form-date-input/form-date-input.stories.tsx index 94ed4b6eb..1a5e171ff 100644 --- a/stories/form/form-date-input/form-date-input.stories.tsx +++ b/stories/form/form-date-input/form-date-input.stories.tsx @@ -22,6 +22,10 @@ export const Default: StoryObj = { return ( + Date: Tue, 26 Mar 2024 16:08:31 +1300 Subject: [PATCH 0018/1949] [MOL-14993][KE] Add id to IndicatorTitleMobile step counter and title --- src/progress-indicator/progress-indicator.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/progress-indicator/progress-indicator.tsx b/src/progress-indicator/progress-indicator.tsx index b601933fe..c677c208a 100644 --- a/src/progress-indicator/progress-indicator.tsx +++ b/src/progress-indicator/progress-indicator.tsx @@ -108,10 +108,16 @@ export const ProgressIndicator = ({ aria-label={getAriaLabel(currentIndex, currentIndex)} id={getId(currentIndex, currentIndex)} > - + Step {currentIndex + 1} of {steps.length} - + {getDisplayValue(steps[currentIndex])} From 09019ae1567d3956ac9378ac8545630d1360b643 Mon Sep 17 00:00:00 2001 From: trung hieu dao Date: Tue, 26 Mar 2024 11:26:11 +0800 Subject: [PATCH 0019/1949] [MOL-15209][DH] add optional zIndex prop to popover trigger, label addon --- src/form/form-label-addon.tsx | 3 ++- src/form/types.ts | 1 + src/popover-v2/popover-trigger.tsx | 6 +++++- src/popover-v2/types.ts | 1 + stories/form/form-label/props-table.tsx | 5 +++++ stories/popover-v2/props-table.tsx | 5 +++++ 6 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/form/form-label-addon.tsx b/src/form/form-label-addon.tsx index 5e2806144..9bb472b9d 100644 --- a/src/form/form-label-addon.tsx +++ b/src/form/form-label-addon.tsx @@ -21,7 +21,7 @@ export const PopoverAddon = ({ // ========================================================================= // CONST, STATE, REF // ========================================================================= - const { content, type, icon, id, "data-testid": testId } = addon; + const { content, type, icon, id, zIndex, "data-testid": testId } = addon; // ========================================================================= // RENDER FUNCTION @@ -41,6 +41,7 @@ export const PopoverAddon = ({ data-testid={testId} popoverContent={content} rootNode={rootNode} + zIndex={zIndex} > {renderIcon()} diff --git a/src/form/types.ts b/src/form/types.ts index 48c8c48a2..b62275056 100644 --- a/src/form/types.ts +++ b/src/form/types.ts @@ -32,6 +32,7 @@ export interface FormLabelAddonProps { type?: FormLabelAddonType | undefined; icon?: JSX.Element | undefined; id?: string | undefined; + zIndex?: number | undefined; "data-testid"?: string | undefined; } diff --git a/src/popover-v2/popover-trigger.tsx b/src/popover-v2/popover-trigger.tsx index ce0c0a446..545d7a799 100644 --- a/src/popover-v2/popover-trigger.tsx +++ b/src/popover-v2/popover-trigger.tsx @@ -19,6 +19,7 @@ export const PopoverTrigger = ({ popoverContent, trigger = "click", position = "top", + zIndex, rootNode, onPopoverAppear, onPopoverDismiss, @@ -117,7 +118,10 @@ export const PopoverTrigger = ({ <> {visible && ( -
+
{renderPopover()}
diff --git a/src/popover-v2/types.ts b/src/popover-v2/types.ts index 10a36de62..6fa9030c4 100644 --- a/src/popover-v2/types.ts +++ b/src/popover-v2/types.ts @@ -23,6 +23,7 @@ export interface PopoverV2TriggerProps { trigger?: PopoverV2TriggerType | undefined; position?: PopoverV2Position | undefined; id?: string | undefined; + zIndex?: number | undefined; className?: string | undefined; "data-testid"?: string | undefined; /** diff --git a/stories/form/form-label/props-table.tsx b/stories/form/form-label/props-table.tsx index 41a708037..b4ba71c44 100644 --- a/stories/form/form-label/props-table.tsx +++ b/stories/form/form-label/props-table.tsx @@ -68,6 +68,11 @@ export const FORM_LABEL_ADDON_PROPS_DATA: ApiTableSectionProps = { description: "The unique identifier of the addon", propTypes: ["string"], }, + { + name: "zIndex", + description: "The custom z-index of the popover addon", + propTypes: ["number"], + }, { name: "data-testid", description: "The test identifier of the addon", diff --git a/stories/popover-v2/props-table.tsx b/stories/popover-v2/props-table.tsx index 57f6278f6..4afd6e7a7 100644 --- a/stories/popover-v2/props-table.tsx +++ b/stories/popover-v2/props-table.tsx @@ -76,6 +76,11 @@ const POPOVER_TRIGGER_DATA: ApiTableSectionProps[] = [ ], defaultValue: `"top"`, }, + { + name: "zIndex", + description: "The custom z-index of the popover", + propTypes: ["number"], + }, { name: "rootNode", description: ( From 02ad1514feb828e526b7612a210ba5085e2e191e Mon Sep 17 00:00:00 2001 From: Eric Date: Tue, 26 Mar 2024 13:59:05 +0800 Subject: [PATCH 0020/1949] [MOL-15228][ES] Update hideKeyboard in DateInput stories --- stories/form/form-date-input/form-date-input.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/form/form-date-input/form-date-input.stories.tsx b/stories/form/form-date-input/form-date-input.stories.tsx index 1a5e171ff..28019c4a2 100644 --- a/stories/form/form-date-input/form-date-input.stories.tsx +++ b/stories/form/form-date-input/form-date-input.stories.tsx @@ -24,7 +24,7 @@ export const Default: StoryObj = { Date: Wed, 27 Mar 2024 09:21:22 +0800 Subject: [PATCH 0021/1949] [MOL-15228][ES] Rename hideKeyboard to hideInputKeyboard --- src/date-input/date-input.tsx | 4 ++-- src/date-input/types.ts | 2 +- .../standalone-date-input/standalone-date-input.tsx | 10 +++++----- .../form/form-date-input/form-date-input.stories.tsx | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 8f0436a9a..552e72657 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -18,7 +18,7 @@ export const DateInput = ({ disabled, disabledDates, error, - hideKeyboard, + hideInputKeyboard, value, onChange, onFocus, @@ -167,7 +167,7 @@ export const DateInput = ({ names={["start-day", "start-month", "start-year"]} value={selectedDate} hoverValue={hoveredDate} - hideKeyboard={hideKeyboard} + hideInputKeyboard={hideInputKeyboard} /> ) => { @@ -320,7 +320,7 @@ export const Component = ( onBlur={handleInputBlur} onChange={handleInputChange} type="text" - inputMode={hideKeyboard ? "none" : "numeric"} + inputMode={hideInputKeyboard ? "none" : "numeric"} pattern="[0-9]{2}" data-testid={`${names[0]}-input`} aria-label="day" @@ -343,7 +343,7 @@ export const Component = ( onChange={handleInputChange} onKeyDown={handleKeyDown} type="text" - inputMode={hideKeyboard ? "none" : "numeric"} + inputMode={hideInputKeyboard ? "none" : "numeric"} pattern="[0-9]{2}" data-testid={`${names[1]}-input`} aria-label="month" @@ -366,7 +366,7 @@ export const Component = ( onChange={handleInputChange} onKeyDown={handleKeyDown} type="text" - inputMode={hideKeyboard ? "none" : "numeric"} + inputMode={hideInputKeyboard ? "none" : "numeric"} pattern="[0-9]{4}" data-testid={`${names[2]}-input`} aria-label="year" diff --git a/stories/form/form-date-input/form-date-input.stories.tsx b/stories/form/form-date-input/form-date-input.stories.tsx index 28019c4a2..47ce28c89 100644 --- a/stories/form/form-date-input/form-date-input.stories.tsx +++ b/stories/form/form-date-input/form-date-input.stories.tsx @@ -23,8 +23,8 @@ export const Default: StoryObj = { Date: Wed, 27 Mar 2024 09:30:42 +0800 Subject: [PATCH 0022/1949] [MOL-15228][ES] Add hideInputKeyboard prop to DateRangeInput --- src/date-range-input/date-range-input.tsx | 3 +++ src/date-range-input/types.ts | 1 + .../form-date-range-input/form-date-range-input.stories.tsx | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/src/date-range-input/date-range-input.tsx b/src/date-range-input/date-range-input.tsx index ad98028da..6b1563737 100644 --- a/src/date-range-input/date-range-input.tsx +++ b/src/date-range-input/date-range-input.tsx @@ -50,6 +50,7 @@ export const DateRangeInput = ({ disabled, disabledDates, error, + hideInputKeyboard, value, valueEnd, onChange, @@ -555,6 +556,7 @@ export const DateRangeInput = ({ } onFocus={handleInputFocus("start")} onBlur={handleStartInputBlur} + hideInputKeyboard={hideInputKeyboard} /> @@ -570,6 +572,7 @@ export const DateRangeInput = ({ onChange={handleEndDateChange} onFocus={handleInputFocus("end")} onBlur={handleEndInputBlur} + hideInputKeyboard={hideInputKeyboard} /> diff --git a/src/date-range-input/types.ts b/src/date-range-input/types.ts index 0ef10290c..f93c54c68 100644 --- a/src/date-range-input/types.ts +++ b/src/date-range-input/types.ts @@ -11,6 +11,7 @@ export interface DateRangeInputProps extends CommonCalendarProps { // Input-specific Attributes "data-testid"?: string | undefined; + hideInputKeyboard?: boolean | undefined; /** * The value of the start date input in "YYYY-MM-DD" or "YYYY-M-D" string format. */ diff --git a/stories/form/form-date-range-input/form-date-range-input.stories.tsx b/stories/form/form-date-range-input/form-date-range-input.stories.tsx index 439a6746a..7438a2980 100644 --- a/stories/form/form-date-range-input/form-date-range-input.stories.tsx +++ b/stories/form/form-date-range-input/form-date-range-input.stories.tsx @@ -33,6 +33,10 @@ export const Default: StoryObj = { setEnd(e); }} /> + Date: Wed, 27 Mar 2024 09:41:29 +0800 Subject: [PATCH 0023/1949] [MOL-15228][ES] Add hideInputKeyboard to props-table.tsx --- stories/form/form-date-input/props-table.tsx | 6 ++++++ stories/form/form-date-range-input/props-table.tsx | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/stories/form/form-date-input/props-table.tsx b/stories/form/form-date-input/props-table.tsx index fb9feff9a..f7bac343b 100644 --- a/stories/form/form-date-input/props-table.tsx +++ b/stories/form/form-date-input/props-table.tsx @@ -98,6 +98,12 @@ const DATA: ApiTableSectionProps[] = [ "Indicates if the component has a read only state and selection or input is not allowed", propTypes: ["boolean"], }, + { + name: "hideInputKeyboard", + description: + "Indicates if the component should hide input keyboard when user clicks on input field", + propTypes: ["boolean"], + }, { name: "value", description: ( diff --git a/stories/form/form-date-range-input/props-table.tsx b/stories/form/form-date-range-input/props-table.tsx index e9dceb904..69ec4c040 100644 --- a/stories/form/form-date-range-input/props-table.tsx +++ b/stories/form/form-date-range-input/props-table.tsx @@ -98,6 +98,12 @@ const DATA: ApiTableSectionProps[] = [ "Indicates if the component has a read only state and selection or input is not allowed", propTypes: ["boolean"], }, + { + name: "hideInputKeyboard", + description: + "Indicates if the component should hide input keyboard when user clicks on input field", + propTypes: ["boolean"], + }, { name: "value", description: ( From 3f75f516765c2992e3ffb223877b0f4df91d55ef Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 27 Mar 2024 09:47:49 +0800 Subject: [PATCH 0024/1949] [MOL-15228][ES] Update hideInputKeyboard label in stories --- stories/form/form-date-input/form-date-input.stories.tsx | 2 +- .../form-date-range-input/form-date-range-input.stories.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stories/form/form-date-input/form-date-input.stories.tsx b/stories/form/form-date-input/form-date-input.stories.tsx index 47ce28c89..a6fe9871b 100644 --- a/stories/form/form-date-input/form-date-input.stories.tsx +++ b/stories/form/form-date-input/form-date-input.stories.tsx @@ -23,7 +23,7 @@ export const Default: StoryObj = { = { }} /> Date: Mon, 1 Apr 2024 15:30:34 +0800 Subject: [PATCH 0025/1949] [CCUBE-1199][BL] Created new component called button-with-icon --- .../button-with-icon.style.tsx | 212 ++++++++++++++++++ src/button-with-icon/button-with-icon.tsx | 89 ++++++++ src/button-with-icon/index.ts | 2 + src/button-with-icon/types.ts | 32 +++ 4 files changed, 335 insertions(+) create mode 100644 src/button-with-icon/button-with-icon.style.tsx create mode 100644 src/button-with-icon/button-with-icon.tsx create mode 100644 src/button-with-icon/index.ts create mode 100644 src/button-with-icon/types.ts diff --git a/src/button-with-icon/button-with-icon.style.tsx b/src/button-with-icon/button-with-icon.style.tsx new file mode 100644 index 000000000..d2a2dcc08 --- /dev/null +++ b/src/button-with-icon/button-with-icon.style.tsx @@ -0,0 +1,212 @@ +import styled, { css } from "styled-components"; +import { Color } from "../color/color"; +import { MediaQuery } from "../media/media"; +import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; +import { TextStyleHelper } from "../text"; +import { MainStyleProps } from "./types"; +import { DesignToken } from "../design-token"; + +export const Main = styled.button` + padding: 0.5rem 1rem; + min-width: 4rem; + border-radius: 4px; + transition: all 200ms ease; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + + @media (hover: hover) { + &:hover { + box-shadow: 1px 1px 4px 2px rgba(0, 0, 0, 0.2); + } + } + + // ----------------------------------------------------------------------------- + // BUTTON STYLE + TEXT COLOR + // ----------------------------------------------------------------------------- + ${(props) => { + switch (props.$buttonStyle) { + case "secondary": + return css` + background-color: ${Color.Neutral[8]}; + border: 1px solid + ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Border + : Color.Primary}; + + span { + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Primary + : Color.Primary}; + display: flex; + align-items: center; + gap: 0.5rem; + flex-direction: ${props.$buttonIconPosition === "right" + ? "row-reverse" + : ""}; + } + `; + case "light": + return css` + background-color: ${Color.Neutral[8]}; + border: 1px solid ${Color.Neutral[5]}; + + span { + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Primary + : Color.Primary}; + display: flex; + align-items: center; + gap: 0.5rem; + flex-direction: ${props.$buttonIconPosition === "right" + ? "row-reverse" + : ""}; + } + `; + case "disabled": + return css` + background-color: ${Color.Neutral[6]}; + border: 1px solid transparent; + cursor: not-allowed; + + &:hover { + box-shadow: none; + } + + span { + color: ${Color.Neutral[3]}; + display: flex; + align-items: center; + gap: 0.5rem; + flex-direction: ${props.$buttonIconPosition === "right" + ? "row-reverse" + : ""}; + } + `; + case "link": + return css` + background-color: transparent; + border: none; + border-radius: unset; + + span { + display: flex; + align-items: center; + gap: 0.5rem; + flex-direction: ${props.$buttonIconPosition === "right" + ? "row-reverse" + : ""}; + } + + &:hover { + box-shadow: none; + } + + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Primary + : Color.Primary}; + :hover, + :active, + :focus { + span { + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Hover + : Color.Secondary}; + } + } + `; + default: + return css` + background-color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.BackgroundColor + : Color.Primary}; + border: 1px solid transparent; + + ${MediaQuery.MaxWidth.mobileL} { + width: 100%; + } + + span { + color: ${Color.Neutral[8]}; + display: flex; + align-items: center; + gap: 0.5rem; + flex-direction: ${props.$buttonIconPosition === "right" + ? "row-reverse" + : ""}; + } + `; + } + }} + + // ----------------------------------------------------------------------------- + // BUTTON SIZE + TEXT SIZE + // ----------------------------------------------------------------------------- + ${(props) => { + switch (props.$buttonSizeStyle) { + case "small": + return css` + height: 2.5rem; + span { + ${TextStyleHelper.getTextStyle("H5", "semibold")} + display: flex; + align-items: center; + flex-direction: ${props.$buttonIconPosition === "right" + ? "row-reverse" + : ""}; + } + + ${MediaQuery.MaxWidth.mobileS} { + height: auto; + } + `; + default: + return css` + height: 3rem; + span { + ${TextStyleHelper.getTextStyle("H4", "semibold")} + display: flex; + align-items: center; + flex-direction: ${props.$buttonIconPosition === "right" + ? "row-reverse" + : ""}; + } + + ${MediaQuery.MaxWidth.mobileS} { + height: auto; + } + `; + } + }} +`; + +export const Spinner = styled(ComponentLoadingSpinner)` + margin-right: 0.5rem; + ${(props) => { + let color = props.$buttonIsDanger + ? DesignToken.Button.Danger.Primary + : Color.Primary(props); + switch (props.$buttonStyle) { + case "secondary": + case "light": + case "link": + break; + case "disabled": + color = Color.Neutral[3](props); + break; + default: + color = Color.Neutral[8](props); + break; + } + + return css` + #inner1, + #inner2, + #inner3, + #inner4 { + border-color: ${color} transparent transparent transparent; + } + `; + }} +`; diff --git a/src/button-with-icon/button-with-icon.tsx b/src/button-with-icon/button-with-icon.tsx new file mode 100644 index 000000000..9f4c03576 --- /dev/null +++ b/src/button-with-icon/button-with-icon.tsx @@ -0,0 +1,89 @@ +import React from "react"; +import { + ButtonWithIconProps, + ButtonWithIconRef, + MainStyleProps, +} from "./types"; +import { Main } from "./button-with-icon.style"; + +/** + * NOTE: Due to the way we intend to customise both components, with forwardRef behaviour + * we are unable to create a single component and have them share. + * + * Will refactor if there is a better way + */ +const DefaultComponent = ( + props: ButtonWithIconProps, + ref: ButtonWithIconRef +) => { + const { + children, + disabled = false, + styleType = "default", + danger = false, + icon, + iconPosition = "left", + ...otherProps + } = props; + + const mainStyle: MainStyleProps = { + $buttonIcon: icon, + $buttonIconPosition: iconPosition, + $buttonStyle: disabled ? "disabled" : styleType, + $buttonSizeStyle: "default", + $buttonIsDanger: danger, + }; + + return ( +
+ + {icon} {children} + +
+ ); +}; + +const SmallComponent = (props: ButtonWithIconProps, ref: ButtonWithIconRef) => { + const { + children, + disabled = false, + styleType = "default", + danger = false, + icon, + iconPosition = "left", + ...otherProps + } = props; + + const mainStyle: MainStyleProps = { + $buttonIcon: icon, + $buttonIconPosition: iconPosition, + $buttonStyle: disabled ? "disabled" : styleType, + $buttonSizeStyle: "small", + $buttonIsDanger: danger, + }; + + return ( +
+ + {icon} {children} + +
+ ); +}; + +export const ButtonWithIcon = { + Default: React.forwardRef(DefaultComponent), + Small: React.forwardRef(SmallComponent), +}; diff --git a/src/button-with-icon/index.ts b/src/button-with-icon/index.ts new file mode 100644 index 000000000..ef4c8f7ef --- /dev/null +++ b/src/button-with-icon/index.ts @@ -0,0 +1,2 @@ +export * from "./button-with-icon"; +export * from "./types"; diff --git a/src/button-with-icon/types.ts b/src/button-with-icon/types.ts new file mode 100644 index 000000000..b2f3e6769 --- /dev/null +++ b/src/button-with-icon/types.ts @@ -0,0 +1,32 @@ +import React from "react"; + +type StyleType = "default" | "secondary" | "light" | "link"; +export interface ButtonWithIconProps + extends React.ButtonHTMLAttributes { + /** The icon to be added to the button */ + icon: JSX.Element; + /** Specifies where the icon will be positioned */ + iconPosition?: "left" | "right"; + /** The style type of the button. Values: "default" | "secondary" | "light" | "link" */ + styleType?: StyleType | undefined; + /** Indicates if a loading spinner is to be displayed */ + danger?: boolean | undefined; +} + +export type ButtonWithIconRef = React.Ref; + +export type MainButtonStyle = + | "default" + | "disabled" + | "secondary" + | "light" + | "link"; +export type MainButtonSize = "default" | "small"; +export type ButtonIconPosition = "left" | "right"; +export interface MainStyleProps { + $buttonStyle: MainButtonStyle; + $buttonIcon: JSX.Element; + $buttonIconPosition?: ButtonIconPosition | undefined; + $buttonSizeStyle?: MainButtonSize | undefined; + $buttonIsDanger?: boolean; +} From cd69368e76df22c15e309d7df7a28794d374e60f Mon Sep 17 00:00:00 2001 From: Benjamin leong Date: Mon, 1 Apr 2024 15:32:49 +0800 Subject: [PATCH 0026/1949] [CCUBE-1199][BL] Created stories for button-with-icon --- stories/button-with-icon/button-with-icon.mdx | 37 +++ .../button-with-icon.stories.tsx | 216 ++++++++++++++++++ stories/button-with-icon/props-table.tsx | 56 +++++ 3 files changed, 309 insertions(+) create mode 100644 stories/button-with-icon/button-with-icon.mdx create mode 100644 stories/button-with-icon/button-with-icon.stories.tsx create mode 100644 stories/button-with-icon/props-table.tsx diff --git a/stories/button-with-icon/button-with-icon.mdx b/stories/button-with-icon/button-with-icon.mdx new file mode 100644 index 000000000..3fdd2b1e4 --- /dev/null +++ b/stories/button-with-icon/button-with-icon.mdx @@ -0,0 +1,37 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../storybook-common"; +import * as ButtonWithIconStories from "./button-with-icon.stories"; +import { PropsTable } from "./props-table"; + + + +Button With Icon + +Overview + +The primary call to action component. + +```tsx +import { ButtonWithIcon } from "@lifesg/react-design-system/button-with-icon"; +``` + +The `ButtonWithIcon` component comes in 2 sizes, a default and small size. + + + +You can also specify the icon to be on the right side. + + + +Danger + +In some cases, when there is a requirement to display an enhanced display for +destructive or important actions, you can make use of the `danger` prop which will +apply a red scheme over the buttons. + + + +Component API + + +import {ButtonWithIcon} from "../../src/button-with-icon"; diff --git a/stories/button-with-icon/button-with-icon.stories.tsx b/stories/button-with-icon/button-with-icon.stories.tsx new file mode 100644 index 000000000..2df219946 --- /dev/null +++ b/stories/button-with-icon/button-with-icon.stories.tsx @@ -0,0 +1,216 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { ButtonWithIcon } from "../../src/button-with-icon"; +import { Container } from "../button/doc-elements"; +import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; + +type Component = typeof ButtonWithIcon.Default; + +const meta: Meta = { + title: "General/ButtonWithIcon", + component: ButtonWithIcon.Default, +}; + +export default meta; + +export const Default: StoryObj = { + render: () => { + return ( + <> + + }> + Default + + } + styleType="secondary" + > + Secondary + + } + styleType="light" + > + Light + + } + styleType="link" + > + Link + + } disabled> + Disabled + + + + }> + Small + + } + styleType="secondary" + > + Secondary + + } + styleType="light" + > + Light + + } + styleType="link" + > + Link + + } disabled> + Disabled + + + + ); + }, +}; + +export const IconPositionRight: StoryObj = { + render: () => { + return ( + <> + + } + iconPosition="right" + > + Default + + } + styleType="secondary" + iconPosition="right" + > + Secondary + + } + styleType="light" + iconPosition="right" + > + Light + + } + styleType="link" + iconPosition="right" + > + Link + + } + iconPosition="right" + disabled + > + Disabled + + + + } + iconPosition="right" + > + Small + + } + styleType="secondary" + iconPosition="right" + > + Secondary + + } + styleType="light" + iconPosition="right" + > + Light + + } + styleType="link" + iconPosition="right" + > + Link + + } + iconPosition="right" + disabled + > + Disabled + + + + ); + }, +}; + +export const Danger: StoryObj = { + render: () => { + return ( + <> + + } danger> + Default + + } + styleType="secondary" + danger + > + Secondary + + } + styleType="light" + danger + > + Light + + } + styleType="link" + danger + > + Link + + + + } danger> + Small + + } + styleType="secondary" + danger + > + Secondary + + } + styleType="light" + danger + > + Light + + } + styleType="link" + danger + > + Link + + + + ); + }, +}; diff --git a/stories/button-with-icon/props-table.tsx b/stories/button-with-icon/props-table.tsx new file mode 100644 index 000000000..b950f4b1e --- /dev/null +++ b/stories/button-with-icon/props-table.tsx @@ -0,0 +1,56 @@ +import { ApiTable } from "../storybook-common/api-table"; +import { ApiTableSectionProps } from "../storybook-common/api-table/types"; + +const DATA: ApiTableSectionProps[] = [ + { + attributes: [ + { + name: "", + description: ( + <> + This component also inherits props from  + + HTMLButtonElement + + + ), + }, + { + name: "icon", + description: "specifies the icon to be in the button ", + propTypes: ["JSX.Element"], + }, + { + name: "iconPosition", + description: + "specifies whether the icon is displayed on the left or right of the label ", + propTypes: [`"left"`, `"right"`], + defaultValue: `"left"`, + }, + { + name: "styleType", + mandatory: true, + description: ( + <> + The style of the Button + + ), + propTypes: [`"default"`, `"secondary"`, `"light"`, `"link"`], + defaultValue: `"default"`, + }, + { + name: "danger", + description: + "If specified, the component will have a red color scheme being applied", + propTypes: ["boolean"], + defaultValue: "false", + }, + ], + }, +]; + +export const PropsTable = () => ; From baf52a224c7da3e1f2c3c376ba2a121e53d83a4c Mon Sep 17 00:00:00 2001 From: Benjamin leong Date: Mon, 1 Apr 2024 15:35:00 +0800 Subject: [PATCH 0027/1949] [CCUBE-1199][BL] Test case for button-with-icon --- .../button-with-icon.spec.tsx | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 tests/button-with-icon/button-with-icon.spec.tsx diff --git a/tests/button-with-icon/button-with-icon.spec.tsx b/tests/button-with-icon/button-with-icon.spec.tsx new file mode 100644 index 000000000..1dc601101 --- /dev/null +++ b/tests/button-with-icon/button-with-icon.spec.tsx @@ -0,0 +1,62 @@ +import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; +import { fireEvent, getByText, render, screen } from "@testing-library/react"; +import { ButtonWithIcon } from "../../src/button-with-icon"; + +// ============================================================================= +// UNIT TESTS +// ============================================================================= +describe("ButtonWithIcon", () => { + beforeEach(() => { + jest.resetAllMocks(); + }); + + it("should render the component", () => { + render( + }> + {BUTTON_TEXT} + + ); + + expect(screen.getByText(BUTTON_TEXT)).toBeInTheDocument(); + }); + + it("should render the icon", () => { + const { getByTestId } = render( + } + iconPosition="left" + data-testid="test-button" + > + {BUTTON_TEXT} + + ); + + const button = getByTestId("test-button"); + const icon = button.querySelector("svg"); + + expect(icon).toBeInTheDocument(); + }); + + it("should render the button and registers onClick event", () => { + const onClickMock = jest.fn(); + const { getByTestId } = render( + } + data-testid="test-button" + > + {BUTTON_TEXT} + + ); + const button = getByTestId("test-button"); + + fireEvent.click(button); + + expect(onClickMock).toHaveBeenCalledTimes(1); + }); +}); + +// ============================================================================= +// CONSTANTS +// ============================================================================= +const BUTTON_TEXT = "Click me"; From 9b5e48ae15b80e02a9a6c5b7b41fe9c229086ade Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 1 Apr 2024 17:57:31 +0800 Subject: [PATCH 0028/1949] [MISC][RL] Update popover docs on z-index --- stories/popover-v2/props-table.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/stories/popover-v2/props-table.tsx b/stories/popover-v2/props-table.tsx index 4afd6e7a7..2224ccdc2 100644 --- a/stories/popover-v2/props-table.tsx +++ b/stories/popover-v2/props-table.tsx @@ -78,7 +78,12 @@ const POPOVER_TRIGGER_DATA: ApiTableSectionProps[] = [ }, { name: "zIndex", - description: "The custom z-index of the popover", + description: ( + <> + The custom z-index of the Popover. Try + specifying this if you encounter z-index conflicts. + + ), propTypes: ["number"], }, { @@ -86,7 +91,7 @@ const POPOVER_TRIGGER_DATA: ApiTableSectionProps[] = [ description: ( <> The root element that hosts the popover element. Try - specifying this if you encounter z-index conflicts. + specifying this if zIndex does not work.

For example, if the parent of the trigger element has a From ea51fd070111d3c28c3b2748713c840353818c21 Mon Sep 17 00:00:00 2001 From: Benjamin leong Date: Mon, 1 Apr 2024 18:12:25 +0800 Subject: [PATCH 0029/1949] [CCUBE-1199][BL] Refactoring of styling and types --- .../button-with-icon.style.tsx | 104 ++++++------------ src/button-with-icon/button-with-icon.tsx | 17 +-- src/button-with-icon/types.ts | 7 -- 3 files changed, 37 insertions(+), 91 deletions(-) diff --git a/src/button-with-icon/button-with-icon.style.tsx b/src/button-with-icon/button-with-icon.style.tsx index d2a2dcc08..267e2adb6 100644 --- a/src/button-with-icon/button-with-icon.style.tsx +++ b/src/button-with-icon/button-with-icon.style.tsx @@ -3,9 +3,23 @@ import { Color } from "../color/color"; import { MediaQuery } from "../media/media"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; import { TextStyleHelper } from "../text"; -import { MainStyleProps } from "./types"; +import { ButtonIconPosition, MainButtonSize, MainButtonStyle } from "./types"; import { DesignToken } from "../design-token"; +// ============================================================================= +// STYLE INTERFACES +// ============================================================================= +export interface MainStyleProps { + $buttonStyle: MainButtonStyle; + $buttonIcon: JSX.Element; + $buttonIconPosition?: ButtonIconPosition | undefined; + $buttonSizeStyle?: MainButtonSize | undefined; + $buttonIsDanger?: boolean; +} + +// ============================================================================= +// STYLING +// ============================================================================= export const Main = styled.button` padding: 0.5rem 1rem; min-width: 4rem; @@ -15,13 +29,15 @@ export const Main = styled.button` display: flex; align-items: center; justify-content: center; + flex-direction: ${(props) => + props.$buttonIconPosition === "right" ? "row-reverse" : "row"}; + gap: 0.5rem; @media (hover: hover) { &:hover { box-shadow: 1px 1px 4px 2px rgba(0, 0, 0, 0.2); } } - // ----------------------------------------------------------------------------- // BUTTON STYLE + TEXT COLOR // ----------------------------------------------------------------------------- @@ -34,86 +50,48 @@ export const Main = styled.button` ${props.$buttonIsDanger ? DesignToken.Button.Danger.Border : Color.Primary}; - - span { - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Primary - : Color.Primary}; - display: flex; - align-items: center; - gap: 0.5rem; - flex-direction: ${props.$buttonIconPosition === "right" - ? "row-reverse" - : ""}; - } + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Primary + : Color.Primary}; `; case "light": return css` background-color: ${Color.Neutral[8]}; border: 1px solid ${Color.Neutral[5]}; - - span { - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Primary - : Color.Primary}; - display: flex; - align-items: center; - gap: 0.5rem; - flex-direction: ${props.$buttonIconPosition === "right" - ? "row-reverse" - : ""}; - } + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Primary + : Color.Primary}; `; case "disabled": return css` background-color: ${Color.Neutral[6]}; border: 1px solid transparent; cursor: not-allowed; + color: ${Color.Neutral[3]}; &:hover { box-shadow: none; } - - span { - color: ${Color.Neutral[3]}; - display: flex; - align-items: center; - gap: 0.5rem; - flex-direction: ${props.$buttonIconPosition === "right" - ? "row-reverse" - : ""}; - } `; case "link": return css` background-color: transparent; border: none; border-radius: unset; - - span { - display: flex; - align-items: center; - gap: 0.5rem; - flex-direction: ${props.$buttonIconPosition === "right" - ? "row-reverse" - : ""}; - } + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Primary + : Color.Primary}; &:hover { box-shadow: none; } - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Primary - : Color.Primary}; :hover, :active, :focus { - span { - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Hover - : Color.Secondary}; - } + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Hover + : Color.Secondary}; } `; default: @@ -127,15 +105,7 @@ export const Main = styled.button` width: 100%; } - span { - color: ${Color.Neutral[8]}; - display: flex; - align-items: center; - gap: 0.5rem; - flex-direction: ${props.$buttonIconPosition === "right" - ? "row-reverse" - : ""}; - } + color: ${Color.Neutral[8]}; `; } }} @@ -150,11 +120,6 @@ export const Main = styled.button` height: 2.5rem; span { ${TextStyleHelper.getTextStyle("H5", "semibold")} - display: flex; - align-items: center; - flex-direction: ${props.$buttonIconPosition === "right" - ? "row-reverse" - : ""}; } ${MediaQuery.MaxWidth.mobileS} { @@ -166,11 +131,6 @@ export const Main = styled.button` height: 3rem; span { ${TextStyleHelper.getTextStyle("H4", "semibold")} - display: flex; - align-items: center; - flex-direction: ${props.$buttonIconPosition === "right" - ? "row-reverse" - : ""}; } ${MediaQuery.MaxWidth.mobileS} { diff --git a/src/button-with-icon/button-with-icon.tsx b/src/button-with-icon/button-with-icon.tsx index 9f4c03576..0b096aef9 100644 --- a/src/button-with-icon/button-with-icon.tsx +++ b/src/button-with-icon/button-with-icon.tsx @@ -1,10 +1,6 @@ import React from "react"; -import { - ButtonWithIconProps, - ButtonWithIconRef, - MainStyleProps, -} from "./types"; -import { Main } from "./button-with-icon.style"; +import { ButtonWithIconProps, ButtonWithIconRef } from "./types"; +import { Main, MainStyleProps } from "./button-with-icon.style"; /** * NOTE: Due to the way we intend to customise both components, with forwardRef behaviour @@ -42,9 +38,8 @@ const DefaultComponent = ( {...mainStyle} {...otherProps} > - - {icon} {children} - + {icon} + {children} ); }; @@ -76,9 +71,7 @@ const SmallComponent = (props: ButtonWithIconProps, ref: ButtonWithIconRef) => { {...mainStyle} {...otherProps} > - - {icon} {children} - + {icon} {children} ); }; diff --git a/src/button-with-icon/types.ts b/src/button-with-icon/types.ts index b2f3e6769..ef0ac552d 100644 --- a/src/button-with-icon/types.ts +++ b/src/button-with-icon/types.ts @@ -23,10 +23,3 @@ export type MainButtonStyle = | "link"; export type MainButtonSize = "default" | "small"; export type ButtonIconPosition = "left" | "right"; -export interface MainStyleProps { - $buttonStyle: MainButtonStyle; - $buttonIcon: JSX.Element; - $buttonIconPosition?: ButtonIconPosition | undefined; - $buttonSizeStyle?: MainButtonSize | undefined; - $buttonIsDanger?: boolean; -} From a37657b4761080783a58026d6ba07feaddd7804a Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Wed, 27 Mar 2024 01:31:28 +0800 Subject: [PATCH 0030/1949] [MISC][KT] Bump version to v2.4.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a8ab9efb..0c690bd5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.4.0-canary.5", + "version": "2.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.4.0-canary.5", + "version": "2.4.0", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index cb8927e0e..fda8b7f9b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.4.0-canary.5", + "version": "2.4.0", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 0ac5e5a385c34f67dcf9d2691d8a6591a42f0a6e Mon Sep 17 00:00:00 2001 From: Eric Date: Tue, 2 Apr 2024 08:28:05 +0800 Subject: [PATCH 0031/1949] [MOL-15228][ES] Update hideInputKeyboard description in stories --- stories/form/form-date-input/props-table.tsx | 2 +- stories/form/form-date-range-input/props-table.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stories/form/form-date-input/props-table.tsx b/stories/form/form-date-input/props-table.tsx index f7bac343b..b48288243 100644 --- a/stories/form/form-date-input/props-table.tsx +++ b/stories/form/form-date-input/props-table.tsx @@ -101,7 +101,7 @@ const DATA: ApiTableSectionProps[] = [ { name: "hideInputKeyboard", description: - "Indicates if the component should hide input keyboard when user clicks on input field", + "If specified, the input keyboard will be hidden when the user focuses on the input field", propTypes: ["boolean"], }, { diff --git a/stories/form/form-date-range-input/props-table.tsx b/stories/form/form-date-range-input/props-table.tsx index 69ec4c040..279b2eb8e 100644 --- a/stories/form/form-date-range-input/props-table.tsx +++ b/stories/form/form-date-range-input/props-table.tsx @@ -101,7 +101,7 @@ const DATA: ApiTableSectionProps[] = [ { name: "hideInputKeyboard", description: - "Indicates if the component should hide input keyboard when user clicks on input field", + "If specified, the input keyboard will be hidden when the user focuses on the input field", propTypes: ["boolean"], }, { From c69d47eb4070748da92ecdf07fcba5d17a2499db Mon Sep 17 00:00:00 2001 From: Eric Date: Tue, 2 Apr 2024 08:40:42 +0800 Subject: [PATCH 0032/1949] [MOL-15228][ES] Refactor inputMode --- .../standalone-date-input/standalone-date-input.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/shared/standalone-date-input/standalone-date-input.tsx b/src/shared/standalone-date-input/standalone-date-input.tsx index 297db7ed8..83c369e2e 100644 --- a/src/shared/standalone-date-input/standalone-date-input.tsx +++ b/src/shared/standalone-date-input/standalone-date-input.tsx @@ -63,6 +63,8 @@ export const Component = ( // ============================================================================= // CONST, STATE, REF // ============================================================================= + const inputMode = hideInputKeyboard ? "none" : "numeric"; + const [dayValue, setDayValue, dayValueRef] = useStateRef(""); const [monthValue, setMonthValue, monthValueRef] = useStateRef(""); const [yearValue, setYearValue, yearValueRef] = useStateRef(""); @@ -320,7 +322,7 @@ export const Component = ( onBlur={handleInputBlur} onChange={handleInputChange} type="text" - inputMode={hideInputKeyboard ? "none" : "numeric"} + inputMode={inputMode} pattern="[0-9]{2}" data-testid={`${names[0]}-input`} aria-label="day" @@ -343,7 +345,7 @@ export const Component = ( onChange={handleInputChange} onKeyDown={handleKeyDown} type="text" - inputMode={hideInputKeyboard ? "none" : "numeric"} + inputMode={inputMode} pattern="[0-9]{2}" data-testid={`${names[1]}-input`} aria-label="month" @@ -366,7 +368,7 @@ export const Component = ( onChange={handleInputChange} onKeyDown={handleKeyDown} type="text" - inputMode={hideInputKeyboard ? "none" : "numeric"} + inputMode={inputMode} pattern="[0-9]{4}" data-testid={`${names[2]}-input`} aria-label="year" From b68ab4b6dc60087fc7bb31212a0a1c755a1b2e06 Mon Sep 17 00:00:00 2001 From: Benjamin leong Date: Thu, 4 Apr 2024 09:31:48 +0800 Subject: [PATCH 0033/1949] [CCUBE-1199][BL] refactored button-with-icon to extend from button instead --- .../button-with-icon.style.tsx | 163 +----------------- src/button-with-icon/button-with-icon.tsx | 17 +- src/button-with-icon/types.ts | 15 +- src/button/button.style.tsx | 40 ++--- 4 files changed, 31 insertions(+), 204 deletions(-) diff --git a/src/button-with-icon/button-with-icon.style.tsx b/src/button-with-icon/button-with-icon.style.tsx index 267e2adb6..bc4124fe6 100644 --- a/src/button-with-icon/button-with-icon.style.tsx +++ b/src/button-with-icon/button-with-icon.style.tsx @@ -1,172 +1,21 @@ -import styled, { css } from "styled-components"; -import { Color } from "../color/color"; -import { MediaQuery } from "../media/media"; -import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; -import { TextStyleHelper } from "../text"; -import { ButtonIconPosition, MainButtonSize, MainButtonStyle } from "./types"; -import { DesignToken } from "../design-token"; +import styled from "styled-components"; +import { Main } from "../button/button.style"; +import { MainStyleProps } from "../button/types"; +import { ButtonIconPosition } from "./types"; // ============================================================================= // STYLE INTERFACES // ============================================================================= -export interface MainStyleProps { - $buttonStyle: MainButtonStyle; +export interface MainStylePropsWithIcon extends MainStyleProps { $buttonIcon: JSX.Element; $buttonIconPosition?: ButtonIconPosition | undefined; - $buttonSizeStyle?: MainButtonSize | undefined; - $buttonIsDanger?: boolean; } // ============================================================================= // STYLING // ============================================================================= -export const Main = styled.button` - padding: 0.5rem 1rem; - min-width: 4rem; - border-radius: 4px; - transition: all 200ms ease; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; +export const MainButtonWithIcon = styled(Main)` flex-direction: ${(props) => props.$buttonIconPosition === "right" ? "row-reverse" : "row"}; gap: 0.5rem; - - @media (hover: hover) { - &:hover { - box-shadow: 1px 1px 4px 2px rgba(0, 0, 0, 0.2); - } - } - // ----------------------------------------------------------------------------- - // BUTTON STYLE + TEXT COLOR - // ----------------------------------------------------------------------------- - ${(props) => { - switch (props.$buttonStyle) { - case "secondary": - return css` - background-color: ${Color.Neutral[8]}; - border: 1px solid - ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Border - : Color.Primary}; - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Primary - : Color.Primary}; - `; - case "light": - return css` - background-color: ${Color.Neutral[8]}; - border: 1px solid ${Color.Neutral[5]}; - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Primary - : Color.Primary}; - `; - case "disabled": - return css` - background-color: ${Color.Neutral[6]}; - border: 1px solid transparent; - cursor: not-allowed; - color: ${Color.Neutral[3]}; - - &:hover { - box-shadow: none; - } - `; - case "link": - return css` - background-color: transparent; - border: none; - border-radius: unset; - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Primary - : Color.Primary}; - - &:hover { - box-shadow: none; - } - - :hover, - :active, - :focus { - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Hover - : Color.Secondary}; - } - `; - default: - return css` - background-color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.BackgroundColor - : Color.Primary}; - border: 1px solid transparent; - - ${MediaQuery.MaxWidth.mobileL} { - width: 100%; - } - - color: ${Color.Neutral[8]}; - `; - } - }} - - // ----------------------------------------------------------------------------- - // BUTTON SIZE + TEXT SIZE - // ----------------------------------------------------------------------------- - ${(props) => { - switch (props.$buttonSizeStyle) { - case "small": - return css` - height: 2.5rem; - span { - ${TextStyleHelper.getTextStyle("H5", "semibold")} - } - - ${MediaQuery.MaxWidth.mobileS} { - height: auto; - } - `; - default: - return css` - height: 3rem; - span { - ${TextStyleHelper.getTextStyle("H4", "semibold")} - } - - ${MediaQuery.MaxWidth.mobileS} { - height: auto; - } - `; - } - }} -`; - -export const Spinner = styled(ComponentLoadingSpinner)` - margin-right: 0.5rem; - ${(props) => { - let color = props.$buttonIsDanger - ? DesignToken.Button.Danger.Primary - : Color.Primary(props); - switch (props.$buttonStyle) { - case "secondary": - case "light": - case "link": - break; - case "disabled": - color = Color.Neutral[3](props); - break; - default: - color = Color.Neutral[8](props); - break; - } - - return css` - #inner1, - #inner2, - #inner3, - #inner4 { - border-color: ${color} transparent transparent transparent; - } - `; - }} `; diff --git a/src/button-with-icon/button-with-icon.tsx b/src/button-with-icon/button-with-icon.tsx index 0b096aef9..e4a88537b 100644 --- a/src/button-with-icon/button-with-icon.tsx +++ b/src/button-with-icon/button-with-icon.tsx @@ -1,6 +1,9 @@ import React from "react"; +import { + MainButtonWithIcon, + MainStylePropsWithIcon, +} from "./button-with-icon.style"; import { ButtonWithIconProps, ButtonWithIconRef } from "./types"; -import { Main, MainStyleProps } from "./button-with-icon.style"; /** * NOTE: Due to the way we intend to customise both components, with forwardRef behaviour @@ -22,7 +25,7 @@ const DefaultComponent = ( ...otherProps } = props; - const mainStyle: MainStyleProps = { + const mainStyle: MainStylePropsWithIcon = { $buttonIcon: icon, $buttonIconPosition: iconPosition, $buttonStyle: disabled ? "disabled" : styleType, @@ -31,7 +34,7 @@ const DefaultComponent = ( }; return ( -
{icon} {children} -
+ ); }; @@ -55,7 +58,7 @@ const SmallComponent = (props: ButtonWithIconProps, ref: ButtonWithIconRef) => { ...otherProps } = props; - const mainStyle: MainStyleProps = { + const mainStyle: MainStylePropsWithIcon = { $buttonIcon: icon, $buttonIconPosition: iconPosition, $buttonStyle: disabled ? "disabled" : styleType, @@ -64,7 +67,7 @@ const SmallComponent = (props: ButtonWithIconProps, ref: ButtonWithIconRef) => { }; return ( -
{ {...otherProps} > {icon} {children} -
+ ); }; diff --git a/src/button-with-icon/types.ts b/src/button-with-icon/types.ts index ef0ac552d..35ce57d23 100644 --- a/src/button-with-icon/types.ts +++ b/src/button-with-icon/types.ts @@ -1,25 +1,14 @@ import React from "react"; +import { ButtonProps } from "../button/types"; type StyleType = "default" | "secondary" | "light" | "link"; -export interface ButtonWithIconProps - extends React.ButtonHTMLAttributes { +export interface ButtonWithIconProps extends ButtonProps { /** The icon to be added to the button */ icon: JSX.Element; /** Specifies where the icon will be positioned */ iconPosition?: "left" | "right"; - /** The style type of the button. Values: "default" | "secondary" | "light" | "link" */ - styleType?: StyleType | undefined; - /** Indicates if a loading spinner is to be displayed */ - danger?: boolean | undefined; } export type ButtonWithIconRef = React.Ref; -export type MainButtonStyle = - | "default" - | "disabled" - | "secondary" - | "light" - | "link"; -export type MainButtonSize = "default" | "small"; export type ButtonIconPosition = "left" | "right"; diff --git a/src/button/button.style.tsx b/src/button/button.style.tsx index 397b972af..050d46431 100644 --- a/src/button/button.style.tsx +++ b/src/button/button.style.tsx @@ -35,22 +35,18 @@ export const Main = styled.button` ? DesignToken.Button.Danger.Border : Color.Primary}; - span { - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Primary - : Color.Primary}; - } + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Primary + : Color.Primary}; `; case "light": return css` background-color: ${Color.Neutral[8]}; border: 1px solid ${Color.Neutral[5]}; - span { - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Primary - : Color.Primary}; - } + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Primary + : Color.Primary}; `; case "disabled": return css` @@ -62,9 +58,7 @@ export const Main = styled.button` box-shadow: none; } - span { - color: ${Color.Neutral[3]}; - } + color: ${Color.Neutral[3]}; `; case "link": return css` @@ -82,11 +76,9 @@ export const Main = styled.button` :hover, :active, :focus { - span { - color: ${props.$buttonIsDanger - ? DesignToken.Button.Danger.Hover - : Color.Secondary}; - } + color: ${props.$buttonIsDanger + ? DesignToken.Button.Danger.Hover + : Color.Secondary}; } `; default: @@ -100,9 +92,7 @@ export const Main = styled.button` width: 100%; } - span { - color: ${Color.Neutral[8]}; - } + color: ${Color.Neutral[8]}; `; } }} @@ -115,9 +105,7 @@ export const Main = styled.button` case "small": return css` height: 2.5rem; - span { - ${TextStyleHelper.getTextStyle("H5", "semibold")} - } + ${TextStyleHelper.getTextStyle("H5", "semibold")} ${MediaQuery.MaxWidth.mobileS} { height: auto; @@ -126,9 +114,7 @@ export const Main = styled.button` default: return css` height: 3rem; - span { - ${TextStyleHelper.getTextStyle("H4", "semibold")} - } + ${TextStyleHelper.getTextStyle("H4", "semibold")} ${MediaQuery.MaxWidth.mobileS} { height: auto; From 9d38f2c0b8e89191932ce1508d33873747ead445 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 4 Apr 2024 12:00:45 +0800 Subject: [PATCH 0034/1949] [MISC][KT] Bump v2.5.0-canary.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0c690bd5b..06ee57327 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.4.0", + "version": "2.5.0-canary.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.4.0", + "version": "2.5.0-canary.1", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index fda8b7f9b..b7e0f0ea9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.4.0", + "version": "2.5.0-canary.1", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From f3b9ab430970cc447e4a6ff7696c3ecdaf2e8e90 Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Thu, 4 Apr 2024 21:02:26 +1300 Subject: [PATCH 0035/1949] [MOL-14813][KE] Added Pill link in timeline story --- stories/timeline/props-table.tsx | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/stories/timeline/props-table.tsx b/stories/timeline/props-table.tsx index 82e8017af..2a549870f 100644 --- a/stories/timeline/props-table.tsx +++ b/stories/timeline/props-table.tsx @@ -123,14 +123,32 @@ const DATA: ApiTableSectionProps[] = [ mandatory: true, description: ( <> - The type style of the {code("Pill")}.
+ The type style of the  + + {code("Pill")}.
+
), propTypes: [`"solid"`, `"outline"`], }, { name: "colorType", - description: <>The color style of the {code("Pill")}, + description: ( + <> + The color style of the  + + {code("Pill")}.
+
+ + ), propTypes: [ `"black"`, `"grey"`, From fc6d97686bdf54c02263b0b83a6d32f5014369b9 Mon Sep 17 00:00:00 2001 From: fangyinglim Date: Fri, 5 Apr 2024 15:05:34 +0800 Subject: [PATCH 0036/1949] [RBS-1245][FY] fix nested select with search component to return result if its a matching searchTerm with no subItems --- src/shared/nested-dropdown-list/nested-dropdown-list.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/shared/nested-dropdown-list/nested-dropdown-list.tsx b/src/shared/nested-dropdown-list/nested-dropdown-list.tsx index 8efad2388..a6c225dca 100644 --- a/src/shared/nested-dropdown-list/nested-dropdown-list.tsx +++ b/src/shared/nested-dropdown-list/nested-dropdown-list.tsx @@ -400,6 +400,8 @@ export const NestedDropdownList = ({ if (result && result.subItems && result.subItems.size) { list.set(key, result); } + // if a result is a matching searchTerm with no subItems + else if (result && result.isSearchTerm) list.set(key, result); } return list; From 82a2cb394072d161aa618fb21264d0dd37256673 Mon Sep 17 00:00:00 2001 From: Benjamin leong Date: Tue, 9 Apr 2024 16:36:10 +0800 Subject: [PATCH 0037/1949] [CCUBE-1199][BL] Removed unnecessary codes --- src/button-with-icon/button-with-icon.style.tsx | 1 - src/button-with-icon/button-with-icon.tsx | 5 ++--- src/button-with-icon/types.ts | 1 - 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/button-with-icon/button-with-icon.style.tsx b/src/button-with-icon/button-with-icon.style.tsx index bc4124fe6..415f964ec 100644 --- a/src/button-with-icon/button-with-icon.style.tsx +++ b/src/button-with-icon/button-with-icon.style.tsx @@ -7,7 +7,6 @@ import { ButtonIconPosition } from "./types"; // STYLE INTERFACES // ============================================================================= export interface MainStylePropsWithIcon extends MainStyleProps { - $buttonIcon: JSX.Element; $buttonIconPosition?: ButtonIconPosition | undefined; } diff --git a/src/button-with-icon/button-with-icon.tsx b/src/button-with-icon/button-with-icon.tsx index e4a88537b..3dc7c5ff1 100644 --- a/src/button-with-icon/button-with-icon.tsx +++ b/src/button-with-icon/button-with-icon.tsx @@ -26,7 +26,6 @@ const DefaultComponent = ( } = props; const mainStyle: MainStylePropsWithIcon = { - $buttonIcon: icon, $buttonIconPosition: iconPosition, $buttonStyle: disabled ? "disabled" : styleType, $buttonSizeStyle: "default", @@ -59,7 +58,6 @@ const SmallComponent = (props: ButtonWithIconProps, ref: ButtonWithIconRef) => { } = props; const mainStyle: MainStylePropsWithIcon = { - $buttonIcon: icon, $buttonIconPosition: iconPosition, $buttonStyle: disabled ? "disabled" : styleType, $buttonSizeStyle: "small", @@ -74,7 +72,8 @@ const SmallComponent = (props: ButtonWithIconProps, ref: ButtonWithIconRef) => { {...mainStyle} {...otherProps} > - {icon} {children} + {icon} + {children} ); }; diff --git a/src/button-with-icon/types.ts b/src/button-with-icon/types.ts index 35ce57d23..6885d060c 100644 --- a/src/button-with-icon/types.ts +++ b/src/button-with-icon/types.ts @@ -1,7 +1,6 @@ import React from "react"; import { ButtonProps } from "../button/types"; -type StyleType = "default" | "secondary" | "light" | "link"; export interface ButtonWithIconProps extends ButtonProps { /** The icon to be added to the button */ icon: JSX.Element; From 24bcc921b8bf1279139a0b57b44f4cbc4e795fbb Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 11 Apr 2024 11:06:06 +0800 Subject: [PATCH 0038/1949] [CCUBE-1241][RL] Support calendar overflow in parent bounds --- src/date-input/date-input.tsx | 151 ++++++++---- src/date-range-input/date-range-input.tsx | 214 ++++++++++++------ .../animated-internal-calendar.style.tsx | 5 - 3 files changed, 247 insertions(+), 123 deletions(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 552e72657..2b5b0a4c6 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -1,3 +1,13 @@ +import { + FloatingPortal, + autoUpdate, + flip, + limitShift, + offset, + shift, + size, + useFloating, +} from "@floating-ui/react"; import { useEffect, useRef, useState } from "react"; import { CalendarAction, @@ -45,6 +55,27 @@ export const DateInput = ({ const nodeRef = useRef(null); const calendarRef = useRef(); const inputRef = useRef(); + + const { refs, floatingStyles, elements, update } = useFloating({ + open: calendarOpen, + placement: "bottom-start", + middleware: [ + offset(16), + flip(), + shift({ + limiter: limitShift(), + }), + size({ + // match calendar width to input + apply({ rects, elements }) { + Object.assign(elements.floating.style, { + width: `${rects.reference.width}px`, + }); + }, + }), + ], + }); + // ============================================================================= // EFFECTS // ============================================================================= @@ -54,6 +85,19 @@ export const DateInput = ({ setSelectedDate(newValue); }, [value]); + // ensure calendar remains anchored to its reference element when scrolling + // ref: https://floating-ui.com/docs/autoUpdate#usage + useEffect(() => { + if (calendarOpen && elements.reference && elements.floating) { + const cleanup = autoUpdate( + elements.reference, + elements.floating, + update + ); + return cleanup; + } + }, [calendarOpen, elements, update]); + // ============================================================================= // EVENT HANDLERS // ============================================================================= @@ -142,50 +186,71 @@ export const DateInput = ({ }; // ============================================================================= - // RENDER FUNCTION + // RENDER FUNCTIONS // ============================================================================= + const renderInput = () => { + return ( + { + nodeRef.current = node; + refs.setReference(node); + }} + $disabled={disabled} + $readOnly={readOnly} + $error={error} + id={id} + data-testid={otherProps["data-testid"]} + tabIndex={-1} + onBlur={handleContainerBlur} + onKeyDown={handleContainerKeyDown} + {...otherProps} + > + + + ); + }; + + const renderCalendar = () => { + return ( + +
+ +
+
+ ); + }; + return ( - - - - + <> + {renderInput()} + {renderCalendar()} + ); }; diff --git a/src/date-range-input/date-range-input.tsx b/src/date-range-input/date-range-input.tsx index 6b1563737..33d94f192 100644 --- a/src/date-range-input/date-range-input.tsx +++ b/src/date-range-input/date-range-input.tsx @@ -1,3 +1,13 @@ +import { + FloatingPortal, + autoUpdate, + flip, + limitShift, + offset, + shift, + size, + useFloating, +} from "@floating-ui/react"; import dayjs from "dayjs"; import { useEffect, useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; @@ -180,6 +190,26 @@ export const DateRangeInput = ({ // show button if it is mobile view const withButton = _withButton || isMobile; + const { refs, floatingStyles, elements, update } = useFloating({ + open: calendarOpen, + placement: "bottom-start", + middleware: [ + offset(16), + flip(), + shift({ + limiter: limitShift(), + }), + size({ + // match calendar width to input + apply({ rects, elements }) { + Object.assign(elements.floating.style, { + width: `${rects.reference.width}px`, + }); + }, + }), + ], + }); + // ============================================================================= // EFFECTS // ============================================================================= @@ -198,6 +228,19 @@ export const DateRangeInput = ({ } }, [currentFocus]); + // ensure calendar remains anchored to its reference element when scrolling + // ref: https://floating-ui.com/docs/autoUpdate#usage + useEffect(() => { + if (calendarOpen && elements.reference && elements.floating) { + const cleanup = autoUpdate( + elements.reference, + elements.floating, + update + ); + return cleanup; + } + }, [calendarOpen, elements, update]); + // ============================================================================= // EVENT HANDLERS // ============================================================================= @@ -519,84 +562,105 @@ export const DateRangeInput = ({ }; // ============================================================================= - // RENDER FUNCTION + // RENDER FUNCTIONS // ============================================================================= - return ( - - { + return ( + { + nodeRef.current = node; + refs.setReference(node); + }} + $disabled={disabled} + $readOnly={readOnly} + $error={error} + $wrap={shouldWrap} + id={id} + data-testid={otherProps["data-testid"]} + onBlur={handleNodeBlur} + onKeyDown={handleNodeKeyDown} + {...otherProps} > - - + + + + + + + + + ); + }; + + const renderCalendar = () => { + return ( + +
+ - - - - - - - +
+
+ ); + }; + + return ( + <> + {renderInput()} + {renderCalendar()} + ); }; diff --git a/src/shared/internal-calendar/animated-internal-calendar.style.tsx b/src/shared/internal-calendar/animated-internal-calendar.style.tsx index 10041b55f..569d90c45 100644 --- a/src/shared/internal-calendar/animated-internal-calendar.style.tsx +++ b/src/shared/internal-calendar/animated-internal-calendar.style.tsx @@ -3,13 +3,8 @@ import styled from "styled-components"; import { MediaQuery } from "../../media"; export const AnimatedDiv = styled(animated.div)` - position: absolute; - top: calc(100% + 0.5rem); - left: -1px; - width: calc(100% + 2px); max-width: 41rem; overflow: hidden; - z-index: 1; min-width: 21rem; ${MediaQuery.MaxWidth.mobileL} { From 9ae17f978d3143a4ea20c76b33226dd8ed17c2b0 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 11 Apr 2024 12:09:44 +0800 Subject: [PATCH 0039/1949] [CCUBE-1241][RL] Handle blur event in calendar --- src/date-input/date-input.tsx | 7 ++++++- src/date-range-input/date-range-input.tsx | 7 ++++++- src/shared/internal-calendar/internal-calendar.tsx | 4 +++- src/shared/internal-calendar/types.ts | 2 ++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 2b5b0a4c6..1304a59b8 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -102,7 +102,12 @@ export const DateInput = ({ // EVENT HANDLERS // ============================================================================= const handleContainerBlur = (event: React.FocusEvent) => { - if (nodeRef && !nodeRef.current.contains(event.relatedTarget)) { + if ( + !nodeRef.current?.contains(event.relatedTarget) && + !calendarRef.current?.rootElementRef.current?.contains( + event.relatedTarget + ) + ) { inputRef.current.resetInput(); setSelectedDate(initialDate); setCalendarOpen(false); diff --git a/src/date-range-input/date-range-input.tsx b/src/date-range-input/date-range-input.tsx index 33d94f192..4437e1f83 100644 --- a/src/date-range-input/date-range-input.tsx +++ b/src/date-range-input/date-range-input.tsx @@ -245,7 +245,12 @@ export const DateRangeInput = ({ // EVENT HANDLERS // ============================================================================= const handleNodeBlur = (event: React.FocusEvent) => { - if (!nodeRef.current.contains(event.relatedTarget)) { + if ( + !nodeRef.current?.contains(event.relatedTarget) && + !calendarRef.current?.rootElementRef.current?.contains( + event.relatedTarget + ) + ) { actions.blur(); setIsStartDisabled(false); diff --git a/src/shared/internal-calendar/internal-calendar.tsx b/src/shared/internal-calendar/internal-calendar.tsx index 8c5584e0b..02e61fb6e 100644 --- a/src/shared/internal-calendar/internal-calendar.tsx +++ b/src/shared/internal-calendar/internal-calendar.tsx @@ -38,6 +38,7 @@ export const Component = ( // ============================================================================= const calendarManagerRef = useRef(); const previousCalendarDate = useRef(undefined); + const containerRef = useRef(undefined); // ============================================================================= // HOOKS @@ -50,6 +51,7 @@ export const Component = ( setCalendarDate(value?: string) { calendarManagerRef.current.setCalendarDate(value); }, + rootElementRef: containerRef, }; }); @@ -179,7 +181,7 @@ export const Component = ( }; return ( - + void; setCalendarDate: (value?: string) => void; + rootElementRef: RefObject; } // ============================================================================= From 7b951eba916ee187c129db90f70b6900d0f523b3 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 11 Apr 2024 12:11:07 +0800 Subject: [PATCH 0040/1949] [CCUBE-1241][RL] Replace with fade animation --- .../animated-internal-calendar.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/shared/internal-calendar/animated-internal-calendar.tsx b/src/shared/internal-calendar/animated-internal-calendar.tsx index 8d1f3fd45..a065f9adc 100644 --- a/src/shared/internal-calendar/animated-internal-calendar.tsx +++ b/src/shared/internal-calendar/animated-internal-calendar.tsx @@ -13,7 +13,7 @@ const AnimatedComponent = ( const calendarRef = useRef(); const resizeDetector = useResizeDetector(); const styles = useSpring({ - height: isOpen ? resizeDetector.height : 0, + opacity: isOpen ? 1 : 0, config: { duration: 300 }, }); @@ -26,8 +26,15 @@ const AnimatedComponent = ( useImperativeHandle(ref, () => calendarRef.current); return ( - -
+ + v === 0 ? "none" : undefined + ), + }} + > +
From d162c5626d4abbc22d8b51f9622aa7df67b452f2 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 11 Apr 2024 15:58:41 +0800 Subject: [PATCH 0041/1949] [CCUBE-1199][KT] Add missing export --- src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.ts b/src/index.ts index c8c790c53..164fbf996 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ export * from "./animations"; export * from "./box-container"; export * from "./breadcrumb"; export * from "./button"; +export * from "./button-with-icon"; export * from "./calendar"; export * from "./card"; export * from "./checkbox"; From 404f3f8abfe9c375a9df87a9e2023796760f286a Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 11 Apr 2024 15:59:14 +0800 Subject: [PATCH 0042/1949] [CCUBE-1199][KT] Update typings --- src/button-with-icon/types.ts | 7 +++---- src/button/types.ts | 12 ++++++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/button-with-icon/types.ts b/src/button-with-icon/types.ts index 6885d060c..ef2ad51fc 100644 --- a/src/button-with-icon/types.ts +++ b/src/button-with-icon/types.ts @@ -1,13 +1,12 @@ -import React from "react"; -import { ButtonProps } from "../button/types"; +import { ButtonBaseProps, ButtonRef } from "../button/types"; -export interface ButtonWithIconProps extends ButtonProps { +export interface ButtonWithIconProps extends ButtonBaseProps { /** The icon to be added to the button */ icon: JSX.Element; /** Specifies where the icon will be positioned */ iconPosition?: "left" | "right"; } -export type ButtonWithIconRef = React.Ref; +export type ButtonWithIconRef = ButtonRef; export type ButtonIconPosition = "left" | "right"; diff --git a/src/button/types.ts b/src/button/types.ts index ee56114f3..2bf067295 100644 --- a/src/button/types.ts +++ b/src/button/types.ts @@ -1,17 +1,21 @@ import React from "react"; -import { ComponentLoadingSpinnerProps } from "src/shared/component-loading-spinner/component-loading-spinner"; +import { ComponentLoadingSpinnerProps } from "../shared/component-loading-spinner/component-loading-spinner"; type StyleType = "default" | "secondary" | "light" | "link"; -export interface ButtonProps + +export interface ButtonBaseProps extends React.ButtonHTMLAttributes { /** The style type of the button. Values: "default" | "secondary" | "light" | "link" */ styleType?: StyleType | undefined; - /** Indicates if a loading spinner is to be displayed */ - loading?: boolean | undefined; /** If specified, the component will have a red color scheme being applied */ danger?: boolean | undefined; } +export interface ButtonProps extends ButtonBaseProps { + /** Indicates if a loading spinner is to be displayed */ + loading?: boolean | undefined; +} + export type ButtonRef = React.Ref; export type MainButtonStyle = From c0cbdbfc0f2904d22d603c425e923d2cc349a2b8 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 11 Apr 2024 15:59:51 +0800 Subject: [PATCH 0043/1949] [CCUBE-1199][KT] Update descriptions in the story --- stories/button-with-icon/button-with-icon.mdx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/stories/button-with-icon/button-with-icon.mdx b/stories/button-with-icon/button-with-icon.mdx index 3fdd2b1e4..255a48e2e 100644 --- a/stories/button-with-icon/button-with-icon.mdx +++ b/stories/button-with-icon/button-with-icon.mdx @@ -5,11 +5,11 @@ import { PropsTable } from "./props-table"; -Button With Icon +ButtonWithIcon Overview -The primary call to action component. +The primary call to action component with an icon. ```tsx import { ButtonWithIcon } from "@lifesg/react-design-system/button-with-icon"; @@ -19,7 +19,8 @@ The `ButtonWithIcon` component comes in 2 sizes, a default and small size. -You can also specify the icon to be on the right side. +By default, the icon will be rendered on the left of the component. +You can also indicate to render on the right using the `iconPosition` prop. From af0e5d471def09307d46aeeff83ef980bf305ab7 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 11 Apr 2024 16:01:48 +0800 Subject: [PATCH 0044/1949] [CCUBE-1199][KT] Update prop descriptions --- src/button-with-icon/types.ts | 2 +- stories/button-with-icon/props-table.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/button-with-icon/types.ts b/src/button-with-icon/types.ts index ef2ad51fc..72e03fb54 100644 --- a/src/button-with-icon/types.ts +++ b/src/button-with-icon/types.ts @@ -1,7 +1,7 @@ import { ButtonBaseProps, ButtonRef } from "../button/types"; export interface ButtonWithIconProps extends ButtonBaseProps { - /** The icon to be added to the button */ + /** The icon to be rendered in the button */ icon: JSX.Element; /** Specifies where the icon will be positioned */ iconPosition?: "left" | "right"; diff --git a/stories/button-with-icon/props-table.tsx b/stories/button-with-icon/props-table.tsx index b950f4b1e..a3b5aef49 100644 --- a/stories/button-with-icon/props-table.tsx +++ b/stories/button-with-icon/props-table.tsx @@ -21,13 +21,13 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "icon", - description: "specifies the icon to be in the button ", + description: <>The icon component to be rendered, propTypes: ["JSX.Element"], }, { name: "iconPosition", description: - "specifies whether the icon is displayed on the left or right of the label ", + "Specifies whether the icon is rendered on the left or right of the label", propTypes: [`"left"`, `"right"`], defaultValue: `"left"`, }, @@ -36,7 +36,7 @@ const DATA: ApiTableSectionProps[] = [ mandatory: true, description: ( <> - The style of the Button + The style of the ButtonWithIcon ), propTypes: [`"default"`, `"secondary"`, `"light"`, `"link"`], From b9d2050706bc28b2698733a2e7533675c7dd17ce Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 11 Apr 2024 16:02:24 +0800 Subject: [PATCH 0045/1949] [CCUBE-1199][KT] Minor story reorganisation --- .storybook/preview.js | 1 + stories/button-with-icon/button-with-icon.mdx | 2 +- stories/button-with-icon/button-with-icon.stories.tsx | 4 ++-- stories/button/button.stories.tsx | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.storybook/preview.js b/.storybook/preview.js index 5f7c2cfea..b06f3f496 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -29,6 +29,7 @@ const preview = { "Getting started", ["Installation", "Themes", "Media Query", "Layout"], "General", + ["Animations", "Button", ["Base", "With Icon"], "*"], "Form", "Data Input", "Modules", diff --git a/stories/button-with-icon/button-with-icon.mdx b/stories/button-with-icon/button-with-icon.mdx index 255a48e2e..ae461ff1f 100644 --- a/stories/button-with-icon/button-with-icon.mdx +++ b/stories/button-with-icon/button-with-icon.mdx @@ -22,7 +22,7 @@ The `ButtonWithIcon` component comes in 2 sizes, a default and small size. By default, the icon will be rendered on the left of the component. You can also indicate to render on the right using the `iconPosition` prop. - + Danger diff --git a/stories/button-with-icon/button-with-icon.stories.tsx b/stories/button-with-icon/button-with-icon.stories.tsx index 2df219946..2552187d9 100644 --- a/stories/button-with-icon/button-with-icon.stories.tsx +++ b/stories/button-with-icon/button-with-icon.stories.tsx @@ -6,7 +6,7 @@ import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; type Component = typeof ButtonWithIcon.Default; const meta: Meta = { - title: "General/ButtonWithIcon", + title: "General/Button/With Icon", component: ButtonWithIcon.Default, }; @@ -73,7 +73,7 @@ export const Default: StoryObj = { }, }; -export const IconPositionRight: StoryObj = { +export const RightPositioned: StoryObj = { render: () => { return ( <> diff --git a/stories/button/button.stories.tsx b/stories/button/button.stories.tsx index 5f1e656a6..e65c9c9f7 100644 --- a/stories/button/button.stories.tsx +++ b/stories/button/button.stories.tsx @@ -5,7 +5,7 @@ import { Container } from "./doc-elements"; type Component = typeof Button.Default; const meta: Meta = { - title: "General/Button", + title: "General/Button/Base", component: Button.Default, }; From 5916aeb3f7aefc7d15ac432a5b5f7ae848fab6ad Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 11 Apr 2024 16:27:53 +0800 Subject: [PATCH 0046/1949] [CCUBE-1241][RL] Set z-index and support override --- src/date-input/date-input.tsx | 6 +++++- src/date-input/types.ts | 2 ++ src/date-range-input/date-range-input.tsx | 6 +++++- src/date-range-input/types.ts | 2 ++ stories/form/form-date-input/props-table.tsx | 7 +++++++ stories/form/form-date-range-input/props-table.tsx | 7 +++++++ 6 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 1304a59b8..5e3575ab8 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -38,6 +38,7 @@ export const DateInput = ({ readOnly, id, allowDisabledSelection, + zIndex = 50, ...otherProps }: DateInputProps) => { // ============================================================================= @@ -229,7 +230,10 @@ export const DateInput = ({ const renderCalendar = () => { return ( -
+
{ // ============================================================================= @@ -635,7 +636,10 @@ export const DateRangeInput = ({ const renderCalendar = () => { return ( -
+
Date: Thu, 11 Apr 2024 21:02:09 +1200 Subject: [PATCH 0047/1949] [MOL-14813][KE] Link to Pill instead of duplicating --- stories/timeline/props-table.tsx | 76 ++++---------------------------- 1 file changed, 9 insertions(+), 67 deletions(-) diff --git a/stories/timeline/props-table.tsx b/stories/timeline/props-table.tsx index 2a549870f..08ca95e20 100644 --- a/stories/timeline/props-table.tsx +++ b/stories/timeline/props-table.tsx @@ -77,7 +77,15 @@ const DATA: ApiTableSectionProps[] = [   regardless how many statuses are specified ), - propTypes: ["PillProps[]"], + propTypes: ( + + PillProps[] + + ), }, { name: "variant", @@ -100,72 +108,6 @@ const DATA: ApiTableSectionProps[] = [ }, ], }, - { - name: "PillProps", - attributes: [ - { - name: "", - description: ( - <> - This component also inherits props from  - - HTMLDivAttributes - - - ), - }, - { - name: "type", - mandatory: true, - description: ( - <> - The type style of the  - - {code("Pill")}.
-
- - ), - propTypes: [`"solid"`, `"outline"`], - }, - { - name: "colorType", - description: ( - <> - The color style of the  - - {code("Pill")}.
-
- - ), - propTypes: [ - `"black"`, - `"grey"`, - `"green"`, - `"yellow"`, - `"red"`, - `"blue"`, - ], - defaultValue: `"black"`, - }, - { - name: "icon", - description: "A component to be displayed as the icon", - propTypes: ["JSX.Element"], - }, - ], - }, ]; export const PropsTable = () => ; From 5304b78894c2c46ec76fb14e2d3464d234b815a4 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 11 Apr 2024 19:16:11 +0800 Subject: [PATCH 0048/1949] [CCUBE-1241][RL] Create wrapper to manage focus between element and dropdown --- src/date-input/date-input.tsx | 137 +++++----------- src/date-range-input/date-range-input.tsx | 149 ++++++------------ .../element-with-dropdown.tsx | 132 ++++++++++++++++ src/shared/dropdown-wrapper/index.ts | 1 + .../animated-internal-calendar.tsx | 44 ------ ....style.tsx => calendar-dropdown.style.tsx} | 4 +- .../internal-calendar/calendar-dropdown.tsx | 21 +++ .../internal-calendar/calendar-manager.tsx | 1 - src/shared/internal-calendar/index.tsx | 1 + .../standalone-date-input.tsx | 2 +- src/util/use-event-listener.tsx | 9 +- 11 files changed, 250 insertions(+), 251 deletions(-) create mode 100644 src/shared/dropdown-wrapper/element-with-dropdown.tsx delete mode 100644 src/shared/internal-calendar/animated-internal-calendar.tsx rename src/shared/internal-calendar/{animated-internal-calendar.style.tsx => calendar-dropdown.style.tsx} (64%) create mode 100644 src/shared/internal-calendar/calendar-dropdown.tsx diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 5e3575ab8..67111efbf 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -1,19 +1,10 @@ -import { - FloatingPortal, - autoUpdate, - flip, - limitShift, - offset, - shift, - size, - useFloating, -} from "@floating-ui/react"; import { useEffect, useRef, useState } from "react"; +import { ElementWithDropdown } from "../shared/dropdown-wrapper"; import { CalendarAction, + CalendarDropdown, InternalCalendarRef, } from "../shared/internal-calendar"; -import { AnimatedInternalCalendar } from "../shared/internal-calendar/animated-internal-calendar"; import { StandaloneDateInput, StandaloneDateInputRef, @@ -57,26 +48,6 @@ export const DateInput = ({ const calendarRef = useRef(); const inputRef = useRef(); - const { refs, floatingStyles, elements, update } = useFloating({ - open: calendarOpen, - placement: "bottom-start", - middleware: [ - offset(16), - flip(), - shift({ - limiter: limitShift(), - }), - size({ - // match calendar width to input - apply({ rects, elements }) { - Object.assign(elements.floating.style, { - width: `${rects.reference.width}px`, - }); - }, - }), - ], - }); - // ============================================================================= // EFFECTS // ============================================================================= @@ -86,43 +57,20 @@ export const DateInput = ({ setSelectedDate(newValue); }, [value]); - // ensure calendar remains anchored to its reference element when scrolling - // ref: https://floating-ui.com/docs/autoUpdate#usage - useEffect(() => { - if (calendarOpen && elements.reference && elements.floating) { - const cleanup = autoUpdate( - elements.reference, - elements.floating, - update - ); - return cleanup; - } - }, [calendarOpen, elements, update]); - // ============================================================================= // EVENT HANDLERS // ============================================================================= - const handleContainerBlur = (event: React.FocusEvent) => { - if ( - !nodeRef.current?.contains(event.relatedTarget) && - !calendarRef.current?.rootElementRef.current?.contains( - event.relatedTarget - ) - ) { - inputRef.current.resetInput(); - setSelectedDate(initialDate); - setCalendarOpen(false); - performOnBlurHandler(); - } + const handleClose = () => { + setCalendarOpen(false); + performOnBlurHandler(); }; - function handleContainerKeyDown(event: React.KeyboardEvent) { - if (event.code === "Escape") { - inputRef.current.resetInput(); - setSelectedDate(initialDate); - setCalendarOpen(false); - } - } + const handleDismiss = () => { + inputRef.current.resetInput(); + setSelectedDate(initialDate); + setCalendarOpen(false); + performOnBlurHandler(); + }; const handleChange = (val: string) => { if ( @@ -143,6 +91,7 @@ export const DateInput = ({ setInitialDate(val); if (val) { setCalendarOpen(false); + performOnBlurHandler(); } } }; @@ -174,6 +123,7 @@ export const DateInput = ({ } setCalendarOpen(false); + performOnBlurHandler(); }; // ============================================================================= @@ -197,18 +147,12 @@ export const DateInput = ({ const renderInput = () => { return ( { - nodeRef.current = node; - refs.setReference(node); - }} + ref={nodeRef} $disabled={disabled} $readOnly={readOnly} $error={error} id={id} data-testid={otherProps["data-testid"]} - tabIndex={-1} - onBlur={handleContainerBlur} - onKeyDown={handleContainerKeyDown} {...otherProps} > { return ( - -
- -
-
+ ); }; return ( - <> - {renderInput()} - {renderCalendar()} - + ); }; diff --git a/src/date-range-input/date-range-input.tsx b/src/date-range-input/date-range-input.tsx index 1e2b9dcfa..e26941e2b 100644 --- a/src/date-range-input/date-range-input.tsx +++ b/src/date-range-input/date-range-input.tsx @@ -1,23 +1,14 @@ -import { - FloatingPortal, - autoUpdate, - flip, - limitShift, - offset, - shift, - size, - useFloating, -} from "@floating-ui/react"; import dayjs from "dayjs"; import { useEffect, useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; import { MediaWidths } from "../media"; +import { ElementWithDropdown } from "../shared/dropdown-wrapper"; import { CalendarAction, + CalendarDropdown, FocusType, InternalCalendarRef, } from "../shared/internal-calendar"; -import { AnimatedInternalCalendar } from "../shared/internal-calendar/animated-internal-calendar"; import { RangeInputInnerContainer } from "../shared/range-input-inner-container"; import { StandaloneDateInput, @@ -191,26 +182,6 @@ export const DateRangeInput = ({ // show button if it is mobile view const withButton = _withButton || isMobile; - const { refs, floatingStyles, elements, update } = useFloating({ - open: calendarOpen, - placement: "bottom-start", - middleware: [ - offset(16), - flip(), - shift({ - limiter: limitShift(), - }), - size({ - // match calendar width to input - apply({ rects, elements }) { - Object.assign(elements.floating.style, { - width: `${rects.reference.width}px`, - }); - }, - }), - ], - }); - // ============================================================================= // EFFECTS // ============================================================================= @@ -229,44 +200,10 @@ export const DateRangeInput = ({ } }, [currentFocus]); - // ensure calendar remains anchored to its reference element when scrolling - // ref: https://floating-ui.com/docs/autoUpdate#usage - useEffect(() => { - if (calendarOpen && elements.reference && elements.floating) { - const cleanup = autoUpdate( - elements.reference, - elements.floating, - update - ); - return cleanup; - } - }, [calendarOpen, elements, update]); - // ============================================================================= // EVENT HANDLERS // ============================================================================= - const handleNodeBlur = (event: React.FocusEvent) => { - if ( - !nodeRef.current?.contains(event.relatedTarget) && - !calendarRef.current?.rootElementRef.current?.contains( - event.relatedTarget - ) - ) { - actions.blur(); - - setIsStartDisabled(false); - setIsEndDisabled(false); - startInputRef.current.resetPlaceholder(); - endInputRef.current.resetPlaceholder(); - - onBlur?.(); - } - }; - const handleNodeKeyDown = (event: React.KeyboardEvent) => { - if (event.code === "Escape") { - actions.blur(); - } if (event.code === "Enter" && !withButton) { if (selectedStart && selectedEnd) { actions.done({ @@ -280,6 +217,21 @@ export const DateRangeInput = ({ } }; + const handleClose = () => { + actions.blur(); + + setIsStartDisabled(false); + setIsEndDisabled(false); + startInputRef.current.resetPlaceholder(); + endInputRef.current.resetPlaceholder(); + + onBlur?.(); + }; + + const handleDismiss = () => { + actions.blur(); + }; + const handleStartDateChange = (val: string) => { if (isDateUnselectable(val)) { // date is invalid, remain on this input @@ -573,17 +525,13 @@ export const DateRangeInput = ({ const renderInput = () => { return ( { - nodeRef.current = node; - refs.setReference(node); - }} + ref={nodeRef} $disabled={disabled} $readOnly={readOnly} $error={error} $wrap={shouldWrap} id={id} data-testid={otherProps["data-testid"]} - onBlur={handleNodeBlur} onKeyDown={handleNodeKeyDown} {...otherProps} > @@ -635,41 +583,38 @@ export const DateRangeInput = ({ const renderCalendar = () => { return ( - -
- -
-
+ ); }; return ( - <> - {renderInput()} - {renderCalendar()} - + ); }; diff --git a/src/shared/dropdown-wrapper/element-with-dropdown.tsx b/src/shared/dropdown-wrapper/element-with-dropdown.tsx new file mode 100644 index 000000000..1c651c49d --- /dev/null +++ b/src/shared/dropdown-wrapper/element-with-dropdown.tsx @@ -0,0 +1,132 @@ +import { + FloatingFocusManager, + FloatingPortal, + autoUpdate, + flip, + limitShift, + offset, + shift, + size, + useClick, + useDismiss, + useFloating, + useFocus, + useInteractions, + useTransitionStyles, +} from "@floating-ui/react"; +import { useRef } from "react"; + +interface ElementWithDropdownProps { + enabled: boolean; + isOpen: boolean; + onOpen?: () => void | undefined; + onClose?: () => void | undefined; + onDismiss?: () => void | undefined; + renderElement: () => React.ReactNode; + renderDropdown: () => React.ReactNode; + zIndex?: number | undefined; +} + +export const ElementWithDropdown = ({ + enabled, + isOpen, + onOpen, + onClose, + onDismiss, + renderElement, + renderDropdown, + zIndex = 50, +}: ElementWithDropdownProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const elementRef = useRef(null); + const floatingRef = useRef(null); + const { refs, floatingStyles, context } = useFloating({ + open: isOpen, + onOpenChange: (open, event, reason) => { + if (reason === "escape-key") { + onDismiss?.(); + } else { + open ? onOpen?.() : onClose?.(); + } + }, + whileElementsMounted: autoUpdate, + placement: "bottom-start", + middleware: [ + offset(16), + flip(), + shift({ + limiter: limitShift(), + }), + size({ + // match dropdown width to input + apply({ rects, elements }) { + Object.assign(elements.floating.style, { + width: `${rects.reference.width}px`, + }); + }, + }), + ], + }); + const { isMounted, styles } = useTransitionStyles(context, { + initial: { opacity: 0 }, + open: { opacity: 1 }, + duration: 300, + }); + + const click = useClick(context, { enabled }); + const focus = useFocus(context, { enabled }); + const dismiss = useDismiss(context, { enabled }); + + const { getReferenceProps, getFloatingProps } = useInteractions([ + click, + focus, + dismiss, + ]); + + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= + return ( + <> +
{ + elementRef.current = node; + refs.setReference(node); + }} + {...getReferenceProps()} + > + {renderElement()} +
+ {isMounted && ( + + +
+
+ {renderDropdown()} +
+
+
+
+ )} + + ); +}; diff --git a/src/shared/dropdown-wrapper/index.ts b/src/shared/dropdown-wrapper/index.ts index ce4dff7fa..124da2e09 100644 --- a/src/shared/dropdown-wrapper/index.ts +++ b/src/shared/dropdown-wrapper/index.ts @@ -1,2 +1,3 @@ export * from "./dropdown-wrapper"; +export * from "./element-with-dropdown"; export * from "./types"; diff --git a/src/shared/internal-calendar/animated-internal-calendar.tsx b/src/shared/internal-calendar/animated-internal-calendar.tsx deleted file mode 100644 index a065f9adc..000000000 --- a/src/shared/internal-calendar/animated-internal-calendar.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React, { useEffect, useImperativeHandle, useRef } from "react"; -import { useResizeDetector } from "react-resize-detector"; -import { useSpring } from "react-spring"; -import { AnimatedDiv } from "./animated-internal-calendar.style"; -import { InternalCalendar } from "./internal-calendar"; -import { AnimatedInternalCalendarProps, InternalCalendarRef } from "./types"; - -const AnimatedComponent = ( - props: AnimatedInternalCalendarProps, - ref: React.ForwardedRef -) => { - const { isOpen, ...remainingProps } = props; - const calendarRef = useRef(); - const resizeDetector = useResizeDetector(); - const styles = useSpring({ - opacity: isOpen ? 1 : 0, - config: { duration: 300 }, - }); - - useEffect(() => { - if (isOpen) { - calendarRef.current.reset(); - } - }, [isOpen]); - - useImperativeHandle(ref, () => calendarRef.current); - - return ( - - v === 0 ? "none" : undefined - ), - }} - > -
- -
-
- ); -}; - -export const AnimatedInternalCalendar = React.forwardRef(AnimatedComponent); diff --git a/src/shared/internal-calendar/animated-internal-calendar.style.tsx b/src/shared/internal-calendar/calendar-dropdown.style.tsx similarity index 64% rename from src/shared/internal-calendar/animated-internal-calendar.style.tsx rename to src/shared/internal-calendar/calendar-dropdown.style.tsx index 569d90c45..77b0e5e34 100644 --- a/src/shared/internal-calendar/animated-internal-calendar.style.tsx +++ b/src/shared/internal-calendar/calendar-dropdown.style.tsx @@ -1,10 +1,8 @@ -import { animated } from "react-spring"; import styled from "styled-components"; import { MediaQuery } from "../../media"; -export const AnimatedDiv = styled(animated.div)` +export const CalendarWrapper = styled.div` max-width: 41rem; - overflow: hidden; min-width: 21rem; ${MediaQuery.MaxWidth.mobileL} { diff --git a/src/shared/internal-calendar/calendar-dropdown.tsx b/src/shared/internal-calendar/calendar-dropdown.tsx new file mode 100644 index 000000000..dd242ceb3 --- /dev/null +++ b/src/shared/internal-calendar/calendar-dropdown.tsx @@ -0,0 +1,21 @@ +import React, { useImperativeHandle, useRef } from "react"; +import { CalendarWrapper } from "./calendar-dropdown.style"; +import { InternalCalendar } from "./internal-calendar"; +import { InternalCalendarProps, InternalCalendarRef } from "./types"; + +const Component = ( + props: InternalCalendarProps, + ref: React.ForwardedRef +) => { + const calendarRef = useRef(); + + useImperativeHandle(ref, () => calendarRef.current); + + return ( + + + + ); +}; + +export const CalendarDropdown = React.forwardRef(Component); diff --git a/src/shared/internal-calendar/calendar-manager.tsx b/src/shared/internal-calendar/calendar-manager.tsx index 6671d5957..e5baf88e2 100644 --- a/src/shared/internal-calendar/calendar-manager.tsx +++ b/src/shared/internal-calendar/calendar-manager.tsx @@ -449,7 +449,6 @@ const Component = ( return ( ; + ref: React.RefObject; resetPlaceholder: () => void; resetInput: () => void; } diff --git a/src/util/use-event-listener.tsx b/src/util/use-event-listener.tsx index 4ac554b0f..c3ddfef6c 100644 --- a/src/util/use-event-listener.tsx +++ b/src/util/use-event-listener.tsx @@ -7,7 +7,8 @@ export const useEventListener = ( eventName: K, handler: (event: WindowEventMap[K]) => void, target: Target = "window", - options?: AddEventListenerOptions | boolean + options?: AddEventListenerOptions | boolean, + enabled = true ) => { // Create a ref that stores handler const savedHandler = useRef<(event: WindowEventMap[K]) => void>(); @@ -19,6 +20,10 @@ export const useEventListener = ( useEffect( () => { + if (!enabled) { + return; + } + let element: Element; switch (target) { case "window": @@ -45,6 +50,6 @@ export const useEventListener = ( element.removeEventListener(eventName, eventListener, options); }; }, - [eventName, target] // Re-run if eventName or element changes + [eventName, target, enabled] // Re-run if eventName or element changes ); }; From f09c09274b1ce20f09fd2404808c34e2b0c4b8df Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 12 Apr 2024 09:57:09 +0800 Subject: [PATCH 0049/1949] [CCUBE-1241][RL] Reduce focus and blur callback frequency --- src/shared/dropdown-wrapper/element-with-dropdown.tsx | 6 ++++-- .../standalone-date-input/standalone-date-input.tsx | 11 ++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/shared/dropdown-wrapper/element-with-dropdown.tsx b/src/shared/dropdown-wrapper/element-with-dropdown.tsx index 1c651c49d..90fc8d846 100644 --- a/src/shared/dropdown-wrapper/element-with-dropdown.tsx +++ b/src/shared/dropdown-wrapper/element-with-dropdown.tsx @@ -47,8 +47,10 @@ export const ElementWithDropdown = ({ onOpenChange: (open, event, reason) => { if (reason === "escape-key") { onDismiss?.(); - } else { - open ? onOpen?.() : onClose?.(); + } else if (open && !isOpen) { + onOpen?.(); + } else if (!open && isOpen) { + onClose?.(); } }, whileElementsMounted: autoUpdate, diff --git a/src/shared/standalone-date-input/standalone-date-input.tsx b/src/shared/standalone-date-input/standalone-date-input.tsx index 912e80b97..b341d3f71 100644 --- a/src/shared/standalone-date-input/standalone-date-input.tsx +++ b/src/shared/standalone-date-input/standalone-date-input.tsx @@ -150,6 +150,11 @@ export const Component = ( } }; + const handlePlaceholderClick = (event: React.MouseEvent) => { + event.preventDefault(); + dayInputRef.current?.focus(); + }; + const handleInputFocus = (event: React.FocusEvent) => { event.target.select(); const targetName = event.target.name as FieldType; @@ -299,7 +304,11 @@ export const Component = ( } return ( - + {placeholder} ); From a71a5fb42d8fe1fa4217cf2f3955b94fb8c01287 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Fri, 12 Apr 2024 10:23:16 +0800 Subject: [PATCH 0050/1949] [MISC][KT] Bump v2.5.0-canary.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06ee57327..39b93f6dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.1", + "version": "2.5.0-canary.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.1", + "version": "2.5.0-canary.2", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index b7e0f0ea9..07f7cbb1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.1", + "version": "2.5.0-canary.2", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 2ca53decc944f25fd30300e3b4570c7cb34aeda5 Mon Sep 17 00:00:00 2001 From: Ashley Teo Date: Fri, 12 Apr 2024 11:37:55 +0800 Subject: [PATCH 0051/1949] [MOL-15413][AT] update mylegacy color palette for validation text --- src/spec/color-spec/mylegacy-color-set.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spec/color-spec/mylegacy-color-set.ts b/src/spec/color-spec/mylegacy-color-set.ts index 97724c9a6..850a5b7dd 100644 --- a/src/spec/color-spec/mylegacy-color-set.ts +++ b/src/spec/color-spec/mylegacy-color-set.ts @@ -52,7 +52,7 @@ export const MyLegacyColorSet: ColorSet = { Badge: "#F57F17", // Orange Badge Notification }, Red: { - Text: "#8F0E0E", // Validation Text + Text: "#CB2213", // Validation Text Icon: "#CB2213", Border: "#DC6363", Background: "#FAF0F0", // Validation Background From 5898e6043d0bf5edfd948298b2d0bf436f44810f Mon Sep 17 00:00:00 2001 From: Ashley Teo Date: Fri, 12 Apr 2024 11:44:40 +0800 Subject: [PATCH 0052/1949] [MOL-15423][AT] Made adjustment to counter label to align with design guidelines --- src/input-textarea/textarea-counter.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/input-textarea/textarea-counter.tsx b/src/input-textarea/textarea-counter.tsx index 1086248b6..7876d036a 100644 --- a/src/input-textarea/textarea-counter.tsx +++ b/src/input-textarea/textarea-counter.tsx @@ -1,5 +1,4 @@ -import React from "react"; -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import { CounterLabel } from "./textara-counter.style"; interface Props { @@ -40,7 +39,7 @@ export const TextareaCounter = ({ return renderCustomCounter(maxLength, value.toString().length); } else { const remainingLength = maxLength - value.toString().length; - if (remainingLength <= 1) { + if (remainingLength === 1) { return `${remainingLength} character left`; } else { return `${remainingLength.toLocaleString()} characters left`; From e4192e15440f01750eabdff875f0a768e25083e7 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Fri, 12 Apr 2024 17:08:21 +0800 Subject: [PATCH 0053/1949] [RBS-1265][DS] added optional custom alert icon for Alert component --- src/alert/alert.tsx | 2 ++ src/alert/types.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index 0a2ed5bd6..72e53f39c 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -19,6 +19,7 @@ export const Alert = ({ actionLinkIcon, sizeType = "default", showIcon = false, + customAlertIcon, ...otherProps }: AlertProps): JSX.Element => { const renderLinkType = () => { @@ -43,6 +44,7 @@ export const Alert = ({ }; const renderIcon = () => { + if (type && customAlertIcon) return customAlertIcon; switch (type) { case "success": return ; diff --git a/src/alert/types.ts b/src/alert/types.ts index 68b59a491..3322d5c5a 100644 --- a/src/alert/types.ts +++ b/src/alert/types.ts @@ -14,4 +14,5 @@ export interface AlertProps extends React.HTMLAttributes { showIcon?: boolean | undefined; actionLinkIcon?: JSX.Element | undefined; sizeType?: AlertSizeType | undefined; + customAlertIcon?: JSX.Element | undefined; } From a3d08f4f31d7592a2226ad8c06516e011e9fd3f4 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Fri, 12 Apr 2024 17:09:08 +0800 Subject: [PATCH 0054/1949] [RBS-1265][DS] updated Alert component stories --- stories/alert/alert.mdx | 4 ++++ stories/alert/alert.stories.tsx | 19 +++++++++++++++++++ stories/alert/props-table.tsx | 7 +++++++ 3 files changed, 30 insertions(+) diff --git a/stories/alert/alert.mdx b/stories/alert/alert.mdx index fccaf592e..bc58ced4e 100644 --- a/stories/alert/alert.mdx +++ b/stories/alert/alert.mdx @@ -39,6 +39,10 @@ Or if you require a custom display, you can construct your layout and pass it in +With custom icon + + + Component API This component also inherits the [HTMLDivAttributes](https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement) diff --git a/stories/alert/alert.stories.tsx b/stories/alert/alert.stories.tsx index abd25d81b..65be017b4 100644 --- a/stories/alert/alert.stories.tsx +++ b/stories/alert/alert.stories.tsx @@ -1,3 +1,4 @@ +import { CalendarEventIcon } from "@lifesg/react-icons/calendar-event"; import type { Meta, StoryObj } from "@storybook/react"; import { Alert } from "src/alert"; @@ -210,3 +211,21 @@ export const SmallSize: StoryObj = { ); }, }; + +export const WithCustomIcon: StoryObj = { + render: () => { + return ( + <> + } + > + An alert box with a custom icon that can be passed in using + customAlertIcon. + +
+ + ); + }, +}; diff --git a/stories/alert/props-table.tsx b/stories/alert/props-table.tsx index a1591b50c..a8f41f24e 100644 --- a/stories/alert/props-table.tsx +++ b/stories/alert/props-table.tsx @@ -70,5 +70,12 @@ export const PropsTable = () => ( + + customAlertIcon + + Specifies a custom replacement icon for the alert + + + ); From 69954984245dc69e0d3377cea7ad600ee4480a6e Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Fri, 12 Apr 2024 17:22:26 +0800 Subject: [PATCH 0055/1949] [RBS-1265][DS] updated Alert component test --- tests/alert/alert.spec.tsx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/alert/alert.spec.tsx b/tests/alert/alert.spec.tsx index 20cd99ead..e9198abbd 100644 --- a/tests/alert/alert.spec.tsx +++ b/tests/alert/alert.spec.tsx @@ -1,6 +1,7 @@ import { render, screen } from "@testing-library/react"; import { Alert } from "../../src"; import { Color } from "../../src"; +import { StarIcon } from "@lifesg/react-icons/star"; // ============================================================================= // UNIT TESTS @@ -73,6 +74,28 @@ describe("Alert", () => { }); }); + describe("customAlertIcon", () => { + it("should render if the prop is provided", () => { + render( + } + > + {DEFAULT_TEXT} + + ); + + expect(getCustomIcon()).toBeInTheDocument(); + }); + + it("should not render if the prop is not provided", () => { + render(); + + expect(getCustomIcon()).not.toBeInTheDocument(); + }); + }); + it("should render custom display if required", () => { const CUSTOM_TEXT = "this is a custom component"; @@ -96,3 +119,7 @@ const getActionLink = (isQuery = false, children?: string) => { } return screen.getByRole("link", children && { name: children }); }; + +const getCustomIcon = () => { + return screen.queryByTestId("star-test"); +}; From b996252c99ff8c47b7fb7bedc3e37da06bbaab3e Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Sat, 13 Apr 2024 15:26:30 +1200 Subject: [PATCH 0056/1949] [MISC][KE] Fixed self hosted image not able to zoom - img.src contains domain string --- src/fullscreen-image-carousel/stateful-image.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fullscreen-image-carousel/stateful-image.tsx b/src/fullscreen-image-carousel/stateful-image.tsx index 1b9634aef..8831a0b3c 100644 --- a/src/fullscreen-image-carousel/stateful-image.tsx +++ b/src/fullscreen-image-carousel/stateful-image.tsx @@ -45,7 +45,7 @@ export const StatefulImage = ({ img.onload = () => { !!retrieveImageDimension && setDimension({ - src: img.src, + src, width: img.width, height: img.height, }); From 9874e1b7b427f2a96d7f0c60ce35ffaadc6ff5f7 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Tue, 16 Apr 2024 16:43:04 +0800 Subject: [PATCH 0057/1949] [RBS-1265][DS] added optional maxLines to be rendered for Alert component --- src/alert/alert.style.tsx | 33 ++++++++++++++++++++++++++++ src/alert/alert.tsx | 46 ++++++++++++++++++++++++++++++++++++++- src/alert/types.ts | 1 + 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index 022b1c826..b42dfff48 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -12,6 +12,10 @@ interface StyleProps { $type: AlertType; $sizeType: AlertSizeType; } +export interface TextContentProps { + $showMore: boolean; + $maxNoOfLines?: number; +} // ============================================================================= // STYLING @@ -143,3 +147,32 @@ export const TextContainer = styled.div` flex: 1; overflow-wrap: anywhere; `; +/* + * Height is calculated based on text line height + * max-height: text-line-height * maximum number of lines + */ + +export const TextWrapperContainer = styled.div` + ${(props) => { + const gradient = + "linear-gradient(to bottom, black 50%, transparent 100%)"; + if (!props.$showMore && props.$maxNoOfLines) + return ` + display: -webkit-box; + -webkit-line-clamp: ${props.$maxNoOfLines}; + line-clamp: ${props.$maxNoOfLines}; + -webkit-box-orient: vertical; + overflow: hidden; + + -webkit-mask-image: ${gradient}; + mask-image: ${gradient}; + `; + }} +`; + +export const ShowMoreButton = styled(Text.BodySmall)` + cursor: pointer; + margin-top: 0.5rem; + color: ${Color.Primary}; + user-select: none; +`; diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index 72e53f39c..7c59eb508 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -2,7 +2,9 @@ import { AlertProps } from "./types"; import { ActionLinkText, AlertIconWrapper, + ShowMoreButton, TextContainer, + TextWrapperContainer, Wrapper, } from "./alert.style"; import { TickCircleFillIcon } from "@lifesg/react-icons/tick-circle-fill"; @@ -10,6 +12,7 @@ import { ExclamationTriangleFillIcon } from "@lifesg/react-icons/exclamation-tri import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circle-fill"; import { ICircleFillIcon } from "@lifesg/react-icons/i-circle-fill"; import { ArrowRightIcon } from "@lifesg/react-icons/arrow-right"; +import { useEffect, useRef, useState } from "react"; export const Alert = ({ type, @@ -20,8 +23,35 @@ export const Alert = ({ sizeType = "default", showIcon = false, customAlertIcon, + maxLines, ...otherProps }: AlertProps): JSX.Element => { + const [isShowMore, setIsShowMore] = useState(false); + const contentContainerHeightRef = useRef(null); + const [displayShowMore, setDisplayShowMore] = useState(false); + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + + useEffect(() => { + // forces line-clamp to trigger so that we can determine if content is collapsible + setIsShowMore(!maxLines); + setDisplayShowMore(!!maxLines); + if (!maxLines || !contentContainerHeightRef.current) return; + + // calculate whether to show more after line-clamp is triggered + const clientHeight = contentContainerHeightRef.current.clientHeight; + const scrollHeight = contentContainerHeightRef.current.scrollHeight; + + // Note: when using DS Text.H3 or Text.H1, the calculated scrollHeight and clientHeight differs by 1 without any overflow + + setDisplayShowMore(scrollHeight - clientHeight > 1); + }, [children]); + + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= const renderLinkType = () => { if (actionLinkIcon) { return actionLinkIcon; @@ -74,7 +104,21 @@ export const Alert = ({ )} - {children} + + {children} + + {maxLines !== undefined && displayShowMore && ( + setIsShowMore(!isShowMore)} + > + {isShowMore ? "Show less" : "Show more"} + + )} {actionLink && renderLink()} diff --git a/src/alert/types.ts b/src/alert/types.ts index 3322d5c5a..0dcc36ff5 100644 --- a/src/alert/types.ts +++ b/src/alert/types.ts @@ -15,4 +15,5 @@ export interface AlertProps extends React.HTMLAttributes { actionLinkIcon?: JSX.Element | undefined; sizeType?: AlertSizeType | undefined; customAlertIcon?: JSX.Element | undefined; + maxLines?: number | undefined; } From f4fc7bb92a805c12765e808d4f498a6a8110f46f Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Tue, 16 Apr 2024 16:47:23 +0800 Subject: [PATCH 0058/1949] [RBS-1265][DS] updated Alert component stories --- stories/alert/alert.mdx | 4 ++++ stories/alert/alert.stories.tsx | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/stories/alert/alert.mdx b/stories/alert/alert.mdx index bc58ced4e..2dfe3d0db 100644 --- a/stories/alert/alert.mdx +++ b/stories/alert/alert.mdx @@ -43,6 +43,10 @@ Or if you require a custom display, you can construct your layout and pass it in +With max lines + + + Component API This component also inherits the [HTMLDivAttributes](https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement) diff --git a/stories/alert/alert.stories.tsx b/stories/alert/alert.stories.tsx index 65be017b4..3fbe5c3fe 100644 --- a/stories/alert/alert.stories.tsx +++ b/stories/alert/alert.stories.tsx @@ -229,3 +229,26 @@ export const WithCustomIcon: StoryObj = { ); }, }; + +export const WithMaxLines: StoryObj = { + render: () => { + return ( + <> + + An alert box with a limit to the max amount of lines to be + rendered, with a text button to expand the box. Lorem ipsum + dolor sit amet, consectetur adipiscing elit. Pellentesque + lacinia auctor tellus, eget tempor diam finibus vel. Integer + non enim vehicula, malesuada lectus a, lobortis magna. + Aliquam in sodales enim. Ut id condimentum magna. Ut aliquet + tincidunt nunc eu cursus. Vestibulum id maximus nulla. + Phasellus lacinia risus neque, eget tincidunt dui maximus + sed. Morbi eu vestibulum massa. Suspendisse potenti. Donec + faucibus condimentum nibh, non tempus augue bibendum non. + Cras in mattis ex. + +
+ + ); + }, +}; From 5f829e84f2fd8822e22fb358df8c57c0549ab8ce Mon Sep 17 00:00:00 2001 From: Ashley Teo Date: Fri, 12 Apr 2024 11:37:55 +0800 Subject: [PATCH 0059/1949] [MOL-15413][AT] update mylegacy color palette for validation text --- src/spec/color-spec/mylegacy-color-set.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spec/color-spec/mylegacy-color-set.ts b/src/spec/color-spec/mylegacy-color-set.ts index 97724c9a6..850a5b7dd 100644 --- a/src/spec/color-spec/mylegacy-color-set.ts +++ b/src/spec/color-spec/mylegacy-color-set.ts @@ -52,7 +52,7 @@ export const MyLegacyColorSet: ColorSet = { Badge: "#F57F17", // Orange Badge Notification }, Red: { - Text: "#8F0E0E", // Validation Text + Text: "#CB2213", // Validation Text Icon: "#CB2213", Border: "#DC6363", Background: "#FAF0F0", // Validation Background From a02c482ef7b1d4c417868db971354b741fd4f87f Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Fri, 12 Apr 2024 10:23:16 +0800 Subject: [PATCH 0060/1949] [MISC][KT] Bump v2.5.0-canary.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06ee57327..39b93f6dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.1", + "version": "2.5.0-canary.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.1", + "version": "2.5.0-canary.2", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index b7e0f0ea9..07f7cbb1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.1", + "version": "2.5.0-canary.2", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 2d9badfa2c287d2713f35fb87b2ac41a59c9e5ed Mon Sep 17 00:00:00 2001 From: Kok Eng Date: Sat, 13 Apr 2024 15:26:30 +1200 Subject: [PATCH 0061/1949] [MISC][KE] Fixed self hosted image not able to zoom - img.src contains domain string --- src/fullscreen-image-carousel/stateful-image.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fullscreen-image-carousel/stateful-image.tsx b/src/fullscreen-image-carousel/stateful-image.tsx index 1b9634aef..8831a0b3c 100644 --- a/src/fullscreen-image-carousel/stateful-image.tsx +++ b/src/fullscreen-image-carousel/stateful-image.tsx @@ -45,7 +45,7 @@ export const StatefulImage = ({ img.onload = () => { !!retrieveImageDimension && setDimension({ - src: img.src, + src, width: img.width, height: img.height, }); From a91b02e424b85c21fbe6892a1c8126e93508131d Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Tue, 16 Apr 2024 17:48:05 +0800 Subject: [PATCH 0062/1949] [RBS-1266][DS] added optional maxLines to be rendered for NotificationBanner component --- .../notification-banner.styles.tsx | 30 +++++++++++++ .../notification-banner.tsx | 42 ++++++++++++++++++- src/notification-banner/types.ts | 1 + stories/notification-banner/props-table.tsx | 10 +++++ 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 0ba504825..e402640ba 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -14,6 +14,11 @@ interface WrapperStyleProps { $sticky: boolean; } +interface TextContentProps { + $showMore: boolean; + $maxNoOfLines?: number; +} + // ============================================================================= // STYLING // ============================================================================= @@ -94,3 +99,28 @@ export const StyledIcon = styled(CrossIcon)` width: 1.875rem; color: ${Color.Neutral[8]}; `; + +export const TextWrapperContainer = styled.div` + ${(props) => { + const gradient = + "linear-gradient(to bottom, black 50%, transparent 100%)"; + if (!props.$showMore && props.$maxNoOfLines) + return ` + display: -webkit-box; + -webkit-line-clamp: ${props.$maxNoOfLines}; + line-clamp: ${props.$maxNoOfLines}; + -webkit-box-orient: vertical; + overflow: hidden; + + -webkit-mask-image: ${gradient}; + mask-image: ${gradient}; + `; + }} +`; + +export const ViewMoreButton = styled(Text.BodySmall)` + cursor: pointer; + margin-top: 0.5rem; + color: ${Color.Primary}; + user-select: none; +`; diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index f1c606c7a..273440879 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import { Container, Content, @@ -6,6 +6,8 @@ import { StyledIcon, StyledIconButton, TextContainer, + TextWrapperContainer, + ViewMoreButton, Wrapper, } from "./notification-banner.styles"; import { @@ -21,6 +23,7 @@ export const NBComponent = ({ onDismiss, id, forwardedRef, + maxLines, ...otherProps }: NotificationBannerWithForwardedRefProps): JSX.Element => { // ============================================================================= @@ -29,6 +32,9 @@ export const NBComponent = ({ const testId = otherProps["data-testid"]; const [isVisible, setVisible] = useState(visible); + const [isViewMore, setIsViewMore] = useState(false); + const contentContainerHeightRef = useRef(null); + const [displayShowMore, setDisplayShowMore] = useState(false); // ============================================================================= // EFFECTS @@ -37,6 +43,25 @@ export const NBComponent = ({ setVisible(visible); }, [visible]); + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + + useEffect(() => { + // forces line-clamp to trigger so that we can determine if content is collapsible + setIsViewMore(!maxLines); + setDisplayShowMore(!!maxLines); + if (!maxLines || !contentContainerHeightRef.current) return; + + // calculate whether to show more after line-clamp is triggered + const clientHeight = contentContainerHeightRef.current.clientHeight; + const scrollHeight = contentContainerHeightRef.current.scrollHeight; + + // Note: when using DS Text.H3 or Text.H1, the calculated scrollHeight and clientHeight differs by 1 without any overflow + + setDisplayShowMore(scrollHeight - clientHeight > 1); + }, [children]); + // ============================================================================= // EVENT HANDLERS // ============================================================================= @@ -56,7 +81,20 @@ export const NBComponent = ({ - {children} + + {children} + + {maxLines !== undefined && displayShowMore && ( + setIsViewMore(!isViewMore)} + > + {isViewMore ? "View less" : "View more"} + + )} {dismissible && ( diff --git a/src/notification-banner/types.ts b/src/notification-banner/types.ts index 4a41eb4a3..ca74e5251 100644 --- a/src/notification-banner/types.ts +++ b/src/notification-banner/types.ts @@ -8,6 +8,7 @@ export interface NotificationBannerProps sticky?: boolean | undefined; onDismiss?: (() => void) | undefined; "data-testid"?: string | undefined; + maxLines?: number | undefined; } export interface NotificationBannerWithForwardedRefProps diff --git a/stories/notification-banner/props-table.tsx b/stories/notification-banner/props-table.tsx index b8340ad93..c8d389b93 100644 --- a/stories/notification-banner/props-table.tsx +++ b/stories/notification-banner/props-table.tsx @@ -53,6 +53,16 @@ const DATA: ApiTableSectionProps[] = [ ), propTypes: ["() => void"], }, + { + name: "maxLines", + description: ( + <> + Specifies the max number of lines to be displayed in the{" "} + NotificationBanner + + ), + propTypes: ["number"], + }, ], }, ]; From 508731f7ef4f1df2fd31e9d60711b6abf8a33734 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Tue, 16 Apr 2024 17:48:48 +0800 Subject: [PATCH 0063/1949] [RBS-1266][DS] updated NotficationBanner component stories --- .../notification-banner.mdx | 6 +++ .../notification-banner.stories.tsx | 39 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/stories/notification-banner/notification-banner.mdx b/stories/notification-banner/notification-banner.mdx index 72771de60..47af05848 100644 --- a/stories/notification-banner/notification-banner.mdx +++ b/stories/notification-banner/notification-banner.mdx @@ -52,6 +52,12 @@ The `NotificationBanner` also allows custom content to be displayed. +Max lines + +The `NotificationBanner` allows a maximum number of lines to be rendered. + + + Using as a Higher Order Component (HOC) You can also specify the contents of the `NotificationBanner` via the provided diff --git a/stories/notification-banner/notification-banner.stories.tsx b/stories/notification-banner/notification-banner.stories.tsx index 059aa8161..a8a1e6db4 100644 --- a/stories/notification-banner/notification-banner.stories.tsx +++ b/stories/notification-banner/notification-banner.stories.tsx @@ -229,3 +229,42 @@ export const CustomContent: StoryObj = { ); }, }; + +export const MaxLines: StoryObj = { + render: () => { + return ( +
+ + This is a notification banner with maxLines set. Lorem ipsum + dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim + ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. Duis aute irure + dolor in reprehenderit in voluptate velit esse cillum dolore + eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat + non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore + magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu + fugiat nulla pariatur. Excepteur sint occaecat cupidatat + non proident, sunt in culpa qui officia deserunt mollit + anim id est laborum. + + +
+ ); + }, +}; From 469928f9a20ceec793a69aace703db53896cff06 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Wed, 17 Apr 2024 01:00:28 +0800 Subject: [PATCH 0064/1949] [CCUBE-1232][KT] Add Alert to UneditableSectionItem --- .../section-item.styles.tsx | 5 ++++ src/uneditable-section/section-item.tsx | 19 ++++++++------- src/uneditable-section/types.ts | 2 ++ .../uneditable-section/uneditable-section.mdx | 2 ++ .../uneditable-section.stories.tsx | 23 +++++++++++++++++++ 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/uneditable-section/section-item.styles.tsx b/src/uneditable-section/section-item.styles.tsx index 0206fd18f..4b0a26cb2 100644 --- a/src/uneditable-section/section-item.styles.tsx +++ b/src/uneditable-section/section-item.styles.tsx @@ -5,6 +5,7 @@ import { MediaQuery } from "../media"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; import { TextStyleHelper } from "../text"; import { UneditableSectionItemDisplayWidth } from "./types"; +import { Alert } from "../alert"; // ============================================================================= // STYLING INTERFACES @@ -110,3 +111,7 @@ export const TryAgainLabel = styled.span` text-decoration: underline; margin-left: 0.5rem; `; + +export const StyledAlert = styled(Alert)` + margin-top: 0.5rem; +`; diff --git a/src/uneditable-section/section-item.tsx b/src/uneditable-section/section-item.tsx index 62943561f..5dd4396a2 100644 --- a/src/uneditable-section/section-item.tsx +++ b/src/uneditable-section/section-item.tsx @@ -1,9 +1,9 @@ import { EyeIcon } from "@lifesg/react-icons/eye"; import { EyeSlashIcon } from "@lifesg/react-icons/eye-slash"; -import { - UneditableSectionItemMaskState, - UneditableSectionItemProps, -} from "./types"; +import { useEffect, useState } from "react"; +import { FormLabel } from "../form/form-label"; +import { Text } from "../text"; +import { StringHelper } from "../util/string-helper"; import { Clickable, Container, @@ -12,12 +12,13 @@ import { IconContainer, LoadingLabel, Spinner, + StyledAlert, TryAgainLabel, } from "./section-item.styles"; -import { FormLabel } from "../form/form-label"; -import { Text } from "../text"; -import { StringHelper } from "../util/string-helper"; -import { useEffect, useState } from "react"; +import { + UneditableSectionItemMaskState, + UneditableSectionItemProps, +} from "./types"; export interface UneditableSectionItemComponentProps extends UneditableSectionItemProps { @@ -37,6 +38,7 @@ export const UneditableSectionItem = ({ unmaskRange, maskRegex, disableMaskUnmask, + alert, maskTransformer, onMask, onUnmask, @@ -158,6 +160,7 @@ export const UneditableSectionItem = ({ {label} {renderContent()} + {alert && } ); }; diff --git a/src/uneditable-section/types.ts b/src/uneditable-section/types.ts index f2ef6a584..9dc02e687 100644 --- a/src/uneditable-section/types.ts +++ b/src/uneditable-section/types.ts @@ -1,3 +1,4 @@ +import { AlertProps } from "../alert"; import { MaskAttributeProps } from "../masked-input"; export type UneditableSectionItemDisplayWidth = "half" | "full"; @@ -27,6 +28,7 @@ export interface UneditableSectionItemProps extends MaskAttributeProps { maskLoadingState?: UneditableSectionItemMaskLoadingState | undefined; /** If specified, one is unable to mask or unmask the value */ disableMaskUnmask?: boolean | undefined; + alert?: AlertProps | undefined; } export interface UneditableSectionProps { diff --git a/stories/uneditable-section/uneditable-section.mdx b/stories/uneditable-section/uneditable-section.mdx index d9d3f3752..de7c46cad 100644 --- a/stories/uneditable-section/uneditable-section.mdx +++ b/stories/uneditable-section/uneditable-section.mdx @@ -50,6 +50,8 @@ try again. + + With custom content You are able to compose custom content on the top and bottom of the details to suit diff --git a/stories/uneditable-section/uneditable-section.stories.tsx b/stories/uneditable-section/uneditable-section.stories.tsx index 753238957..dc88bf349 100644 --- a/stories/uneditable-section/uneditable-section.stories.tsx +++ b/stories/uneditable-section/uneditable-section.stories.tsx @@ -236,6 +236,29 @@ export const MaskUnmaskWithError: StoryObj = { }, }; +export const MaskUnmaskWithAlert: StoryObj = { + render: () => { + const [item, setItem] = useState({ + id: "item1", + label: "This has an error display when unmasking", + value: "S1••••67D", + maskState: "masked", + maskLoadingState: "fail", + alert: { + type: "warning", + children: "This is an alert message", + }, + }); + + return ( + + ); + }, +}; + export const WithCustomContent: StoryObj = { render: () => { return ( From 9484ba75f256059bc46f87694e1a80f279c558de Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Wed, 17 Apr 2024 01:30:21 +0800 Subject: [PATCH 0065/1949] [KT] Fix subtitle font weight. Also improve stories to reflect actual usage --- src/form/form-label.style.tsx | 5 +- stories/form/form-label/doc-elements.tsx | 7 + stories/form/form-label/form-label.mdx | 13 +- .../form/form-label/form-label.stories.tsx | 125 +++++++++--------- 4 files changed, 74 insertions(+), 76 deletions(-) create mode 100644 stories/form/form-label/doc-elements.tsx diff --git a/src/form/form-label.style.tsx b/src/form/form-label.style.tsx index 44406cd54..b108e9cbe 100644 --- a/src/form/form-label.style.tsx +++ b/src/form/form-label.style.tsx @@ -41,5 +41,8 @@ export const ErrorMessage = styled(Text.H6)` `; export const Subtitle = styled(Text.BodySmall)` - color: ${Color.Neutral[3]}; + && { + color: ${Color.Neutral[3]}; + ${TextStyleHelper.getFontFamily("BodySmall", "regular")} + } `; diff --git a/stories/form/form-label/doc-elements.tsx b/stories/form/form-label/doc-elements.tsx new file mode 100644 index 000000000..a4bb225ea --- /dev/null +++ b/stories/form/form-label/doc-elements.tsx @@ -0,0 +1,7 @@ +import styled from "styled-components"; + +export const Wrapper = styled.div` + display: flex; + flex-direction: column; + gap: 1.5rem; +`; diff --git a/stories/form/form-label/form-label.mdx b/stories/form/form-label/form-label.mdx index 33de6cbb7..50f4134f7 100644 --- a/stories/form/form-label/form-label.mdx +++ b/stories/form/form-label/form-label.mdx @@ -17,17 +17,11 @@ import { Form } from "@lifesg/react-design-system/form"; -With addon +Real world usage -Form labels come with an optional addon that you can use by specifying the `addon` prop. +Given its standalone nature, the `Form.Label` can be used in any layouts or structures. - - -With subtitle - -Form labels come with an optional subtitle that you can use by specifying the `subtitle` prop. - - + With custom child elements @@ -38,3 +32,4 @@ You can also add other HTML elements within the form label. Component API +import {RealWorldUsage} from "./form-label.stories" diff --git a/stories/form/form-label/form-label.stories.tsx b/stories/form/form-label/form-label.stories.tsx index 78a540577..6c2e2bd40 100644 --- a/stories/form/form-label/form-label.stories.tsx +++ b/stories/form/form-label/form-label.stories.tsx @@ -3,6 +3,8 @@ import { useState } from "react"; import { Checkbox } from "src/checkbox"; import { Input } from "src/input"; import { Form } from "src/form"; +import { Wrapper } from "./doc-elements"; +import { StoryContainer } from "../../storybook-common"; type Component = typeof Form.Label; @@ -15,72 +17,61 @@ export default meta; export const Default: StoryObj = { render: () => { - const [checked, setChecked] = useState(false); - return ( -
-
- setChecked(!checked)} - id="checkbox" - /> -
- - The form label - -
- ); - }, -}; - -export const WithAddon: StoryObj = { - render: () => { - const [checked, setChecked] = useState(false); return ( -
-
- setChecked(!checked)} - id="checkbox" - /> -
- - The form label with an addon - -
+ + + The form label + + The form label with an addon + + + The form label with a subtitle + + + ); }, }; -export const WithSubtitle: StoryObj = { +export const RealWorldUsage: StoryObj = { render: () => { const [checked, setChecked] = useState(false); return ( -
-
- setChecked(!checked)} - id="checkbox" - /> -
- - The form label with a subtitle - -
+ + +
+ + This is a descriptive label + + +
+
+ setChecked(!checked)} + /> + + Label for checkbox + +
+
+
); }, }; @@ -88,14 +79,16 @@ export const WithSubtitle: StoryObj = { export const NestedChildren: StoryObj = { render: () => { return ( -
- - Label with a hyperlink -
-

and some additional text on a new line

-
- -
+ +
+ + Label with a hyperlink +
+

and some additional text on a new line

+
+ +
+
); }, }; From bf70ab2afb76520c2a6d79a43f9bc3def8c0f096 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Wed, 17 Apr 2024 15:22:23 +0800 Subject: [PATCH 0066/1949] [CCUBE-1232][KT] Set to use small variant of Alert by default --- src/uneditable-section/section-item.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uneditable-section/section-item.tsx b/src/uneditable-section/section-item.tsx index 5dd4396a2..c5bb8e4ba 100644 --- a/src/uneditable-section/section-item.tsx +++ b/src/uneditable-section/section-item.tsx @@ -160,7 +160,7 @@ export const UneditableSectionItem = ({ {label} {renderContent()} - {alert && } + {alert && } ); }; From fd18592569fdb49cfd2a4a7f9079c605348e0592 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Wed, 17 Apr 2024 15:47:06 +0800 Subject: [PATCH 0067/1949] [CCUBE-1241][RL] Revert unused changes, prefix unused variable --- src/shared/dropdown-wrapper/element-with-dropdown.tsx | 2 +- src/shared/internal-calendar/internal-calendar.tsx | 4 +--- src/shared/internal-calendar/types.ts | 2 -- src/util/use-event-listener.tsx | 9 ++------- 4 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/shared/dropdown-wrapper/element-with-dropdown.tsx b/src/shared/dropdown-wrapper/element-with-dropdown.tsx index 90fc8d846..cf2f79092 100644 --- a/src/shared/dropdown-wrapper/element-with-dropdown.tsx +++ b/src/shared/dropdown-wrapper/element-with-dropdown.tsx @@ -44,7 +44,7 @@ export const ElementWithDropdown = ({ const floatingRef = useRef(null); const { refs, floatingStyles, context } = useFloating({ open: isOpen, - onOpenChange: (open, event, reason) => { + onOpenChange: (open, _event, reason) => { if (reason === "escape-key") { onDismiss?.(); } else if (open && !isOpen) { diff --git a/src/shared/internal-calendar/internal-calendar.tsx b/src/shared/internal-calendar/internal-calendar.tsx index 02e61fb6e..8c5584e0b 100644 --- a/src/shared/internal-calendar/internal-calendar.tsx +++ b/src/shared/internal-calendar/internal-calendar.tsx @@ -38,7 +38,6 @@ export const Component = ( // ============================================================================= const calendarManagerRef = useRef(); const previousCalendarDate = useRef(undefined); - const containerRef = useRef(undefined); // ============================================================================= // HOOKS @@ -51,7 +50,6 @@ export const Component = ( setCalendarDate(value?: string) { calendarManagerRef.current.setCalendarDate(value); }, - rootElementRef: containerRef, }; }); @@ -181,7 +179,7 @@ export const Component = ( }; return ( - + void; setCalendarDate: (value?: string) => void; - rootElementRef: RefObject; } // ============================================================================= diff --git a/src/util/use-event-listener.tsx b/src/util/use-event-listener.tsx index c3ddfef6c..4ac554b0f 100644 --- a/src/util/use-event-listener.tsx +++ b/src/util/use-event-listener.tsx @@ -7,8 +7,7 @@ export const useEventListener = ( eventName: K, handler: (event: WindowEventMap[K]) => void, target: Target = "window", - options?: AddEventListenerOptions | boolean, - enabled = true + options?: AddEventListenerOptions | boolean ) => { // Create a ref that stores handler const savedHandler = useRef<(event: WindowEventMap[K]) => void>(); @@ -20,10 +19,6 @@ export const useEventListener = ( useEffect( () => { - if (!enabled) { - return; - } - let element: Element; switch (target) { case "window": @@ -50,6 +45,6 @@ export const useEventListener = ( element.removeEventListener(eventName, eventListener, options); }; }, - [eventName, target, enabled] // Re-run if eventName or element changes + [eventName, target] // Re-run if eventName or element changes ); }; From f8bd416f3904fcc3a5a979e478baee3be393471c Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Wed, 17 Apr 2024 17:20:54 +0800 Subject: [PATCH 0068/1949] [RBS-1266][DS] added onClick field to NotificationBanner component --- .../notification-banner.tsx | 25 ++++++++++++++++--- src/notification-banner/types.ts | 1 + 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index 273440879..d3a9881ab 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -24,6 +24,7 @@ export const NBComponent = ({ id, forwardedRef, maxLines, + onClick, ...otherProps }: NotificationBannerWithForwardedRefProps): JSX.Element => { // ============================================================================= @@ -77,7 +78,15 @@ export const NBComponent = ({ if (!isVisible) return null; return ( - + ) => { + event.stopPropagation(); + onClick(); + }} + {...otherProps} + > @@ -90,7 +99,12 @@ export const NBComponent = ({ {maxLines !== undefined && displayShowMore && ( setIsViewMore(!isViewMore)} + onClick={( + event: React.MouseEvent + ) => { + event.stopPropagation(); + setIsViewMore(!isViewMore); + }} > {isViewMore ? "View less" : "View more"} @@ -99,7 +113,12 @@ export const NBComponent = ({ {dismissible && ( + ) => { + event.stopPropagation(); + handleDismiss(); + }} id={formatId("dismiss-button", id)} data-testid={formatId("dismiss-button", testId)} focusHighlight={false} diff --git a/src/notification-banner/types.ts b/src/notification-banner/types.ts index ca74e5251..cbe1d59a5 100644 --- a/src/notification-banner/types.ts +++ b/src/notification-banner/types.ts @@ -9,6 +9,7 @@ export interface NotificationBannerProps onDismiss?: (() => void) | undefined; "data-testid"?: string | undefined; maxLines?: number | undefined; + onClick?: (() => void) | undefined; } export interface NotificationBannerWithForwardedRefProps From 85800234c32c69421101c83ca4f99673438c313d Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Wed, 17 Apr 2024 17:49:58 +0800 Subject: [PATCH 0069/1949] [CCUBE-1232][KT] Update stories to remove unused state --- .../uneditable-section.stories.tsx | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/stories/uneditable-section/uneditable-section.stories.tsx b/stories/uneditable-section/uneditable-section.stories.tsx index dc88bf349..71db1f37f 100644 --- a/stories/uneditable-section/uneditable-section.stories.tsx +++ b/stories/uneditable-section/uneditable-section.stories.tsx @@ -238,22 +238,24 @@ export const MaskUnmaskWithError: StoryObj = { export const MaskUnmaskWithAlert: StoryObj = { render: () => { - const [item, setItem] = useState({ - id: "item1", - label: "This has an error display when unmasking", - value: "S1••••67D", - maskState: "masked", - maskLoadingState: "fail", - alert: { - type: "warning", - children: "This is an alert message", + const ITEMS: UneditableSectionItemProps[] = [ + { + id: "item1", + label: "This has an error display when unmasking", + value: "S1••••67D", + maskState: "masked", + maskLoadingState: "fail", + alert: { + type: "warning", + children: "This is an alert message", + }, }, - }); + ]; return ( ); }, From 94454507a01940b15975afcd7ff636e97ce0b9b6 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Wed, 17 Apr 2024 17:52:01 +0800 Subject: [PATCH 0070/1949] [CCUBE-1232][KT] Add test case --- .../uneditable-section.spec.tsx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/uneditable-section/uneditable-section.spec.tsx b/tests/uneditable-section/uneditable-section.spec.tsx index c20f336db..3d60afd95 100644 --- a/tests/uneditable-section/uneditable-section.spec.tsx +++ b/tests/uneditable-section/uneditable-section.spec.tsx @@ -211,6 +211,24 @@ describe("UneditableSection", () => { expect(onTryAgainFn).toHaveBeenCalledWith(ITEMS[0]); }); }); + + describe("With alert", () => { + it("should render the Alert in the section item if specified", () => { + const ITEMS: UneditableSectionItemProps[] = [ + { + label: "NRIC or FIN", + value: "S••••534J", + alert: { + type: "warning", + children: "This is an alert", + }, + }, + ]; + + render(); + expect(screen.getByText("This is an alert")).toBeInTheDocument(); + }); + }); }); // ============================================================================= // MOCKS From 4771a7ffc369ad76cab9aeb9d2b9d399d35ad668 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Wed, 17 Apr 2024 18:02:02 +0800 Subject: [PATCH 0071/1949] [RBS-1266][DS] added onClick to NotificationBanner stories --- stories/notification-banner/doc-elements.tsx | 6 ++- .../notification-banner.mdx | 8 ++++ .../notification-banner.stories.tsx | 38 +++++++++++++++++++ stories/notification-banner/props-table.tsx | 10 +++++ 4 files changed, 61 insertions(+), 1 deletion(-) diff --git a/stories/notification-banner/doc-elements.tsx b/stories/notification-banner/doc-elements.tsx index 3b60eccf3..de1b03591 100644 --- a/stories/notification-banner/doc-elements.tsx +++ b/stories/notification-banner/doc-elements.tsx @@ -2,9 +2,13 @@ import styled from "styled-components"; import { Layout } from "../../src/layout"; import { withNotificationBanner } from "../../src/notification-banner"; -export const StyledContent = styled(Layout.Content)` +interface ContentProps { + $color?: string | undefined; +} +export const StyledContent = styled(Layout.Content)` [data-id="container"] { flex-direction: column; + background-color: ${(props) => props?.$color}; } `; diff --git a/stories/notification-banner/notification-banner.mdx b/stories/notification-banner/notification-banner.mdx index 47af05848..f5822f8a2 100644 --- a/stories/notification-banner/notification-banner.mdx +++ b/stories/notification-banner/notification-banner.mdx @@ -52,6 +52,14 @@ The `NotificationBanner` also allows custom content to be displayed. +On Click + +The `NotificationBanner` allows performing of an action when clicked. + + + +Using as a Higher Order Component (HOC) + Max lines The `NotificationBanner` allows a maximum number of lines to be rendered. diff --git a/stories/notification-banner/notification-banner.stories.tsx b/stories/notification-banner/notification-banner.stories.tsx index a8a1e6db4..5c30ece49 100644 --- a/stories/notification-banner/notification-banner.stories.tsx +++ b/stories/notification-banner/notification-banner.stories.tsx @@ -2,6 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { NotificationBanner } from "src/notification-banner"; import { Text } from "src/text"; import { StyledContent } from "./doc-elements"; +import { useState } from "react"; type Component = typeof NotificationBanner; @@ -230,6 +231,43 @@ export const CustomContent: StoryObj = { }, }; +export const OnClick: StoryObj = { + render: () => { + const [swapColor, setSwapColor] = useState(true); + return ( +
+ { + setSwapColor(!swapColor); + }} + > + This is a notification banner that can be clicked to perform + an action. + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore + magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu + fugiat nulla pariatur. Excepteur sint occaecat cupidatat + non proident, sunt in culpa qui officia deserunt mollit + anim id est laborum. + + +
+ ); + }, +}; + export const MaxLines: StoryObj = { render: () => { return ( diff --git a/stories/notification-banner/props-table.tsx b/stories/notification-banner/props-table.tsx index c8d389b93..fe0c25653 100644 --- a/stories/notification-banner/props-table.tsx +++ b/stories/notification-banner/props-table.tsx @@ -53,6 +53,16 @@ const DATA: ApiTableSectionProps[] = [ ), propTypes: ["() => void"], }, + { + name: "onClick", + description: ( + <> + Called when the NotificationBanner is + clicked + + ), + propTypes: ["() => void"], + }, { name: "maxLines", description: ( From 490c1924e3d536b8fa883d1b10b9633de47f6e58 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 18 Apr 2024 15:40:30 +0800 Subject: [PATCH 0072/1949] [KT] Bump v2.5.0-canary.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 39b93f6dc..e75eeb78c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.2", + "version": "2.5.0-canary.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.2", + "version": "2.5.0-canary.3", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index 07f7cbb1a..c1d383b19 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.2", + "version": "2.5.0-canary.3", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From b13967541bb181d5db9955430b880cd6accf57c6 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 18 Apr 2024 22:39:44 +0800 Subject: [PATCH 0073/1949] [CCUBE-1257][KT] Remove incorrect import --- stories/form/form-label/form-label.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/stories/form/form-label/form-label.mdx b/stories/form/form-label/form-label.mdx index 50f4134f7..64c2910fc 100644 --- a/stories/form/form-label/form-label.mdx +++ b/stories/form/form-label/form-label.mdx @@ -32,4 +32,3 @@ You can also add other HTML elements within the form label. Component API -import {RealWorldUsage} from "./form-label.stories" From a9154b845d2ac06fff8807bba008c7cd280c35c3 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Fri, 19 Apr 2024 18:05:26 +0800 Subject: [PATCH 0074/1949] [MOL-15405][AM] Update popover trigger to cater for links --- src/popover-v2/popover-trigger.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/popover-v2/popover-trigger.tsx b/src/popover-v2/popover-trigger.tsx index 545d7a799..0af753b8d 100644 --- a/src/popover-v2/popover-trigger.tsx +++ b/src/popover-v2/popover-trigger.tsx @@ -30,6 +30,7 @@ export const PopoverTrigger = ({ // ========================================================================= const [visible, setVisible] = useState(false); const nodeRef = useRef(); + const popoverRef = useRef(); const isMobile = useMediaQuery({ maxWidth: MediaWidths.mobileL, }); @@ -65,7 +66,11 @@ export const PopoverTrigger = ({ // EVENT HANDLERS // ========================================================================= const handleMouseDownEvent = (event: MouseEvent) => { - if (nodeRef && !(nodeRef.current as any).contains(event.target)) { + if ( + nodeRef && + !(nodeRef.current as any).contains(event.target) && + !(popoverRef.current as any).contains(event.target) + ) { // outside click setVisible(false); @@ -119,7 +124,10 @@ export const PopoverTrigger = ({ {visible && (
{ + popoverRef.current = node; + refs.setFloating(node); + }} style={{ ...floatingStyles, zIndex }} > {renderPopover()} From 27ea963d78210fbde6d8da1f299a7023ddfca7b3 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Mon, 22 Apr 2024 10:09:56 +0800 Subject: [PATCH 0075/1949] [MOL-15405][AM] popover cleanup --- src/popover-v2/popover-trigger.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/popover-v2/popover-trigger.tsx b/src/popover-v2/popover-trigger.tsx index 0af753b8d..5d6001391 100644 --- a/src/popover-v2/popover-trigger.tsx +++ b/src/popover-v2/popover-trigger.tsx @@ -67,9 +67,8 @@ export const PopoverTrigger = ({ // ========================================================================= const handleMouseDownEvent = (event: MouseEvent) => { if ( - nodeRef && - !(nodeRef.current as any).contains(event.target) && - !(popoverRef.current as any).contains(event.target) + !nodeRef.current?.contains(event.target as Node) && + !popoverRef.current?.contains(event.target as Node) ) { // outside click setVisible(false); From cce4c12073acb9304de2d62d239814f9d0a70613 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 22 Apr 2024 23:17:30 +0800 Subject: [PATCH 0076/1949] [MISC][RL] Remove possible cause of infinite rerenders - Unmemoised callback might be causing reference ref to be set multiple times - Simplified to pass floating-ui's callback directly as the ref is unused - Also clean up unnecessary refs --- src/date-input/date-input.tsx | 8 +------- src/shared/dropdown-wrapper/element-with-dropdown.tsx | 9 +-------- src/shared/internal-calendar/calendar-dropdown.tsx | 8 ++------ 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 67111efbf..abb33806f 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -1,10 +1,6 @@ import { useEffect, useRef, useState } from "react"; import { ElementWithDropdown } from "../shared/dropdown-wrapper"; -import { - CalendarAction, - CalendarDropdown, - InternalCalendarRef, -} from "../shared/internal-calendar"; +import { CalendarAction, CalendarDropdown } from "../shared/internal-calendar"; import { StandaloneDateInput, StandaloneDateInputRef, @@ -45,7 +41,6 @@ export const DateInput = ({ const [calendarOpen, setCalendarOpen] = useState(false); const nodeRef = useRef(null); - const calendarRef = useRef(); const inputRef = useRef(); // ============================================================================= @@ -174,7 +169,6 @@ export const DateInput = ({ const renderCalendar = () => { return ( (null); const floatingRef = useRef(null); const { refs, floatingStyles, context } = useFloating({ open: isOpen, @@ -92,13 +91,7 @@ export const ElementWithDropdown = ({ // ============================================================================= return ( <> -
{ - elementRef.current = node; - refs.setReference(node); - }} - {...getReferenceProps()} - > +
{renderElement()}
{isMounted && ( diff --git a/src/shared/internal-calendar/calendar-dropdown.tsx b/src/shared/internal-calendar/calendar-dropdown.tsx index dd242ceb3..77bb9814d 100644 --- a/src/shared/internal-calendar/calendar-dropdown.tsx +++ b/src/shared/internal-calendar/calendar-dropdown.tsx @@ -1,4 +1,4 @@ -import React, { useImperativeHandle, useRef } from "react"; +import React from "react"; import { CalendarWrapper } from "./calendar-dropdown.style"; import { InternalCalendar } from "./internal-calendar"; import { InternalCalendarProps, InternalCalendarRef } from "./types"; @@ -7,13 +7,9 @@ const Component = ( props: InternalCalendarProps, ref: React.ForwardedRef ) => { - const calendarRef = useRef(); - - useImperativeHandle(ref, () => calendarRef.current); - return ( - + ); }; From f90961fbacbdd96baf5f7de4e3d0f4ce1d619dce Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Mon, 22 Apr 2024 23:28:29 +0800 Subject: [PATCH 0077/1949] [CCUBE-1232][KT] Add documentation for alert prop --- src/uneditable-section/types.ts | 1 + stories/uneditable-section/props-table.tsx | 20 ++++++++++++++++++- .../uneditable-section/uneditable-section.mdx | 5 +++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/uneditable-section/types.ts b/src/uneditable-section/types.ts index 9dc02e687..9bcba4a05 100644 --- a/src/uneditable-section/types.ts +++ b/src/uneditable-section/types.ts @@ -28,6 +28,7 @@ export interface UneditableSectionItemProps extends MaskAttributeProps { maskLoadingState?: UneditableSectionItemMaskLoadingState | undefined; /** If specified, one is unable to mask or unmask the value */ disableMaskUnmask?: boolean | undefined; + /** If specified, an Alert will be rendered below the item */ alert?: AlertProps | undefined; } diff --git a/stories/uneditable-section/props-table.tsx b/stories/uneditable-section/props-table.tsx index 41bc9fb25..b613e73c6 100644 --- a/stories/uneditable-section/props-table.tsx +++ b/stories/uneditable-section/props-table.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { ApiTable } from "../storybook-common/api-table"; +import { ApiTable, code } from "../storybook-common/api-table"; import { ApiTableSectionProps } from "../storybook-common/api-table/types"; import { TabAttribute, Tabs } from "../storybook-common/tabs"; @@ -72,6 +72,24 @@ const MAIN_DATA: ApiTableSectionProps[] = [ propTypes: ["boolean"], defaultValue: "true", }, + { + name: "alert", + description: ( + <> + Specifies if an {code("Alert")} should be rendered under + the section item + + ), + propTypes: ( + + AlertProps + + ), + }, { name: "onMask", description: "Called when the mask icon is clicked", diff --git a/stories/uneditable-section/uneditable-section.mdx b/stories/uneditable-section/uneditable-section.mdx index de7c46cad..efef3247c 100644 --- a/stories/uneditable-section/uneditable-section.mdx +++ b/stories/uneditable-section/uneditable-section.mdx @@ -50,6 +50,11 @@ try again. +With alert display + +Sometimes you might have some extra information which you would like to inform users of. +As such you can make use of the `Alert` to render those information. + With custom content From b722df6118ef238c455c1fcabb4a7e9224a04607 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 22 Apr 2024 23:38:53 +0800 Subject: [PATCH 0078/1949] [CCUBE-1232][RL] Move prop documentation to correct section --- stories/uneditable-section/props-table.tsx | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/stories/uneditable-section/props-table.tsx b/stories/uneditable-section/props-table.tsx index b613e73c6..6ee5721c3 100644 --- a/stories/uneditable-section/props-table.tsx +++ b/stories/uneditable-section/props-table.tsx @@ -72,24 +72,6 @@ const MAIN_DATA: ApiTableSectionProps[] = [ propTypes: ["boolean"], defaultValue: "true", }, - { - name: "alert", - description: ( - <> - Specifies if an {code("Alert")} should be rendered under - the section item - - ), - propTypes: ( - - AlertProps - - ), - }, { name: "onMask", description: "Called when the mask icon is clicked", @@ -180,6 +162,24 @@ const MAIN_DATA: ApiTableSectionProps[] = [ "If specified, the value will be masked or unmasked but no indicator will be rendered", propTypes: ["boolean"], }, + { + name: "alert", + description: ( + <> + Specifies if an {code("Alert")} should be rendered under + the section item + + ), + propTypes: ( + + AlertProps + + ), + }, ], }, ]; From ddb6b1fd77e16147da87cf338e5f69b2434769ce Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Tue, 23 Apr 2024 09:52:39 +0800 Subject: [PATCH 0079/1949] [MISC][RL] Bump v2.5.0-canary.4 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e75eeb78c..a44fa1c3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.3", + "version": "2.5.0-canary.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.3", + "version": "2.5.0-canary.4", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index c1d383b19..46da7b63c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.3", + "version": "2.5.0-canary.4", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From d6f3fb43f8badbfb966a3cd3976f04d6d86f49ff Mon Sep 17 00:00:00 2001 From: Wei Li Date: Thu, 25 Apr 2024 11:45:55 +0800 Subject: [PATCH 0080/1949] [MISC][WL] set unmask button to be of button type - this prevents unintended submission of form on clicking this button --- src/uneditable-section/section-item.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/uneditable-section/section-item.tsx b/src/uneditable-section/section-item.tsx index c5bb8e4ba..c3f94736a 100644 --- a/src/uneditable-section/section-item.tsx +++ b/src/uneditable-section/section-item.tsx @@ -150,6 +150,7 @@ export const UneditableSectionItem = ({ onClick={handleClickableClick} aria-busy={maskLoadingState === "loading"} aria-live="polite" + type="button" > {renderMaskingState()} From 6ed1fef729e5ebea39027bd99bf5b7b62a06f06e Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 29 Apr 2024 18:10:10 +0800 Subject: [PATCH 0081/1949] [MISC][RL] Bump v2.5.0-canary.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a44fa1c3d..11bf45539 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.4", + "version": "2.5.0-canary.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.4", + "version": "2.5.0-canary.5", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index 46da7b63c..b10eb702b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.4", + "version": "2.5.0-canary.5", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 12fcc702b80a6a41bcff4eecc6f7668137e9f115 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Mon, 29 Apr 2024 18:40:16 +0800 Subject: [PATCH 0082/1949] [RBS-1266][DS] modified NotificationBanner component to be clickable and prevent propagation to children --- .../notification-banner.styles.tsx | 16 ++++-- .../notification-banner.tsx | 55 +++++-------------- 2 files changed, 25 insertions(+), 46 deletions(-) diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index e402640ba..3ca5b0059 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -12,10 +12,10 @@ import { Transition } from "../transition"; // ============================================================================= interface WrapperStyleProps { $sticky: boolean; + $onClickEnabled: boolean; } interface TextContentProps { - $showMore: boolean; $maxNoOfLines?: number; } @@ -48,6 +48,7 @@ export const Wrapper = styled.div` transition: ${Transition.Base}; background: ${Color.Neutral[2]}; z-index: 25; + cursor: ${(props) => (props.$onClickEnabled ? "pointer" : "default")}; `; export const Container = styled(Layout.Content)` @@ -104,7 +105,7 @@ export const TextWrapperContainer = styled.div` ${(props) => { const gradient = "linear-gradient(to bottom, black 50%, transparent 100%)"; - if (!props.$showMore && props.$maxNoOfLines) + if (props.$maxNoOfLines) return ` display: -webkit-box; -webkit-line-clamp: ${props.$maxNoOfLines}; @@ -118,9 +119,12 @@ export const TextWrapperContainer = styled.div` }} `; -export const ViewMoreButton = styled(Text.BodySmall)` - cursor: pointer; +export const ViewMoreWrapper = styled.div` + display: flex; + align-items: center; + column-gap: 0.25rem; +`; +export const ViewMoreText = styled(Text.BodySmall)` margin-top: 0.5rem; - color: ${Color.Primary}; - user-select: none; + color: ${Color.Validation.Orange.Icon}; `; diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index d3a9881ab..182b54b98 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -7,13 +7,15 @@ import { StyledIconButton, TextContainer, TextWrapperContainer, - ViewMoreButton, + ViewMoreText, + ViewMoreWrapper, Wrapper, } from "./notification-banner.styles"; import { NotificationBannerProps, NotificationBannerWithForwardedRefProps, } from "./types"; +import { ArrowRightIcon } from "@lifesg/react-icons"; export const NBComponent = ({ children, @@ -33,9 +35,6 @@ export const NBComponent = ({ const testId = otherProps["data-testid"]; const [isVisible, setVisible] = useState(visible); - const [isViewMore, setIsViewMore] = useState(false); - const contentContainerHeightRef = useRef(null); - const [displayShowMore, setDisplayShowMore] = useState(false); // ============================================================================= // EFFECTS @@ -44,25 +43,6 @@ export const NBComponent = ({ setVisible(visible); }, [visible]); - // ============================================================================= - // EVENT HANDLERS - // ============================================================================= - - useEffect(() => { - // forces line-clamp to trigger so that we can determine if content is collapsible - setIsViewMore(!maxLines); - setDisplayShowMore(!!maxLines); - if (!maxLines || !contentContainerHeightRef.current) return; - - // calculate whether to show more after line-clamp is triggered - const clientHeight = contentContainerHeightRef.current.clientHeight; - const scrollHeight = contentContainerHeightRef.current.scrollHeight; - - // Note: when using DS Text.H3 or Text.H1, the calculated scrollHeight and clientHeight differs by 1 without any overflow - - setDisplayShowMore(scrollHeight - clientHeight > 1); - }, [children]); - // ============================================================================= // EVENT HANDLERS // ============================================================================= @@ -81,7 +61,10 @@ export const NBComponent = ({ ) => { + $onClickEnabled={!!onClick} + onClickCapture={(event: React.MouseEvent) => { + if (!onClick) return; + event.preventDefault(); event.stopPropagation(); onClick(); }} @@ -90,24 +73,16 @@ export const NBComponent = ({ - + {children} - {maxLines !== undefined && displayShowMore && ( - - ) => { - event.stopPropagation(); - setIsViewMore(!isViewMore); - }} - > - {isViewMore ? "View less" : "View more"} - + {maxLines !== undefined && ( + + + View more + + + )} From 48da2506e3f325e4b1c2656593af239e8ac4d7fd Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 2 May 2024 14:46:35 +0800 Subject: [PATCH 0083/1949] [CCUBE-1289][KT] Fix icon shrinking if button content requires more space --- .../button-with-icon.style.tsx | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/button-with-icon/button-with-icon.style.tsx b/src/button-with-icon/button-with-icon.style.tsx index 415f964ec..96ff647d4 100644 --- a/src/button-with-icon/button-with-icon.style.tsx +++ b/src/button-with-icon/button-with-icon.style.tsx @@ -1,4 +1,4 @@ -import styled from "styled-components"; +import styled, { css } from "styled-components"; import { Main } from "../button/button.style"; import { MainStyleProps } from "../button/types"; import { ButtonIconPosition } from "./types"; @@ -17,4 +17,27 @@ export const MainButtonWithIcon = styled(Main)` flex-direction: ${(props) => props.$buttonIconPosition === "right" ? "row-reverse" : "row"}; gap: 0.5rem; + + svg { + flex-shrink: 0; + } + + ${(props) => { + switch (props.$buttonSizeStyle) { + case "small": + return css` + svg { + height: 1rem; + width: 1rem; + } + `; + default: + return css` + svg { + height: 1.125rem; + width: 1.125rem; + } + `; + } + }} `; From 1d10a3dab422e3a4fa87a2cbafef1d37237f1bd5 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Thu, 2 May 2024 14:53:05 +0800 Subject: [PATCH 0084/1949] [RBS-1265][DS] updated transparency for maxLines fade and some comments --- src/alert/alert.style.tsx | 11 +++++------ src/alert/alert.tsx | 2 +- src/alert/types.ts | 2 ++ stories/alert/alert.mdx | 2 +- stories/alert/alert.stories.tsx | 4 ++-- stories/alert/props-table.tsx | 8 ++++++++ 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index b42dfff48..4aab6f3b4 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -14,7 +14,7 @@ interface StyleProps { } export interface TextContentProps { $showMore: boolean; - $maxNoOfLines?: number; + $maxLines?: number; } // ============================================================================= @@ -155,15 +155,14 @@ export const TextContainer = styled.div` export const TextWrapperContainer = styled.div` ${(props) => { const gradient = - "linear-gradient(to bottom, black 50%, transparent 100%)"; - if (!props.$showMore && props.$maxNoOfLines) + "linear-gradient(to bottom, black 50%, transparent 110%)"; + if (!props.$showMore && props.$maxLines) return ` display: -webkit-box; - -webkit-line-clamp: ${props.$maxNoOfLines}; - line-clamp: ${props.$maxNoOfLines}; + -webkit-line-clamp: ${props.$maxLines}; + line-clamp: ${props.$maxLines}; -webkit-box-orient: vertical; overflow: hidden; - -webkit-mask-image: ${gradient}; mask-image: ${gradient}; `; diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index 7c59eb508..0c71c3a37 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -106,7 +106,7 @@ export const Alert = ({ {children} diff --git a/src/alert/types.ts b/src/alert/types.ts index 0dcc36ff5..06fccb311 100644 --- a/src/alert/types.ts +++ b/src/alert/types.ts @@ -14,6 +14,8 @@ export interface AlertProps extends React.HTMLAttributes { showIcon?: boolean | undefined; actionLinkIcon?: JSX.Element | undefined; sizeType?: AlertSizeType | undefined; + /** Custom alert icon to be rendered, replacing the default alert icons */ customAlertIcon?: JSX.Element | undefined; + /** Specifies the maximum number of lines to be displayed outside of the collapsible zone */ maxLines?: number | undefined; } diff --git a/stories/alert/alert.mdx b/stories/alert/alert.mdx index 2dfe3d0db..29e5f27d6 100644 --- a/stories/alert/alert.mdx +++ b/stories/alert/alert.mdx @@ -43,7 +43,7 @@ Or if you require a custom display, you can construct your layout and pass it in -With max lines +With maximum lines diff --git a/stories/alert/alert.stories.tsx b/stories/alert/alert.stories.tsx index 3fbe5c3fe..679bf65d9 100644 --- a/stories/alert/alert.stories.tsx +++ b/stories/alert/alert.stories.tsx @@ -235,8 +235,8 @@ export const WithMaxLines: StoryObj = { return ( <> - An alert box with a limit to the max amount of lines to be - rendered, with a text button to expand the box. Lorem ipsum + An alert box with a limit to the maximum amount of lines to + render, with a text button to expand the box. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque lacinia auctor tellus, eget tempor diam finibus vel. Integer non enim vehicula, malesuada lectus a, lobortis magna. diff --git a/stories/alert/props-table.tsx b/stories/alert/props-table.tsx index a8f41f24e..c929c634f 100644 --- a/stories/alert/props-table.tsx +++ b/stories/alert/props-table.tsx @@ -77,5 +77,13 @@ export const PropsTable = () => ( + + maxLines + + Specifies the maximum number of lines to be displayed outside of + the collapsible zone + + + ); From fbc928a0d6a4a1881f98b582ab10b240c406da9a Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Thu, 2 May 2024 15:01:20 +0800 Subject: [PATCH 0085/1949] [RBS-1265][DS] added chevron icon for show more/less --- src/alert/alert.style.tsx | 3 +++ src/alert/alert.tsx | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index 4aab6f3b4..dbafd5dad 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -174,4 +174,7 @@ export const ShowMoreButton = styled(Text.BodySmall)` margin-top: 0.5rem; color: ${Color.Primary}; user-select: none; + display: flex; + align-items: center; + gap: 0.25rem; `; diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index 0c71c3a37..2e4830cd5 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -13,6 +13,7 @@ import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circl import { ICircleFillIcon } from "@lifesg/react-icons/i-circle-fill"; import { ArrowRightIcon } from "@lifesg/react-icons/arrow-right"; import { useEffect, useRef, useState } from "react"; +import { ChevronDownIcon, ChevronUpIcon } from "@lifesg/react-icons"; export const Alert = ({ type, @@ -116,7 +117,17 @@ export const Alert = ({ weight="semibold" onClick={() => setIsShowMore(!isShowMore)} > - {isShowMore ? "Show less" : "Show more"} + {isShowMore ? ( + <> + Show less + + + ) : ( + <> + Show more + + + )} )} {actionLink && renderLink()} From 682d8bb96874286f7ae99145de9d17423c334f2d Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 2 May 2024 15:32:42 +0800 Subject: [PATCH 0086/1949] [KT] Bump 2.5.0-canary.6 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 11bf45539..92f13516d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.5", + "version": "2.5.0-canary.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.5", + "version": "2.5.0-canary.6", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index b10eb702b..8a561da7a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.5", + "version": "2.5.0-canary.6", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 1c5f889507d4f25c4372206fea760ea80669d744 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Thu, 2 May 2024 15:45:46 +0800 Subject: [PATCH 0087/1949] [KT] bump 2.5.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 11bf45539..3cc3f0453 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.5", + "version": "2.5.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.5", + "version": "2.5.0", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index b10eb702b..6c678d826 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0-canary.5", + "version": "2.5.0", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 733ad65e75193a7a5b706857e3971636f237488d Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Thu, 2 May 2024 17:14:09 +0800 Subject: [PATCH 0088/1949] [RBS-1265][DS] modified alert to take in maxHeight in px instead of maxLines --- src/alert/alert.style.tsx | 11 ++---- src/alert/alert.tsx | 12 +++--- src/alert/types.ts | 5 ++- stories/alert/alert.mdx | 4 +- stories/alert/alert.stories.tsx | 70 +++++++++++++++++++++++++++------ stories/alert/props-table.tsx | 6 +-- 6 files changed, 75 insertions(+), 33 deletions(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index dbafd5dad..192afadc5 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -14,7 +14,7 @@ interface StyleProps { } export interface TextContentProps { $showMore: boolean; - $maxLines?: number; + $maxHeight?: number; } // ============================================================================= @@ -155,13 +155,10 @@ export const TextContainer = styled.div` export const TextWrapperContainer = styled.div` ${(props) => { const gradient = - "linear-gradient(to bottom, black 50%, transparent 110%)"; - if (!props.$showMore && props.$maxLines) + "linear-gradient(to bottom, black 50%, transparent 100%)"; + if (!props.$showMore && props.$maxHeight) return ` - display: -webkit-box; - -webkit-line-clamp: ${props.$maxLines}; - line-clamp: ${props.$maxLines}; - -webkit-box-orient: vertical; + height: ${props.$maxHeight}px; overflow: hidden; -webkit-mask-image: ${gradient}; mask-image: ${gradient}; diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index 2e4830cd5..1669dbab8 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -24,7 +24,7 @@ export const Alert = ({ sizeType = "default", showIcon = false, customAlertIcon, - maxLines, + maxHeight, ...otherProps }: AlertProps): JSX.Element => { const [isShowMore, setIsShowMore] = useState(false); @@ -37,9 +37,9 @@ export const Alert = ({ useEffect(() => { // forces line-clamp to trigger so that we can determine if content is collapsible - setIsShowMore(!maxLines); - setDisplayShowMore(!!maxLines); - if (!maxLines || !contentContainerHeightRef.current) return; + setIsShowMore(!maxHeight); + setDisplayShowMore(!!maxHeight); + if (!maxHeight || !contentContainerHeightRef.current) return; // calculate whether to show more after line-clamp is triggered const clientHeight = contentContainerHeightRef.current.clientHeight; @@ -107,12 +107,12 @@ export const Alert = ({ {children} - {maxLines !== undefined && displayShowMore && ( + {maxHeight !== undefined && displayShowMore && ( setIsShowMore(!isShowMore)} diff --git a/src/alert/types.ts b/src/alert/types.ts index 06fccb311..951836877 100644 --- a/src/alert/types.ts +++ b/src/alert/types.ts @@ -16,6 +16,7 @@ export interface AlertProps extends React.HTMLAttributes { sizeType?: AlertSizeType | undefined; /** Custom alert icon to be rendered, replacing the default alert icons */ customAlertIcon?: JSX.Element | undefined; - /** Specifies the maximum number of lines to be displayed outside of the collapsible zone */ - maxLines?: number | undefined; + /** Specifies the maximum height of the element to be + * displayed outside of the collapsible zone, in px */ + maxHeight?: number | undefined; } diff --git a/stories/alert/alert.mdx b/stories/alert/alert.mdx index 29e5f27d6..32e9cbf2e 100644 --- a/stories/alert/alert.mdx +++ b/stories/alert/alert.mdx @@ -43,9 +43,9 @@ Or if you require a custom display, you can construct your layout and pass it in -With maximum lines +With maximum height - + Component API diff --git a/stories/alert/alert.stories.tsx b/stories/alert/alert.stories.tsx index 679bf65d9..4cf9f402a 100644 --- a/stories/alert/alert.stories.tsx +++ b/stories/alert/alert.stories.tsx @@ -230,22 +230,66 @@ export const WithCustomIcon: StoryObj = { }, }; -export const WithMaxLines: StoryObj = { +export const WithMaxHeight: StoryObj = { render: () => { return ( <> - - An alert box with a limit to the maximum amount of lines to - render, with a text button to expand the box. Lorem ipsum - dolor sit amet, consectetur adipiscing elit. Pellentesque - lacinia auctor tellus, eget tempor diam finibus vel. Integer - non enim vehicula, malesuada lectus a, lobortis magna. - Aliquam in sodales enim. Ut id condimentum magna. Ut aliquet - tincidunt nunc eu cursus. Vestibulum id maximus nulla. - Phasellus lacinia risus neque, eget tincidunt dui maximus - sed. Morbi eu vestibulum massa. Suspendisse potenti. Donec - faucibus condimentum nibh, non tempus augue bibendum non. - Cras in mattis ex. + + An alert box with a maximum height of content to render, + outside the collapsible zone with a text button to expand + it. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Pellentesque lacinia auctor tellus, eget tempor diam finibus + vel. Integer non enim vehicula, malesuada lectus a, lobortis + magna. Aliquam in sodales enim. Ut id condimentum magna. Ut + aliquet tincidunt nunc eu cursus. Vestibulum id maximus + nulla. Phasellus lacinia risus neque, eget tincidunt dui + maximus sed. Morbi eu vestibulum massa. Suspendisse potenti. + Donec faucibus condimentum nibh, non tempus augue bibendum + non. Cras in mattis ex. + +
+ +
    + Custom content +
  • + First +
  • +
  • + Second +
  • +
  • + Third +
  • +

diff --git a/stories/alert/props-table.tsx b/stories/alert/props-table.tsx index c929c634f..d5091fa1a 100644 --- a/stories/alert/props-table.tsx +++ b/stories/alert/props-table.tsx @@ -78,10 +78,10 @@ export const PropsTable = () => ( - maxLines + maxHeight - Specifies the maximum number of lines to be displayed outside of - the collapsible zone + Specifies the maximum height of the content to be displayed + outside of the collapsible zone From 05e77bf325913855c825bbc259bfa0b85898bc28 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Thu, 2 May 2024 17:34:55 +0800 Subject: [PATCH 0089/1949] [RBS-1265][DS] minor change in wording for props-table --- stories/alert/props-table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/alert/props-table.tsx b/stories/alert/props-table.tsx index d5091fa1a..7c39dd89f 100644 --- a/stories/alert/props-table.tsx +++ b/stories/alert/props-table.tsx @@ -81,7 +81,7 @@ export const PropsTable = () => ( maxHeight Specifies the maximum height of the content to be displayed - outside of the collapsible zone + outside of the collapsible zone, in px From e61d2739b3fe51cbc820d7363ff90f7d40a56ff0 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Fri, 3 May 2024 16:52:50 +0800 Subject: [PATCH 0090/1949] [RBS-1265][DS] updated props-table and maxHeight to collapsedHeight for clarity --- src/alert/alert.style.tsx | 13 +-- src/alert/alert.tsx | 83 ++++++++-------- src/alert/types.ts | 10 +- stories/alert/alert.mdx | 8 +- stories/alert/alert.stories.tsx | 10 +- stories/alert/props-table.tsx | 161 ++++++++++++++++---------------- tests/alert/alert.spec.tsx | 8 +- 7 files changed, 149 insertions(+), 144 deletions(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index 192afadc5..da0bbfa4f 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -12,9 +12,9 @@ interface StyleProps { $type: AlertType; $sizeType: AlertSizeType; } -export interface TextContentProps { +export interface TextWrapperContainerStyleProps { $showMore: boolean; - $maxHeight?: number; + $collapsedHeight?: number; } // ============================================================================= @@ -152,13 +152,13 @@ export const TextContainer = styled.div` * max-height: text-line-height * maximum number of lines */ -export const TextWrapperContainer = styled.div` +export const TextWrapperContainer = styled.div` ${(props) => { const gradient = "linear-gradient(to bottom, black 50%, transparent 100%)"; - if (!props.$showMore && props.$maxHeight) + if (!props.$showMore && props.$collapsedHeight) return ` - height: ${props.$maxHeight}px; + height: ${props.$collapsedHeight}px; overflow: hidden; -webkit-mask-image: ${gradient}; mask-image: ${gradient}; @@ -166,11 +166,12 @@ export const TextWrapperContainer = styled.div` }} `; -export const ShowMoreButton = styled(Text.BodySmall)` +export const ShowMoreButton = styled.div` cursor: pointer; margin-top: 0.5rem; color: ${Color.Primary}; user-select: none; + ${TextStyleHelper.getTextStyle("BodySmall", "semibold")} display: flex; align-items: center; gap: 0.25rem; diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index 1669dbab8..f53155816 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -1,4 +1,11 @@ -import { AlertProps } from "./types"; +import { ArrowRightIcon } from "@lifesg/react-icons/arrow-right"; +import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; +import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; +import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circle-fill"; +import { ExclamationTriangleFillIcon } from "@lifesg/react-icons/exclamation-triangle-fill"; +import { ICircleFillIcon } from "@lifesg/react-icons/i-circle-fill"; +import { TickCircleFillIcon } from "@lifesg/react-icons/tick-circle-fill"; +import { useEffect, useRef, useState } from "react"; import { ActionLinkText, AlertIconWrapper, @@ -7,13 +14,7 @@ import { TextWrapperContainer, Wrapper, } from "./alert.style"; -import { TickCircleFillIcon } from "@lifesg/react-icons/tick-circle-fill"; -import { ExclamationTriangleFillIcon } from "@lifesg/react-icons/exclamation-triangle-fill"; -import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circle-fill"; -import { ICircleFillIcon } from "@lifesg/react-icons/i-circle-fill"; -import { ArrowRightIcon } from "@lifesg/react-icons/arrow-right"; -import { useEffect, useRef, useState } from "react"; -import { ChevronDownIcon, ChevronUpIcon } from "@lifesg/react-icons"; +import { AlertProps } from "./types"; export const Alert = ({ type, @@ -23,23 +24,27 @@ export const Alert = ({ actionLinkIcon, sizeType = "default", showIcon = false, - customAlertIcon, - maxHeight, + customIcon, + collapsedHeight, ...otherProps }: AlertProps): JSX.Element => { - const [isShowMore, setIsShowMore] = useState(false); + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const [showHiddenContent, setShowHiddenContent] = useState(false); const contentContainerHeightRef = useRef(null); - const [displayShowMore, setDisplayShowMore] = useState(false); + const [renderShowMore, setRenderShowMore] = useState(false); // ============================================================================= - // EVENT HANDLERS + // EFFECTS // ============================================================================= useEffect(() => { + console.log("test"); // forces line-clamp to trigger so that we can determine if content is collapsible - setIsShowMore(!maxHeight); - setDisplayShowMore(!!maxHeight); - if (!maxHeight || !contentContainerHeightRef.current) return; + setShowHiddenContent(!collapsedHeight); + setRenderShowMore(!!collapsedHeight); + if (!collapsedHeight || !contentContainerHeightRef.current) return; // calculate whether to show more after line-clamp is triggered const clientHeight = contentContainerHeightRef.current.clientHeight; @@ -47,12 +52,31 @@ export const Alert = ({ // Note: when using DS Text.H3 or Text.H1, the calculated scrollHeight and clientHeight differs by 1 without any overflow - setDisplayShowMore(scrollHeight - clientHeight > 1); + setRenderShowMore(scrollHeight - clientHeight > 1); }, [children]); // ============================================================================= // RENDER FUNCTIONS // ============================================================================= + + const renderShowMoreButton = () => ( + setShowHiddenContent(!showHiddenContent)} + > + {showHiddenContent ? ( + <> + Show less + + + ) : ( + <> + Show more + + + )} + + ); + const renderLinkType = () => { if (actionLinkIcon) { return actionLinkIcon; @@ -75,7 +99,7 @@ export const Alert = ({ }; const renderIcon = () => { - if (type && customAlertIcon) return customAlertIcon; + if (type && customIcon) return customIcon; switch (type) { case "success": return ; @@ -107,29 +131,12 @@ export const Alert = ({ {children} - {maxHeight !== undefined && displayShowMore && ( - setIsShowMore(!isShowMore)} - > - {isShowMore ? ( - <> - Show less - - - ) : ( - <> - Show more - - - )} - - )} + {renderShowMore && renderShowMoreButton()} {actionLink && renderLink()}
diff --git a/src/alert/types.ts b/src/alert/types.ts index 951836877..c9eb4ce7c 100644 --- a/src/alert/types.ts +++ b/src/alert/types.ts @@ -15,8 +15,10 @@ export interface AlertProps extends React.HTMLAttributes { actionLinkIcon?: JSX.Element | undefined; sizeType?: AlertSizeType | undefined; /** Custom alert icon to be rendered, replacing the default alert icons */ - customAlertIcon?: JSX.Element | undefined; - /** Specifies the maximum height of the element to be - * displayed outside of the collapsible zone, in px */ - maxHeight?: number | undefined; + customIcon?: JSX.Element | undefined; + /** + * Specifies the maximum height of the element to be + * displayed outside of the collapsible zone, in px + */ + collapsedHeight?: number | undefined; } diff --git a/stories/alert/alert.mdx b/stories/alert/alert.mdx index 32e9cbf2e..e327b1405 100644 --- a/stories/alert/alert.mdx +++ b/stories/alert/alert.mdx @@ -43,12 +43,12 @@ Or if you require a custom display, you can construct your layout and pass it in -With maximum height +With maximum height setting +You can restrict the height of the `Alert` by setting the `collapsedHeight` to a +desired value in px. - + Component API -This component also inherits the [HTMLDivAttributes](https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement) - diff --git a/stories/alert/alert.stories.tsx b/stories/alert/alert.stories.tsx index 4cf9f402a..ecf373bed 100644 --- a/stories/alert/alert.stories.tsx +++ b/stories/alert/alert.stories.tsx @@ -219,10 +219,10 @@ export const WithCustomIcon: StoryObj = { } + customIcon={} > An alert box with a custom icon that can be passed in using - customAlertIcon. + customIcon.
@@ -230,11 +230,11 @@ export const WithCustomIcon: StoryObj = { }, }; -export const WithMaxHeight: StoryObj = { +export const WithCollapsedHeight: StoryObj = { render: () => { return ( <> - + An alert box with a maximum height of content to render, outside the collapsible zone with a text button to expand it. Lorem ipsum dolor sit amet, consectetur adipiscing elit. @@ -248,7 +248,7 @@ export const WithMaxHeight: StoryObj = { non. Cras in mattis ex.
- +
    ( - - - type - + This component also inherits props from  + + HTMLDivAttributes + + + ), + }, + { + name: "type", + mandatory: true, + description: "Indicates the style type of the component ", + propTypes: [ `"warning"`, `"error"`, `"success"`, `"info"`, `"description"`, - ]} - > - The style of the component - - - - - actionLink - - HTMLAnchorAttributes - - } - > - The attributes of an action link that performs an action on - click - - - - - sizeType - - Specifies the size of the component - - {`"default"`} - - - showIcon - - Specifies if the icon will be displayed - - false - - - actionLinkIcon - - Specifies a custom icon for the action link - - - <> -
    - {``} -
    - - -
    - - - customAlertIcon - - Specifies a custom replacement icon for the alert - - - - - maxHeight - - Specifies the maximum height of the content to be displayed - outside of the collapsible zone, in px - - - -
    -); + ], + }, + { + name: "actionLink", + description: "The attributes of an action link that performs an action on click", + propTypes: ( + HTMLAnchorAttributes + ), + }, + { + name: "sizeType", + description: "Specifies the size of the component", + propTypes: [`"default"`, `"small"`], + defaultValue: `"default"`, + }, + { + name: "showIcon", + description: "Specifies if the icon will be displayed", + propTypes: ["boolean"], + defaultValue: `false`, + }, + { + name: "actionLinkIcon", + description: "Specifies a custom icon for the action link", + propTypes: ["JSX.Element"], + defaultValue: ( + <> +
    + {``} +
    + + + ), + }, + { + name: "customIcon", + description: "Specifies a custom replacement icon for the alert", + propTypes: ["JSX.Element"], + + }, + { + name: "collapsedHeight", + description: "Specifies the maximum height of the content to be displayed outside of the collapsible zone, in px", + propTypes: ["number"], + }, + ], + }, +]; +export const PropsTable = () => ; diff --git a/tests/alert/alert.spec.tsx b/tests/alert/alert.spec.tsx index e9198abbd..a3bf8aa46 100644 --- a/tests/alert/alert.spec.tsx +++ b/tests/alert/alert.spec.tsx @@ -74,13 +74,13 @@ describe("Alert", () => { }); }); - describe("customAlertIcon", () => { - it("should render if the prop is provided", () => { + describe("customIcon", () => { + it("should render a custom icon if specified", () => { render( } + customIcon={} > {DEFAULT_TEXT} @@ -89,7 +89,7 @@ describe("Alert", () => { expect(getCustomIcon()).toBeInTheDocument(); }); - it("should not render if the prop is not provided", () => { + it("should not render a custom icon by default", () => { render(); expect(getCustomIcon()).not.toBeInTheDocument(); From ddc0230f6de0fce47b1e387524aefbb5d18792ff Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Sat, 4 May 2024 15:04:18 +0800 Subject: [PATCH 0091/1949] [RBS-1265][DS] added rotating animation for chevron --- src/alert/alert.style.tsx | 25 ++++++++++++++-------- src/alert/alert.tsx | 45 +++++++++++++-------------------------- 2 files changed, 31 insertions(+), 39 deletions(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index da0bbfa4f..4935703e5 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -3,6 +3,7 @@ import { Color } from "../color/color"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; import { Text, TextStyleHelper } from "../text"; import { AlertSizeType, AlertType } from "./types"; +import { ChevronUpIcon } from "@lifesg/react-icons"; // ============================================================================= // STYLE INTERFACES, transient props are denoted with $ @@ -17,6 +18,9 @@ export interface TextWrapperContainerStyleProps { $collapsedHeight?: number; } +export interface ShowMoreIconStyleProps { + $expanded: boolean; +} // ============================================================================= // STYLING // ============================================================================= @@ -147,10 +151,6 @@ export const TextContainer = styled.div` flex: 1; overflow-wrap: anywhere; `; -/* - * Height is calculated based on text line height - * max-height: text-line-height * maximum number of lines - */ export const TextWrapperContainer = styled.div` ${(props) => { @@ -167,12 +167,19 @@ export const TextWrapperContainer = styled.div` `; export const ShowMoreButton = styled.div` - cursor: pointer; - margin-top: 0.5rem; - color: ${Color.Primary}; - user-select: none; - ${TextStyleHelper.getTextStyle("BodySmall", "semibold")} display: flex; align-items: center; gap: 0.25rem; + margin-top: 0.5rem; + + cursor: pointer; + user-select: none; + + color: ${Color.Primary}; + ${TextStyleHelper.getTextStyle("BodySmall", "semibold")} +`; + +export const ChevronIcon = styled(ChevronUpIcon)` + transform: rotate(${(props) => (props.$expanded ? 180 : 0)}deg); + transition: transform 300ms ease-in-out; `; diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index f53155816..a20723453 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -1,20 +1,21 @@ import { ArrowRightIcon } from "@lifesg/react-icons/arrow-right"; -import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; -import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circle-fill"; import { ExclamationTriangleFillIcon } from "@lifesg/react-icons/exclamation-triangle-fill"; import { ICircleFillIcon } from "@lifesg/react-icons/i-circle-fill"; import { TickCircleFillIcon } from "@lifesg/react-icons/tick-circle-fill"; -import { useEffect, useRef, useState } from "react"; +import { useEffect, useState } from "react"; import { ActionLinkText, AlertIconWrapper, + ChevronIcon, ShowMoreButton, TextContainer, TextWrapperContainer, Wrapper, } from "./alert.style"; import { AlertProps } from "./types"; +import { useResizeDetector } from "react-resize-detector"; +import { isNil } from "lodash"; export const Alert = ({ type, @@ -31,29 +32,22 @@ export const Alert = ({ // ============================================================================= // CONST, STATE, REF // ============================================================================= - const [showHiddenContent, setShowHiddenContent] = useState(false); - const contentContainerHeightRef = useRef(null); - const [renderShowMore, setRenderShowMore] = useState(false); + const [showHiddenContent, setShowHiddenContent] = useState( + isNil(collapsedHeight) + ); + const [renderShowMore, setRenderShowMore] = useState( + !isNil(collapsedHeight) + ); + const contentResizeDetector = useResizeDetector(); // ============================================================================= // EFFECTS // ============================================================================= useEffect(() => { - console.log("test"); - // forces line-clamp to trigger so that we can determine if content is collapsible setShowHiddenContent(!collapsedHeight); setRenderShowMore(!!collapsedHeight); - if (!collapsedHeight || !contentContainerHeightRef.current) return; - - // calculate whether to show more after line-clamp is triggered - const clientHeight = contentContainerHeightRef.current.clientHeight; - const scrollHeight = contentContainerHeightRef.current.scrollHeight; - - // Note: when using DS Text.H3 or Text.H1, the calculated scrollHeight and clientHeight differs by 1 without any overflow - - setRenderShowMore(scrollHeight - clientHeight > 1); - }, [children]); + }, [collapsedHeight]); // ============================================================================= // RENDER FUNCTIONS @@ -63,17 +57,8 @@ export const Alert = ({ setShowHiddenContent(!showHiddenContent)} > - {showHiddenContent ? ( - <> - Show less - - - ) : ( - <> - Show more - - - )} + Show {showHiddenContent ? "less" : "more"} + ); @@ -130,7 +115,7 @@ export const Alert = ({ )} From 65557e33bc871ecef9088c9d7d99f7cefa4e22e1 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Sat, 4 May 2024 15:19:10 +0800 Subject: [PATCH 0092/1949] [RBS-1265][DS] moved effect into helper --- src/alert/alert.tsx | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index a20723453..0988de984 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -32,12 +32,8 @@ export const Alert = ({ // ============================================================================= // CONST, STATE, REF // ============================================================================= - const [showHiddenContent, setShowHiddenContent] = useState( - isNil(collapsedHeight) - ); - const [renderShowMore, setRenderShowMore] = useState( - !isNil(collapsedHeight) - ); + const [showHiddenContent, setShowHiddenContent] = useState(false); + const [renderShowMore, setRenderShowMore] = useState(false); const contentResizeDetector = useResizeDetector(); // ============================================================================= @@ -45,10 +41,18 @@ export const Alert = ({ // ============================================================================= useEffect(() => { - setShowHiddenContent(!collapsedHeight); - setRenderShowMore(!!collapsedHeight); + setInitialCollapsedState(); }, [collapsedHeight]); + // ============================================================================= + // HELPERS + // ============================================================================= + + const setInitialCollapsedState = () => { + setShowHiddenContent(isNil(collapsedHeight)); + setRenderShowMore(!isNil(collapsedHeight)); + }; + // ============================================================================= // RENDER FUNCTIONS // ============================================================================= From fc47762bcd81edb0fbd8ad0e37a21656af852a4e Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Mon, 6 May 2024 15:57:25 +0800 Subject: [PATCH 0093/1949] [RBS-1265][DS] fixed failing test in gitlab for alert --- tests/alert/alert.spec.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/alert/alert.spec.tsx b/tests/alert/alert.spec.tsx index a3bf8aa46..c7da57d94 100644 --- a/tests/alert/alert.spec.tsx +++ b/tests/alert/alert.spec.tsx @@ -7,8 +7,14 @@ import { StarIcon } from "@lifesg/react-icons/star"; // UNIT TESTS // ============================================================================= describe("Alert", () => { - beforeEach(() => { + beforeEach(() => { jest.resetAllMocks(); + global.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn(), + })); + }); }); it("should render the component", () => { From 6e197cea53455c3c439d943fd26e0e93896db0bd Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Mon, 6 May 2024 15:58:52 +0800 Subject: [PATCH 0094/1949] [RBS-1265][DS] update missing brace --- tests/alert/alert.spec.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/alert/alert.spec.tsx b/tests/alert/alert.spec.tsx index c7da57d94..ad13fc807 100644 --- a/tests/alert/alert.spec.tsx +++ b/tests/alert/alert.spec.tsx @@ -7,7 +7,8 @@ import { StarIcon } from "@lifesg/react-icons/star"; // UNIT TESTS // ============================================================================= describe("Alert", () => { - beforeEach(() => { + beforeEach(() => { + jest.resetAllMocks(); global.ResizeObserver = jest.fn().mockImplementation(() => ({ observe: jest.fn(), @@ -15,7 +16,6 @@ describe("Alert", () => { disconnect: jest.fn(), })); }); - }); it("should render the component", () => { render({DEFAULT_TEXT}); From 863e594ef99e6d68b3e77f9604eda50879633979 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Mon, 6 May 2024 16:24:18 +0800 Subject: [PATCH 0095/1949] [RBS-1265][DS] fixed failing test in gitlab for uneditable-section --- tests/uneditable-section/uneditable-section.spec.tsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/uneditable-section/uneditable-section.spec.tsx b/tests/uneditable-section/uneditable-section.spec.tsx index 3d60afd95..897ef571d 100644 --- a/tests/uneditable-section/uneditable-section.spec.tsx +++ b/tests/uneditable-section/uneditable-section.spec.tsx @@ -5,6 +5,16 @@ import { } from "src/uneditable-section"; describe("UneditableSection", () => { + beforeEach(() => { + + jest.resetAllMocks(); + global.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn(), + })); + }); + it("should render the elements correctly", () => { render( Date: Mon, 6 May 2024 17:43:02 +0800 Subject: [PATCH 0096/1949] [RBS-1266][DS] cleaned up NotificationBanner component --- .../notification-banner.styles.tsx | 24 +++++++--------- .../notification-banner.tsx | 28 +++++++++++-------- src/notification-banner/types.ts | 7 ++++- .../notification-banner.mdx | 9 +++--- .../notification-banner.stories.tsx | 26 +++++++++-------- stories/notification-banner/props-table.tsx | 7 +++-- 6 files changed, 55 insertions(+), 46 deletions(-) diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 3ca5b0059..9596cd61a 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -12,11 +12,11 @@ import { Transition } from "../transition"; // ============================================================================= interface WrapperStyleProps { $sticky: boolean; - $onClickEnabled: boolean; + $clickable: boolean; } -interface TextContentProps { - $maxNoOfLines?: number; +interface TextWrapperContainerStyleProps { + $collapsedHeight?: number; } // ============================================================================= @@ -48,7 +48,7 @@ export const Wrapper = styled.div` transition: ${Transition.Base}; background: ${Color.Neutral[2]}; z-index: 25; - cursor: ${(props) => (props.$onClickEnabled ? "pointer" : "default")}; + cursor: ${(props) => (props.$clickable ? "pointer" : "default")}; `; export const Container = styled(Layout.Content)` @@ -101,21 +101,17 @@ export const StyledIcon = styled(CrossIcon)` color: ${Color.Neutral[8]}; `; -export const TextWrapperContainer = styled.div` +export const TextWrapperContainer = styled.div` ${(props) => { const gradient = "linear-gradient(to bottom, black 50%, transparent 100%)"; - if (props.$maxNoOfLines) - return ` - display: -webkit-box; - -webkit-line-clamp: ${props.$maxNoOfLines}; - line-clamp: ${props.$maxNoOfLines}; - -webkit-box-orient: vertical; - overflow: hidden; - + if (props.$collapsedHeight) + return css` + height: ${props.$collapsedHeight}px; + overflow: hidden; -webkit-mask-image: ${gradient}; mask-image: ${gradient}; - `; + `; }} `; diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index 182b54b98..c6e29ccdd 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -1,4 +1,6 @@ -import React, { useEffect, useRef, useState } from "react"; +import { ArrowRightIcon } from "@lifesg/react-icons"; +import { isNil } from "lodash"; +import React, { useEffect, useState } from "react"; import { Container, Content, @@ -15,7 +17,6 @@ import { NotificationBannerProps, NotificationBannerWithForwardedRefProps, } from "./types"; -import { ArrowRightIcon } from "@lifesg/react-icons"; export const NBComponent = ({ children, @@ -25,7 +26,7 @@ export const NBComponent = ({ onDismiss, id, forwardedRef, - maxLines, + collapsedHeight, onClick, ...otherProps }: NotificationBannerWithForwardedRefProps): JSX.Element => { @@ -52,6 +53,12 @@ export const NBComponent = ({ if (dismissible && onDismiss) onDismiss(); }; + const handleBannerClick = (event: React.MouseEvent) => { + if (!onClick) return; + event.stopPropagation(); + onClick(); + }; + // ============================================================================= // RENDER FUNCTIONS // ============================================================================= @@ -61,22 +68,19 @@ export const NBComponent = ({ ) => { - if (!onClick) return; - event.preventDefault(); - event.stopPropagation(); - onClick(); - }} + $clickable={!!onClick} + onClick={handleBannerClick} {...otherProps} > - + {children} - {maxLines !== undefined && ( + {!isNil(collapsedHeight) && ( View more diff --git a/src/notification-banner/types.ts b/src/notification-banner/types.ts index cbe1d59a5..b554f9403 100644 --- a/src/notification-banner/types.ts +++ b/src/notification-banner/types.ts @@ -8,7 +8,12 @@ export interface NotificationBannerProps sticky?: boolean | undefined; onDismiss?: (() => void) | undefined; "data-testid"?: string | undefined; - maxLines?: number | undefined; + /** + * Specifies the height to be displayed outside of + * the collapsible zone + */ + collapsedHeight?: number | undefined; + /** Called when the banner is selected */ onClick?: (() => void) | undefined; } diff --git a/stories/notification-banner/notification-banner.mdx b/stories/notification-banner/notification-banner.mdx index f5822f8a2..117d4e117 100644 --- a/stories/notification-banner/notification-banner.mdx +++ b/stories/notification-banner/notification-banner.mdx @@ -58,13 +58,12 @@ The `NotificationBanner` allows performing of an action when clicked. -Using as a Higher Order Component (HOC) - -Max lines +With collapsed height setting -The `NotificationBanner` allows a maximum number of lines to be rendered. +You can restrict the height of the `NotificationBanner` by setting the `collapsedHeight` to a +desired value in px. - + Using as a Higher Order Component (HOC) diff --git a/stories/notification-banner/notification-banner.stories.tsx b/stories/notification-banner/notification-banner.stories.tsx index 5c30ece49..e76f88073 100644 --- a/stories/notification-banner/notification-banner.stories.tsx +++ b/stories/notification-banner/notification-banner.stories.tsx @@ -3,6 +3,7 @@ import { NotificationBanner } from "src/notification-banner"; import { Text } from "src/text"; import { StyledContent } from "./doc-elements"; import { useState } from "react"; +import { GearFillIcon } from "@lifesg/react-icons"; type Component = typeof NotificationBanner; @@ -208,8 +209,11 @@ export const CustomContent: StoryObj = { background: "yellow", color: "black", padding: "1rem", + alignItems: "center", + gap: "1rem", }} > + This is my custom content
@@ -268,7 +272,7 @@ export const OnClick: StoryObj = { }, }; -export const MaxLines: StoryObj = { +export const CollapsedHeight: StoryObj = { render: () => { return (
= { maxHeight: "21rem", }} > - - This is a notification banner with maxLines set. Lorem ipsum - dolor sit amet, consectetur adipiscing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim - ad minim veniam, quis nostrud exercitation ullamco laboris - nisi ut aliquip ex ea commodo consequat. Duis aute irure - dolor in reprehenderit in voluptate velit esse cillum dolore - eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat - non proident, sunt in culpa qui officia deserunt mollit anim - id est laborum. + + This is a notification banner with collapsedHeight set. + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit + esse cillum dolore eu fugiat nulla pariatur. Excepteur sint + occaecat cupidatat non proident, sunt in culpa qui officia + deserunt mollit anim id est laborum. diff --git a/stories/notification-banner/props-table.tsx b/stories/notification-banner/props-table.tsx index fe0c25653..2feaffc7b 100644 --- a/stories/notification-banner/props-table.tsx +++ b/stories/notification-banner/props-table.tsx @@ -64,11 +64,12 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["() => void"], }, { - name: "maxLines", + name: "collapsedHeight", description: ( <> - Specifies the max number of lines to be displayed in the{" "} - NotificationBanner + Specifies the height of the{" "} + NotificationBannerto be displayed outside + of the collapsible zone ), propTypes: ["number"], From 7a13b5259b73820883bec45dc858bb5b51e74076 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Mon, 6 May 2024 17:49:35 +0800 Subject: [PATCH 0097/1949] [RBS-1266][DS] cleaned up props table auto formatting --- stories/notification-banner/props-table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/notification-banner/props-table.tsx b/stories/notification-banner/props-table.tsx index 2feaffc7b..5f4e0cd4a 100644 --- a/stories/notification-banner/props-table.tsx +++ b/stories/notification-banner/props-table.tsx @@ -67,7 +67,7 @@ const DATA: ApiTableSectionProps[] = [ name: "collapsedHeight", description: ( <> - Specifies the height of the{" "} + Specifies the height of the   NotificationBannerto be displayed outside of the collapsible zone From 223461de00782e12004a8c06607f19a6914737fa Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Mon, 6 May 2024 18:04:54 +0800 Subject: [PATCH 0098/1949] [RBS-1266][DS] moved onDismiss into an event handler function and cleaned up naming conventions --- .../notification-banner.styles.tsx | 13 +++---- .../notification-banner.tsx | 35 ++++++++----------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 9596cd61a..3c0386ed9 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -15,7 +15,7 @@ interface WrapperStyleProps { $clickable: boolean; } -interface TextWrapperContainerStyleProps { +interface ContentWrapperContainerStyleProps { $collapsedHeight?: number; } @@ -101,7 +101,7 @@ export const StyledIcon = styled(CrossIcon)` color: ${Color.Neutral[8]}; `; -export const TextWrapperContainer = styled.div` +export const ContentWrapperContainer = styled.div` ${(props) => { const gradient = "linear-gradient(to bottom, black 50%, transparent 100%)"; @@ -115,12 +115,13 @@ export const TextWrapperContainer = styled.div` }} `; -export const ViewMoreWrapper = styled.div` +export const ViewMoreButton = styled.div` display: flex; align-items: center; - column-gap: 0.25rem; -`; -export const ViewMoreText = styled(Text.BodySmall)` + gap: 0.25rem; + margin-top: 0.5rem; + color: ${Color.Validation.Orange.Icon}; + ${TextStyleHelper.getTextStyle("BodySmall", "semibold")}; `; diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index c6e29ccdd..603e983e2 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -4,13 +4,12 @@ import React, { useEffect, useState } from "react"; import { Container, Content, + ContentWrapperContainer, ContentLink as NBLink, StyledIcon, StyledIconButton, TextContainer, - TextWrapperContainer, - ViewMoreText, - ViewMoreWrapper, + ViewMoreButton, Wrapper, } from "./notification-banner.styles"; import { @@ -47,7 +46,8 @@ export const NBComponent = ({ // ============================================================================= // EVENT HANDLERS // ============================================================================= - const handleDismiss = () => { + const handleDismiss = (event: React.MouseEvent) => { + event.stopPropagation(); setVisible(false); if (dismissible && onDismiss) onDismiss(); @@ -64,6 +64,13 @@ export const NBComponent = ({ // ============================================================================= if (!isVisible) return null; + const renderViewMore = () => ( + + View more + + + ); + return ( - {children} - - {!isNil(collapsedHeight) && ( - - - View more - - - - )} + + {!isNil(collapsedHeight) && renderViewMore()} {dismissible && ( - ) => { - event.stopPropagation(); - handleDismiss(); - }} + onClick={handleDismiss} id={formatId("dismiss-button", id)} data-testid={formatId("dismiss-button", testId)} focusHighlight={false} From 480fcaf06cdadabde7dea78ec5bae87ade73bc65 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Mon, 6 May 2024 18:06:59 +0800 Subject: [PATCH 0099/1949] [RBS-1266][DS] cleaned up naming convention --- src/notification-banner/notification-banner.styles.tsx | 4 ++-- src/notification-banner/notification-banner.tsx | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 3c0386ed9..9ebf924e1 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -15,7 +15,7 @@ interface WrapperStyleProps { $clickable: boolean; } -interface ContentWrapperContainerStyleProps { +interface ContentWrapperStyleProps { $collapsedHeight?: number; } @@ -101,7 +101,7 @@ export const StyledIcon = styled(CrossIcon)` color: ${Color.Neutral[8]}; `; -export const ContentWrapperContainer = styled.div` +export const ContentWrapper = styled.div` ${(props) => { const gradient = "linear-gradient(to bottom, black 50%, transparent 100%)"; diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index 603e983e2..3aa3fa02b 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -4,7 +4,7 @@ import React, { useEffect, useState } from "react"; import { Container, Content, - ContentWrapperContainer, + ContentWrapper, ContentLink as NBLink, StyledIcon, StyledIconButton, @@ -82,11 +82,11 @@ export const NBComponent = ({ - {children} - + {!isNil(collapsedHeight) && renderViewMore()} From a0595144de1849170078f683f8256d780b34c474 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Tue, 7 May 2024 12:28:06 +0800 Subject: [PATCH 0100/1949] [MISC][WL] skip rendering of textarea bottom labels if it empty - else it is causing a 0.25rem bottom margin --- src/form/form-textarea.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/form/form-textarea.tsx b/src/form/form-textarea.tsx index 9b158fb9c..ebd71ec44 100644 --- a/src/form/form-textarea.tsx +++ b/src/form/form-textarea.tsx @@ -67,6 +67,7 @@ const FormTextareaComponent = ( // RENDER FUNCTIONS // ============================================================================= const renderBottomLabels = () => { + if (!errorMessage && !otherProps.maxLength) return <>; return ( {errorMessage && ( From 1c6691cc8b6e1dc079a7f0e565c3898f85bd7954 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Wed, 8 May 2024 18:31:11 +0800 Subject: [PATCH 0101/1949] [RBS-1266][DS] refactored viewmore into a more generic ActionButton and separated the functionality with the banner's onClick --- .../notification-banner.styles.tsx | 12 ++- .../notification-banner.tsx | 85 +++++++++++++------ src/notification-banner/types.ts | 11 ++- .../notification-banner.mdx | 8 +- .../notification-banner.stories.tsx | 57 ++++++++++++- stories/notification-banner/props-table.tsx | 42 ++++++++- 6 files changed, 178 insertions(+), 37 deletions(-) diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 9ebf924e1..027c97b67 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -16,7 +16,7 @@ interface WrapperStyleProps { } interface ContentWrapperStyleProps { - $collapsedHeight?: number; + $maxCollapsedHeight?: number; } // ============================================================================= @@ -105,9 +105,9 @@ export const ContentWrapper = styled.div` ${(props) => { const gradient = "linear-gradient(to bottom, black 50%, transparent 100%)"; - if (props.$collapsedHeight) + if (props.$maxCollapsedHeight) return css` - height: ${props.$collapsedHeight}px; + max-height: ${props.$maxCollapsedHeight}px; overflow: hidden; -webkit-mask-image: ${gradient}; mask-image: ${gradient}; @@ -115,13 +115,17 @@ export const ContentWrapper = styled.div` }} `; -export const ViewMoreButton = styled.div` +export const ActionButton = styled.button` display: flex; align-items: center; gap: 0.25rem; margin-top: 0.5rem; + border: none; + background: transparent; color: ${Color.Validation.Orange.Icon}; ${TextStyleHelper.getTextStyle("BodySmall", "semibold")}; + + cursor: pointer; `; diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index 3aa3fa02b..d49cf1e88 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -1,7 +1,7 @@ -import { ArrowRightIcon } from "@lifesg/react-icons"; -import { isNil } from "lodash"; import React, { useEffect, useState } from "react"; +import { useResizeDetector } from "react-resize-detector"; import { + ActionButton, Container, Content, ContentWrapper, @@ -9,7 +9,6 @@ import { StyledIcon, StyledIconButton, TextContainer, - ViewMoreButton, Wrapper, } from "./notification-banner.styles"; import { @@ -25,8 +24,9 @@ export const NBComponent = ({ onDismiss, id, forwardedRef, - collapsedHeight, + maxCollapsedHeight, onClick, + actionButton, ...otherProps }: NotificationBannerWithForwardedRefProps): JSX.Element => { // ============================================================================= @@ -35,6 +35,7 @@ export const NBComponent = ({ const testId = otherProps["data-testid"]; const [isVisible, setVisible] = useState(visible); + const { height: contentHeight, ref: contentRef } = useResizeDetector(); // ============================================================================= // EFFECTS @@ -53,24 +54,64 @@ export const NBComponent = ({ if (dismissible && onDismiss) onDismiss(); }; - const handleBannerClick = (event: React.MouseEvent) => { + const handleBannerClick = (event: React.MouseEvent) => { if (!onClick) return; event.stopPropagation(); onClick(); }; + const handleActionButtonOnClick = (event: React.MouseEvent) => { + event.stopPropagation(); + if (!actionButton.onClick) { + handleBannerClick(event); + return; + } + actionButton.onClick(); + }; + // ============================================================================= // RENDER FUNCTIONS // ============================================================================= if (!isVisible) return null; - const renderViewMore = () => ( - - View more - - + const renderDismiss = () => ( + + + ); + const renderActionButton = () => ( + + {actionButton.children} + + ); + + const renderChildren = () => { + if ( + !maxCollapsedHeight || + !contentRef.current || + (contentHeight && contentHeight < maxCollapsedHeight) + ) { + return children; + } else { + return ( + + {children} + + ); + } + }; + return ( - - - {children} - - {!isNil(collapsedHeight) && renderViewMore()} + + {renderChildren()} + {actionButton && renderActionButton()} - {dismissible && ( - - - - )} + {dismissible && renderDismiss()} ); diff --git a/src/notification-banner/types.ts b/src/notification-banner/types.ts index b554f9403..4f6c129ea 100644 --- a/src/notification-banner/types.ts +++ b/src/notification-banner/types.ts @@ -12,9 +12,11 @@ export interface NotificationBannerProps * Specifies the height to be displayed outside of * the collapsible zone */ - collapsedHeight?: number | undefined; + maxCollapsedHeight?: number | undefined; /** Called when the banner is selected */ onClick?: (() => void) | undefined; + /** Action button that will be displayed */ + actionButton?: ActionButtonProps | undefined; } export interface NotificationBannerWithForwardedRefProps @@ -32,3 +34,10 @@ export interface NotificationContentAttributes { content: string; otherAttributes?: TextLinkProps | TextProps | undefined; } + +export interface ActionButtonProps + extends React.ButtonHTMLAttributes { + children?: JSX.Element | JSX.Element[] | string | undefined; + /** Called when the action button is selected, if specified */ + onClick?: () => void | undefined; +} diff --git a/stories/notification-banner/notification-banner.mdx b/stories/notification-banner/notification-banner.mdx index 117d4e117..0ccf9fa38 100644 --- a/stories/notification-banner/notification-banner.mdx +++ b/stories/notification-banner/notification-banner.mdx @@ -60,11 +60,17 @@ The `NotificationBanner` allows performing of an action when clicked. With collapsed height setting -You can restrict the height of the `NotificationBanner` by setting the `collapsedHeight` to a +You can restrict the height of the `NotificationBanner` by setting the `maxCollapsedHeight` to a desired value in px. +Action button + +You can choose to render a custom component of your choice as an action button. + + + Using as a Higher Order Component (HOC) You can also specify the contents of the `NotificationBanner` via the provided diff --git a/stories/notification-banner/notification-banner.stories.tsx b/stories/notification-banner/notification-banner.stories.tsx index e76f88073..1a143b32a 100644 --- a/stories/notification-banner/notification-banner.stories.tsx +++ b/stories/notification-banner/notification-banner.stories.tsx @@ -3,7 +3,8 @@ import { NotificationBanner } from "src/notification-banner"; import { Text } from "src/text"; import { StyledContent } from "./doc-elements"; import { useState } from "react"; -import { GearFillIcon } from "@lifesg/react-icons"; +import { GearFillIcon } from "@lifesg/react-icons/gear-fill"; +import { ArrowRightIcon } from "@lifesg/react-icons/arrow-right"; type Component = typeof NotificationBanner; @@ -282,8 +283,8 @@ export const CollapsedHeight: StoryObj = { maxHeight: "21rem", }} > - - This is a notification banner with collapsedHeight set. + + This is a notification banner with maxCollapsedHeight set. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation @@ -310,3 +311,53 @@ export const CollapsedHeight: StoryObj = { ); }, }; + +const actionButton = () => ( + <> + View More + + +); + +export const ActionButton: StoryObj = { + render: () => { + const [showParagraph, setShowParagraph] = useState(false); + const onClick = () => { + setShowParagraph(!showParagraph); + }; + return ( +
+ + This is a notification banner with an action button set. + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore + magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu + fugiat nulla pariatur. Excepteur sint occaecat cupidatat + non proident, sunt in culpa qui officia deserunt mollit + anim id est laborum. + + {showParagraph && ( + + Lorem ipsum dolor sit amet, consectetur adipiscing + elit, sed do eiusmod tempor incididunt ut labore et + dolore magna aliqua + + )} + +
+ ); + }, +}; diff --git a/stories/notification-banner/props-table.tsx b/stories/notification-banner/props-table.tsx index 5f4e0cd4a..5944b8963 100644 --- a/stories/notification-banner/props-table.tsx +++ b/stories/notification-banner/props-table.tsx @@ -64,7 +64,7 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["() => void"], }, { - name: "collapsedHeight", + name: "maxCollapsedHeight", description: ( <> Specifies the height of the   @@ -74,6 +74,46 @@ const DATA: ApiTableSectionProps[] = [ ), propTypes: ["number"], }, + { + name: "actionButton", + description: + "The properties of the action button that appears at the bottom of the component", + propTypes: ["ActionButtonProps"], + }, + ], + }, + { + name: "ActionButtonProps", + attributes: [ + { + name: "", + description: ( + <> + This component also inherits props from  + + HTMLButtonElement + + + ), + }, + { + name: "children", + description: "The content of the ActionButton", + propTypes: ["JSX.Element", "JSX.Element[]", "string"], + }, + { + name: "onClick", + description: ( + <> + Called when the ActionButton is clicked + + ), + propTypes: ["() => void"], + }, ], }, ]; From 862a368ac2260894a0e8ee32a2d4c47302f6b8dd Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Wed, 8 May 2024 18:38:52 +0800 Subject: [PATCH 0102/1949] [RBS-1266][DS] improved accessibility for the banner --- src/notification-banner/notification-banner.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index d49cf1e88..7a1c38a0a 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -114,6 +114,7 @@ export const NBComponent = ({ return ( Date: Thu, 9 May 2024 14:10:47 +0800 Subject: [PATCH 0103/1949] [RBS-1266][DS] improved accessibility for the banner and cleaned up code --- .../notification-banner.styles.tsx | 38 +++++++++++-------- .../notification-banner.tsx | 20 +++++----- src/notification-banner/types.ts | 6 +-- stories/notification-banner/props-table.tsx | 18 +-------- 4 files changed, 37 insertions(+), 45 deletions(-) diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 027c97b67..3e8efb1d3 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -61,7 +61,7 @@ export const TextContainer = styled.div` padding: 1.5rem 0; `; -export const Content = styled.div` +export const Content = styled.div` display: inline-block; width: 100%; @@ -81,6 +81,18 @@ export const Content = styled.div` ${TextStyleHelper.getTextStyle("Body", "regular")} ${commonLinkStyle} } + + ${(props) => { + const gradient = + "linear-gradient(to bottom, black 50%, transparent 100%)"; + if (props.$maxCollapsedHeight) + return css` + max-height: ${props.$maxCollapsedHeight}px; + overflow: hidden; + -webkit-mask-image: ${gradient}; + mask-image: ${gradient}; + `; + }} `; export const ContentLink = styled(Text.Hyperlink.Default)` @@ -101,20 +113,6 @@ export const StyledIcon = styled(CrossIcon)` color: ${Color.Neutral[8]}; `; -export const ContentWrapper = styled.div` - ${(props) => { - const gradient = - "linear-gradient(to bottom, black 50%, transparent 100%)"; - if (props.$maxCollapsedHeight) - return css` - max-height: ${props.$maxCollapsedHeight}px; - overflow: hidden; - -webkit-mask-image: ${gradient}; - mask-image: ${gradient}; - `; - }} -`; - export const ActionButton = styled.button` display: flex; align-items: center; @@ -129,3 +127,13 @@ export const ActionButton = styled.button` cursor: pointer; `; + +export const AccessibleBannerButton = styled.button` + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +`; diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index 7a1c38a0a..533c291b0 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -1,10 +1,10 @@ import React, { useEffect, useState } from "react"; import { useResizeDetector } from "react-resize-detector"; import { + AccessibleBannerButton, ActionButton, Container, Content, - ContentWrapper, ContentLink as NBLink, StyledIcon, StyledIconButton, @@ -60,13 +60,13 @@ export const NBComponent = ({ onClick(); }; - const handleActionButtonOnClick = (event: React.MouseEvent) => { + const handleActionButtonOnClick = (event: React.MouseEvent) => { event.stopPropagation(); if (!actionButton.onClick) { handleBannerClick(event); return; } - actionButton.onClick(); + actionButton.onClick(event); }; // ============================================================================= @@ -74,7 +74,7 @@ export const NBComponent = ({ // ============================================================================= if (!isVisible) return null; - const renderDismiss = () => ( + const renderDismissButton = () => ( +
{children} - +
); } }; + const renderAccessibleBannerButton = () => (); + return ( {renderChildren()} {actionButton && renderActionButton()} - {dismissible && renderDismiss()} + {dismissible && renderDismissButton()}
+ {onClick && renderAccessibleBannerButton()}
); }; diff --git a/src/notification-banner/types.ts b/src/notification-banner/types.ts index 4f6c129ea..d1e5d6d9a 100644 --- a/src/notification-banner/types.ts +++ b/src/notification-banner/types.ts @@ -36,8 +36,4 @@ export interface NotificationContentAttributes { } export interface ActionButtonProps - extends React.ButtonHTMLAttributes { - children?: JSX.Element | JSX.Element[] | string | undefined; - /** Called when the action button is selected, if specified */ - onClick?: () => void | undefined; -} + extends React.ButtonHTMLAttributes {} \ No newline at end of file diff --git a/stories/notification-banner/props-table.tsx b/stories/notification-banner/props-table.tsx index 5944b8963..926eb76e6 100644 --- a/stories/notification-banner/props-table.tsx +++ b/stories/notification-banner/props-table.tsx @@ -76,7 +76,7 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "actionButton", - description: + description: "The properties of the action button that appears at the bottom of the component", propTypes: ["ActionButtonProps"], }, @@ -89,7 +89,7 @@ const DATA: ApiTableSectionProps[] = [ name: "", description: ( <> - This component also inherits props from  + This component inherits props from  ), }, - { - name: "children", - description: "The content of the ActionButton", - propTypes: ["JSX.Element", "JSX.Element[]", "string"], - }, - { - name: "onClick", - description: ( - <> - Called when the ActionButton is clicked - - ), - propTypes: ["() => void"], - }, ], }, ]; From a0fe2f63c4ca3212076824a5256f6db083a1d090 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Thu, 9 May 2024 15:02:15 +0800 Subject: [PATCH 0104/1949] [RBS-1266][DS] changed style prop naming convention --- src/notification-banner/notification-banner.styles.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 3e8efb1d3..404c730a5 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -15,7 +15,7 @@ interface WrapperStyleProps { $clickable: boolean; } -interface ContentWrapperStyleProps { +interface ContentStyleProps { $maxCollapsedHeight?: number; } @@ -61,7 +61,7 @@ export const TextContainer = styled.div` padding: 1.5rem 0; `; -export const Content = styled.div` +export const Content = styled.div` display: inline-block; width: 100%; From d98a6896533727d3d4e4bcb2214a1a6e8b1f56d2 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Fri, 10 May 2024 18:57:34 +0800 Subject: [PATCH 0105/1949] [RBS-1266][DS] cleaned up and simplified code --- .../notification-banner.styles.tsx | 7 ++- .../notification-banner.tsx | 63 ++++++++----------- 2 files changed, 31 insertions(+), 39 deletions(-) diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 404c730a5..932355fd7 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -55,9 +55,12 @@ export const Container = styled(Layout.Content)` display: flex; `; -export const TextContainer = styled.div` - display: flex; +export const ContentContainer = styled.div` flex: 1; + + display: flex; + flex-direction: column; + align-items: flex-start; padding: 1.5rem 0; `; diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index 533c291b0..68fc2bb34 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -5,10 +5,10 @@ import { ActionButton, Container, Content, + ContentContainer, ContentLink as NBLink, StyledIcon, StyledIconButton, - TextContainer, Wrapper, } from "./notification-banner.styles"; import { @@ -54,18 +54,13 @@ export const NBComponent = ({ if (dismissible && onDismiss) onDismiss(); }; - const handleBannerClick = (event: React.MouseEvent) => { - if (!onClick) return; - event.stopPropagation(); - onClick(); - }; - - const handleActionButtonOnClick = (event: React.MouseEvent) => { - event.stopPropagation(); + const handleActionButtonOnClick = ( + event: React.MouseEvent + ) => { if (!actionButton.onClick) { - handleBannerClick(event); return; } + event.stopPropagation(); actionButton.onClick(event); }; @@ -89,49 +84,43 @@ export const NBComponent = ({ {actionButton.children} ); - const renderChildren = () => { - if ( - !maxCollapsedHeight || - !contentRef.current || - (contentHeight && contentHeight < maxCollapsedHeight) - ) { - return children; - } else { - return ( -
- {children} -
- ); - } - }; + const renderContent = () => ( + maxCollapsedHeight + ? maxCollapsedHeight + : undefined + } + > +
{children}
+
+ ); - const renderAccessibleBannerButton = () => (); + const renderAccessibleBannerButton = () => ( + + ); return ( - - - {renderChildren()} - {actionButton && renderActionButton()} - - + + {renderContent()} + {actionButton && renderActionButton()} + {dismissible && renderDismissButton()} {onClick && renderAccessibleBannerButton()} From e74f71436f683a94e6b36787ea746a223cd38e74 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 13 May 2024 09:55:21 +0800 Subject: [PATCH 0106/1949] [MISC][RL] Update documentation --- src/notification-banner/types.ts | 12 +--- .../notification-banner.mdx | 16 +++--- .../notification-banner.stories.tsx | 57 ++++++------------- stories/notification-banner/props-table.tsx | 33 +++-------- 4 files changed, 33 insertions(+), 85 deletions(-) diff --git a/src/notification-banner/types.ts b/src/notification-banner/types.ts index d1e5d6d9a..e148c98d7 100644 --- a/src/notification-banner/types.ts +++ b/src/notification-banner/types.ts @@ -8,15 +8,10 @@ export interface NotificationBannerProps sticky?: boolean | undefined; onDismiss?: (() => void) | undefined; "data-testid"?: string | undefined; - /** - * Specifies the height to be displayed outside of - * the collapsible zone - */ + /** Specifies the maximum height of content, after which it is collapsed */ maxCollapsedHeight?: number | undefined; - /** Called when the banner is selected */ - onClick?: (() => void) | undefined; /** Action button that will be displayed */ - actionButton?: ActionButtonProps | undefined; + actionButton?: React.ButtonHTMLAttributes | undefined; } export interface NotificationBannerWithForwardedRefProps @@ -34,6 +29,3 @@ export interface NotificationContentAttributes { content: string; otherAttributes?: TextLinkProps | TextProps | undefined; } - -export interface ActionButtonProps - extends React.ButtonHTMLAttributes {} \ No newline at end of file diff --git a/stories/notification-banner/notification-banner.mdx b/stories/notification-banner/notification-banner.mdx index 0ccf9fa38..174dd1679 100644 --- a/stories/notification-banner/notification-banner.mdx +++ b/stories/notification-banner/notification-banner.mdx @@ -52,24 +52,22 @@ The `NotificationBanner` also allows custom content to be displayed. -On Click +Banner click The `NotificationBanner` allows performing of an action when clicked. - + -With collapsed height setting +With max collapsed height -You can restrict the height of the `NotificationBanner` by setting the `maxCollapsedHeight` to a +You can restrict the height of content by setting `maxCollapsedHeight` to a desired value in px. - + -Action button +With action button -You can choose to render a custom component of your choice as an action button. - - + Using as a Higher Order Component (HOC) diff --git a/stories/notification-banner/notification-banner.stories.tsx b/stories/notification-banner/notification-banner.stories.tsx index 1a143b32a..db6e211f7 100644 --- a/stories/notification-banner/notification-banner.stories.tsx +++ b/stories/notification-banner/notification-banner.stories.tsx @@ -236,22 +236,12 @@ export const CustomContent: StoryObj = { }, }; -export const OnClick: StoryObj = { +export const ClickableBanner: StoryObj = { render: () => { const [swapColor, setSwapColor] = useState(true); return ( -
- { - setSwapColor(!swapColor); - }} - > +
+ setSwapColor(!swapColor)}> This is a notification banner that can be clicked to perform an action. @@ -273,17 +263,11 @@ export const OnClick: StoryObj = { }, }; -export const CollapsedHeight: StoryObj = { +export const WithMaxCollapsedHeight: StoryObj = { render: () => { return ( -
- +
+ This is a notification banner with maxCollapsedHeight set. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna @@ -312,28 +296,21 @@ export const CollapsedHeight: StoryObj = { }, }; -const actionButton = () => ( - <> - View More - - -); - -export const ActionButton: StoryObj = { +export const WithActionButton: StoryObj = { render: () => { const [showParagraph, setShowParagraph] = useState(false); - const onClick = () => { - setShowParagraph(!showParagraph); - }; return ( -
+
+ View More + + + ), + onClick: () => setShowParagraph(!showParagraph), + }} > This is a notification banner with an action button set. diff --git a/stories/notification-banner/props-table.tsx b/stories/notification-banner/props-table.tsx index 926eb76e6..e4c87338b 100644 --- a/stories/notification-banner/props-table.tsx +++ b/stories/notification-banner/props-table.tsx @@ -61,44 +61,25 @@ const DATA: ApiTableSectionProps[] = [ clicked ), - propTypes: ["() => void"], + propTypes: [ + "(event: React.MouseEvent) => void", + ], }, { name: "maxCollapsedHeight", description: ( <> - Specifies the height of the   - NotificationBannerto be displayed outside - of the collapsible zone + Specifies the maximum visible height of the + NotificationBanner content ), propTypes: ["number"], }, { name: "actionButton", - description: + description: "The properties of the action button that appears at the bottom of the component", - propTypes: ["ActionButtonProps"], - }, - ], - }, - { - name: "ActionButtonProps", - attributes: [ - { - name: "", - description: ( - <> - This component inherits props from  - - HTMLButtonElement - - - ), + propTypes: ["React.ButtonHTMLAttributes"], }, ], }, From d0ea2d4ac1866de9bac75705d50f0e5b6f40146d Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 13 May 2024 09:56:19 +0800 Subject: [PATCH 0107/1949] [MISC][RL] Enforce button type --- src/notification-banner/notification-banner.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/notification-banner/notification-banner.tsx b/src/notification-banner/notification-banner.tsx index 68fc2bb34..16d77e847 100644 --- a/src/notification-banner/notification-banner.tsx +++ b/src/notification-banner/notification-banner.tsx @@ -58,6 +58,7 @@ export const NBComponent = ({ event: React.MouseEvent ) => { if (!actionButton.onClick) { + // let it bubble return; } event.stopPropagation(); @@ -75,6 +76,7 @@ export const NBComponent = ({ id={formatId("dismiss-button", id)} data-testid={formatId("dismiss-button", testId)} focusHighlight={false} + type="button" > @@ -84,6 +86,7 @@ export const NBComponent = ({ @@ -105,7 +108,7 @@ export const NBComponent = ({ ); const renderAccessibleBannerButton = () => ( - + ); return ( From 41102d8b0d0ad28f177ae1ed799068e7d057c9d4 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Mon, 13 May 2024 12:39:32 +0800 Subject: [PATCH 0108/1949] [RBS-1265][DS] cleaned up and refactored code to be similar to notification-banner --- src/alert/alert.style.tsx | 10 +++++--- src/alert/alert.tsx | 45 ++++++++++++++++++++++----------- src/alert/types.ts | 2 +- stories/alert/alert.mdx | 4 +-- stories/alert/alert.stories.tsx | 4 +-- stories/alert/props-table.tsx | 2 +- tests/alert/alert.spec.tsx | 5 ---- 7 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index 4935703e5..0a8bfcbf1 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -15,7 +15,7 @@ interface StyleProps { } export interface TextWrapperContainerStyleProps { $showMore: boolean; - $collapsedHeight?: number; + $maxCollapsedHeight?: number; } export interface ShowMoreIconStyleProps { @@ -156,9 +156,9 @@ export const TextWrapperContainer = styled.div` ${(props) => { const gradient = "linear-gradient(to bottom, black 50%, transparent 100%)"; - if (!props.$showMore && props.$collapsedHeight) + if (!props.$showMore && props.$maxCollapsedHeight) return ` - height: ${props.$collapsedHeight}px; + max-height: ${props.$maxCollapsedHeight}px; overflow: hidden; -webkit-mask-image: ${gradient}; mask-image: ${gradient}; @@ -166,7 +166,7 @@ export const TextWrapperContainer = styled.div` }} `; -export const ShowMoreButton = styled.div` +export const ShowMoreButton = styled.button` display: flex; align-items: center; gap: 0.25rem; @@ -174,6 +174,8 @@ export const ShowMoreButton = styled.div` cursor: pointer; user-select: none; + border: none; + background: transparent; color: ${Color.Primary}; ${TextStyleHelper.getTextStyle("BodySmall", "semibold")} diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index 0988de984..1e6727737 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -15,7 +15,6 @@ import { } from "./alert.style"; import { AlertProps } from "./types"; import { useResizeDetector } from "react-resize-detector"; -import { isNil } from "lodash"; export const Alert = ({ type, @@ -26,7 +25,7 @@ export const Alert = ({ sizeType = "default", showIcon = false, customIcon, - collapsedHeight, + maxCollapsedHeight, ...otherProps }: AlertProps): JSX.Element => { // ============================================================================= @@ -34,23 +33,31 @@ export const Alert = ({ // ============================================================================= const [showHiddenContent, setShowHiddenContent] = useState(false); const [renderShowMore, setRenderShowMore] = useState(false); - const contentResizeDetector = useResizeDetector(); + const { height: contentHeight, ref: contentRef } = + useResizeDetector(); // ============================================================================= // EFFECTS // ============================================================================= useEffect(() => { - setInitialCollapsedState(); - }, [collapsedHeight]); + setCollapsedState(); + }, [maxCollapsedHeight, contentHeight]); // ============================================================================= // HELPERS // ============================================================================= - const setInitialCollapsedState = () => { - setShowHiddenContent(isNil(collapsedHeight)); - setRenderShowMore(!isNil(collapsedHeight)); + const setCollapsedState = () => { + setShowHiddenContent(!maxCollapsedHeight); + setRenderShowMore(isContentOutsideCollapsibleZone()); + }; + + const isContentOutsideCollapsibleZone = () => { + if(maxCollapsedHeight) { + return contentHeight > maxCollapsedHeight; + } + return false; }; // ============================================================================= @@ -59,6 +66,7 @@ export const Alert = ({ const renderShowMoreButton = () => ( setShowHiddenContent(!showHiddenContent)} > Show {showHiddenContent ? "less" : "more"} @@ -105,6 +113,19 @@ export const Alert = ({ } }; + const renderContent = () => ( + +
{children}
+
+ ); + return ( )} - - {children} - + {renderContent()} {renderShowMore && renderShowMoreButton()} {actionLink && renderLink()} diff --git a/src/alert/types.ts b/src/alert/types.ts index c9eb4ce7c..91b1d40b9 100644 --- a/src/alert/types.ts +++ b/src/alert/types.ts @@ -20,5 +20,5 @@ export interface AlertProps extends React.HTMLAttributes { * Specifies the maximum height of the element to be * displayed outside of the collapsible zone, in px */ - collapsedHeight?: number | undefined; + maxCollapsedHeight?: number | undefined; } diff --git a/stories/alert/alert.mdx b/stories/alert/alert.mdx index e327b1405..98a965337 100644 --- a/stories/alert/alert.mdx +++ b/stories/alert/alert.mdx @@ -44,8 +44,8 @@ Or if you require a custom display, you can construct your layout and pass it in With maximum height setting -You can restrict the height of the `Alert` by setting the `collapsedHeight` to a -desired value in px. +You can restrict the height of the `Alert` by setting the `maxCollapsedHeight` to +a desired value in px. diff --git a/stories/alert/alert.stories.tsx b/stories/alert/alert.stories.tsx index ecf373bed..d3b7a9800 100644 --- a/stories/alert/alert.stories.tsx +++ b/stories/alert/alert.stories.tsx @@ -234,7 +234,7 @@ export const WithCollapsedHeight: StoryObj = { render: () => { return ( <> - + An alert box with a maximum height of content to render, outside the collapsible zone with a text button to expand it. Lorem ipsum dolor sit amet, consectetur adipiscing elit. @@ -248,7 +248,7 @@ export const WithCollapsedHeight: StoryObj = { non. Cras in mattis ex.
- +
    { expect(getCustomIcon()).toBeInTheDocument(); }); - it("should not render a custom icon by default", () => { - render(); - - expect(getCustomIcon()).not.toBeInTheDocument(); - }); }); it("should render custom display if required", () => { From 49f54b5b9e5ccd788d92b0ba5edfcbeb244e7280 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 13 May 2024 14:55:08 +0800 Subject: [PATCH 0109/1949] [MISC][RL] Update documentation --- src/alert/types.ts | 5 +--- stories/alert/alert.mdx | 9 ++++--- stories/alert/alert.stories.tsx | 44 +++++---------------------------- stories/alert/props-table.tsx | 26 ++++++++++--------- 4 files changed, 27 insertions(+), 57 deletions(-) diff --git a/src/alert/types.ts b/src/alert/types.ts index 91b1d40b9..2a428abcd 100644 --- a/src/alert/types.ts +++ b/src/alert/types.ts @@ -16,9 +16,6 @@ export interface AlertProps extends React.HTMLAttributes { sizeType?: AlertSizeType | undefined; /** Custom alert icon to be rendered, replacing the default alert icons */ customIcon?: JSX.Element | undefined; - /** - * Specifies the maximum height of the element to be - * displayed outside of the collapsible zone, in px - */ + /** Specifies the maximum height of content, after which it is collapsed */ maxCollapsedHeight?: number | undefined; } diff --git a/stories/alert/alert.mdx b/stories/alert/alert.mdx index 98a965337..7ffcb0038 100644 --- a/stories/alert/alert.mdx +++ b/stories/alert/alert.mdx @@ -43,11 +43,12 @@ Or if you require a custom display, you can construct your layout and pass it in -With maximum height setting -You can restrict the height of the `Alert` by setting the `maxCollapsedHeight` to -a desired value in px. +With max collapsed height - +You can restrict the height of content by setting `maxCollapsedHeight` to a +desired value in px. This also works with custom content. + + Component API diff --git a/stories/alert/alert.stories.tsx b/stories/alert/alert.stories.tsx index d3b7a9800..b3d1fd563 100644 --- a/stories/alert/alert.stories.tsx +++ b/stories/alert/alert.stories.tsx @@ -230,7 +230,7 @@ export const WithCustomIcon: StoryObj = { }, }; -export const WithCollapsedHeight: StoryObj = { +export const WithMaxCollapsedHeight: StoryObj = { render: () => { return ( <> @@ -249,47 +249,15 @@ export const WithCollapsedHeight: StoryObj = {
    -
      Custom content -
    • - First -
    • -
    • - Second -
    • -
    • - Third -
    • -
    +

diff --git a/stories/alert/props-table.tsx b/stories/alert/props-table.tsx index 23fd34e48..440d13f67 100644 --- a/stories/alert/props-table.tsx +++ b/stories/alert/props-table.tsx @@ -33,14 +33,17 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "actionLink", - description: "The attributes of an action link that performs an action on click", - propTypes: ( - HTMLAnchorAttributes - ), + description: + "The attributes of an action link that performs an action on click", + propTypes: ( + + HTMLAnchorAttributes + + ), }, { name: "sizeType", @@ -69,13 +72,14 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "customIcon", - description: "Specifies a custom replacement icon for the alert", + description: + "Specifies a custom replacement icon for the alert", propTypes: ["JSX.Element"], - }, { name: "maxCollapsedHeight", - description: "Specifies the maximum height of the content to be displayed outside of the collapsible zone, in px", + description: + "Specifies the maximum visible height of the content in px", propTypes: ["number"], }, ], From 8a267b9a06030dc419c1744998619c84c98f97bf Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Tue, 14 May 2024 14:43:54 +0800 Subject: [PATCH 0110/1949] [RBS-1266][DS] fixed chevron direction for alert --- src/alert/alert.style.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index 0a8bfcbf1..fadd3f9b4 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -3,7 +3,7 @@ import { Color } from "../color/color"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; import { Text, TextStyleHelper } from "../text"; import { AlertSizeType, AlertType } from "./types"; -import { ChevronUpIcon } from "@lifesg/react-icons"; +import { ChevronDownIcon } from "@lifesg/react-icons"; // ============================================================================= // STYLE INTERFACES, transient props are denoted with $ @@ -181,7 +181,7 @@ export const ShowMoreButton = styled.button` ${TextStyleHelper.getTextStyle("BodySmall", "semibold")} `; -export const ChevronIcon = styled(ChevronUpIcon)` - transform: rotate(${(props) => (props.$expanded ? 180 : 0)}deg); +export const ChevronIcon = styled(ChevronDownIcon)` + transform: rotate(${(props) => (props.$expanded ? -180 : 0)}deg); transition: transform 300ms ease-in-out; `; From f5bed60a3beda52787480b641350b74b35c9bf76 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Tue, 14 May 2024 16:02:40 +0800 Subject: [PATCH 0111/1949] [RBS-1265][DS] fixed hyperlink rendering outside collapsible zone and buttons being clickable outside of their bounds --- src/alert/alert.style.tsx | 8 +++++++- stories/alert/alert.stories.tsx | 7 ++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index fadd3f9b4..2d22d416b 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -135,6 +135,7 @@ export const ActionLinkText = styled(Text.Hyperlink.Small)` }} display: flex; align-items: center; + align-self: flex-start; color: ${Color.Primary}; svg { @@ -145,7 +146,7 @@ export const ActionLinkText = styled(Text.Hyperlink.Small)` } `; -export const TextContainer = styled.div` +export const ContentContainer = styled.div` display: flex; flex-direction: column; flex: 1; @@ -153,6 +154,10 @@ export const TextContainer = styled.div` `; export const TextWrapperContainer = styled.div` + display: flex; + flex-direction: column; + flex: 1; + ${(props) => { const gradient = "linear-gradient(to bottom, black 50%, transparent 100%)"; @@ -169,6 +174,7 @@ export const TextWrapperContainer = styled.div` export const ShowMoreButton = styled.button` display: flex; align-items: center; + align-self: flex-start; gap: 0.25rem; margin-top: 0.5rem; diff --git a/stories/alert/alert.stories.tsx b/stories/alert/alert.stories.tsx index b3d1fd563..3a4a633e7 100644 --- a/stories/alert/alert.stories.tsx +++ b/stories/alert/alert.stories.tsx @@ -234,7 +234,12 @@ export const WithMaxCollapsedHeight: StoryObj = { render: () => { return ( <> - + An alert box with a maximum height of content to render, outside the collapsible zone with a text button to expand it. Lorem ipsum dolor sit amet, consectetur adipiscing elit. From 0646799cee1c35df0b9e047ae0406ffaae1c9306 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Tue, 14 May 2024 16:44:12 +0800 Subject: [PATCH 0112/1949] [RBS-1266][DS] fixed import and moved actionLink --- src/alert/alert.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index 1e6727737..b304e4a56 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -4,17 +4,17 @@ import { ExclamationTriangleFillIcon } from "@lifesg/react-icons/exclamation-tri import { ICircleFillIcon } from "@lifesg/react-icons/i-circle-fill"; import { TickCircleFillIcon } from "@lifesg/react-icons/tick-circle-fill"; import { useEffect, useState } from "react"; +import { useResizeDetector } from "react-resize-detector"; import { ActionLinkText, AlertIconWrapper, ChevronIcon, + ContentContainer, ShowMoreButton, - TextContainer, TextWrapperContainer, Wrapper, } from "./alert.style"; import { AlertProps } from "./types"; -import { useResizeDetector } from "react-resize-detector"; export const Alert = ({ type, @@ -123,6 +123,7 @@ export const Alert = ({ $showMore={showHiddenContent} >
{children}
+ {actionLink && renderLink()} ); @@ -138,11 +139,10 @@ export const Alert = ({ {renderIcon()} )} - + {renderContent()} {renderShowMore && renderShowMoreButton()} - {actionLink && renderLink()} - + ); }; From b8b585bd7ca7738a9725a6a8a23c5bf31247c168 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Wed, 15 May 2024 09:21:05 +0800 Subject: [PATCH 0113/1949] [MISC][RL] Bump v2.6.0-canary.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3cc3f0453..5c8b303f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0", + "version": "2.6.0-canary.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.5.0", + "version": "2.6.0-canary.1", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index 6c678d826..a580dea6f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.5.0", + "version": "2.6.0-canary.1", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From aa9960620318050b4bc25b75443d301117d0c251 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Wed, 15 May 2024 13:50:31 +0800 Subject: [PATCH 0114/1949] [RBS-1265][DS] minor styling fix for alert actionlink --- src/alert/alert.style.tsx | 11 +++++++++-- src/alert/alert.tsx | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index 2d22d416b..72f66f4bf 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -15,6 +15,7 @@ interface StyleProps { } export interface TextWrapperContainerStyleProps { $showMore: boolean; + $hasActionLink: boolean; $maxCollapsedHeight?: number; } @@ -157,12 +158,17 @@ export const TextWrapperContainer = styled.div` display: flex; flex-direction: column; flex: 1; - + ${(props) => { + if(props.$showMore && props.$hasActionLink) + return css` + margin-bottom: 0.5rem; + `; + }} ${(props) => { const gradient = "linear-gradient(to bottom, black 50%, transparent 100%)"; if (!props.$showMore && props.$maxCollapsedHeight) - return ` + return css` max-height: ${props.$maxCollapsedHeight}px; overflow: hidden; -webkit-mask-image: ${gradient}; @@ -171,6 +177,7 @@ export const TextWrapperContainer = styled.div` }} `; + export const ShowMoreButton = styled.button` display: flex; align-items: center; diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index b304e4a56..1b164099f 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -121,6 +121,7 @@ export const Alert = ({ : undefined } $showMore={showHiddenContent} + $hasActionLink={!!actionLink} >
{children}
{actionLink && renderLink()} From 4cbb95e7a73c9890d6bc0190514a8a58f9215731 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Wed, 15 May 2024 17:27:04 +0800 Subject: [PATCH 0115/1949] [RBS-1265][DS] minor styling fix for showMore button's sizeType --- src/alert/alert.style.tsx | 22 +++++++++++++++------ src/alert/alert.tsx | 2 ++ stories/alert/alert.stories.tsx | 34 +++++++++++++++++++++++++++------ 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index 72f66f4bf..2c28bb7ea 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -1,9 +1,9 @@ +import { ChevronDownIcon } from "@lifesg/react-icons"; import styled, { css } from "styled-components"; import { Color } from "../color/color"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; import { Text, TextStyleHelper } from "../text"; import { AlertSizeType, AlertType } from "./types"; -import { ChevronDownIcon } from "@lifesg/react-icons"; // ============================================================================= // STYLE INTERFACES, transient props are denoted with $ @@ -159,8 +159,8 @@ export const TextWrapperContainer = styled.div` flex-direction: column; flex: 1; ${(props) => { - if(props.$showMore && props.$hasActionLink) - return css` + if (props.$showMore && props.$hasActionLink) + return ` margin-bottom: 0.5rem; `; }} @@ -168,7 +168,7 @@ export const TextWrapperContainer = styled.div` const gradient = "linear-gradient(to bottom, black 50%, transparent 100%)"; if (!props.$showMore && props.$maxCollapsedHeight) - return css` + return ` max-height: ${props.$maxCollapsedHeight}px; overflow: hidden; -webkit-mask-image: ${gradient}; @@ -177,8 +177,19 @@ export const TextWrapperContainer = styled.div` }} `; +export const ShowMoreButton = styled.button` + ${(props) => { + if (props.$sizeType === "small") + return css` + ${TextStyleHelper.getTextStyle("H6", "semibold")} + `; + else { + return css` + ${TextStyleHelper.getTextStyle("H5", "semibold")} + `; + } + }} -export const ShowMoreButton = styled.button` display: flex; align-items: center; align-self: flex-start; @@ -191,7 +202,6 @@ export const ShowMoreButton = styled.button` background: transparent; color: ${Color.Primary}; - ${TextStyleHelper.getTextStyle("BodySmall", "semibold")} `; export const ChevronIcon = styled(ChevronDownIcon)` diff --git a/src/alert/alert.tsx b/src/alert/alert.tsx index 1b164099f..3839997f6 100644 --- a/src/alert/alert.tsx +++ b/src/alert/alert.tsx @@ -66,6 +66,8 @@ export const Alert = ({ const renderShowMoreButton = () => ( setShowHiddenContent(!showHiddenContent)} > diff --git a/stories/alert/alert.stories.tsx b/stories/alert/alert.stories.tsx index 3a4a633e7..f14a29f61 100644 --- a/stories/alert/alert.stories.tsx +++ b/stories/alert/alert.stories.tsx @@ -207,6 +207,23 @@ export const SmallSize: StoryObj = { Lorem ipsum dolor sit amet, consectetur adipiscing elit.

+
+ +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. +

+
); }, @@ -234,12 +251,17 @@ export const WithMaxCollapsedHeight: StoryObj = { render: () => { return ( <> - + An alert box with a maximum height of content to render, outside the collapsible zone with a text button to expand it. Lorem ipsum dolor sit amet, consectetur adipiscing elit. From dc6b24730e0b9ce3c77ec6b26919b15a2d29673f Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Thu, 16 May 2024 10:29:12 +0800 Subject: [PATCH 0116/1949] [RBS-1266][DS] small copy change in notification banner --- stories/notification-banner/notification-banner.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/notification-banner/notification-banner.stories.tsx b/stories/notification-banner/notification-banner.stories.tsx index db6e211f7..d0a4ea526 100644 --- a/stories/notification-banner/notification-banner.stories.tsx +++ b/stories/notification-banner/notification-banner.stories.tsx @@ -305,7 +305,7 @@ export const WithActionButton: StoryObj = { actionButton={{ children: ( <> - View More + View more ), From 72e254cb8efe4abfbff65f1516c7c270e4d058d0 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Thu, 16 May 2024 11:54:49 +0800 Subject: [PATCH 0117/1949] [MISC][WL] allow more characters in select label before ellipsis --- src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx index 10d7cc47a..9557800fb 100644 --- a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx +++ b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx @@ -168,6 +168,7 @@ export const Divider = styled.div` export const LabelContainer = styled.div` display: flex; flex: 1; + word-break: break-all; `; export const ValueLabel = styled(Text.Body)` From 4da5179d91d0a088934c9415e88bce747b5f1f1e Mon Sep 17 00:00:00 2001 From: roll Date: Sun, 19 May 2024 22:18:28 +0800 Subject: [PATCH 0118/1949] [CCUBE-1360][RL] Add markup component --- src/alert/alert.style.tsx | 10 ++++-- src/file-upload/file-upload.styles.tsx | 8 +++-- src/markup/index.ts | 2 ++ src/markup/markup.style.tsx | 19 +++++++++++ src/markup/markup.tsx | 24 ++++++++++++++ src/markup/types.ts | 13 ++++++++ src/popover-v2/popover.styles.tsx | 11 +++++-- src/shared/html-content/html-content.ts | 39 ++++++++++++++-------- stories/markup/markup.mdx | 17 ++++++++++ stories/markup/markup.stories.tsx | 44 +++++++++++++++++++++++++ 10 files changed, 168 insertions(+), 19 deletions(-) create mode 100644 src/markup/index.ts create mode 100644 src/markup/markup.style.tsx create mode 100644 src/markup/markup.tsx create mode 100644 src/markup/types.ts create mode 100644 stories/markup/markup.mdx create mode 100644 stories/markup/markup.stories.tsx diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index 2c28bb7ea..f4cc9dc67 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -68,9 +68,15 @@ export const Wrapper = styled.div` ${(props) => { if (props.$sizeType === "small") { - return applyHtmlContentStyle("H6"); + return applyHtmlContentStyle({ + textSize: "H6", + textColor: Color.Neutral[1], + }); } - return applyHtmlContentStyle("BodySmall"); + return applyHtmlContentStyle({ + textSize: "BodySmall", + textColor: Color.Neutral[1], + }); }} `; diff --git a/src/file-upload/file-upload.styles.tsx b/src/file-upload/file-upload.styles.tsx index a9c1b8794..889a30147 100644 --- a/src/file-upload/file-upload.styles.tsx +++ b/src/file-upload/file-upload.styles.tsx @@ -20,7 +20,10 @@ export const Title = styled(Text.H4)` `; export const TitleContainer = styled.div` - ${applyHtmlContentStyle("Body")} + ${applyHtmlContentStyle({ + textSize: "Body", + textColor: Color.Neutral[1], + })} `; export const Description = styled(Text.BodySmall)` @@ -29,7 +32,8 @@ export const Description = styled(Text.BodySmall)` `; export const DescriptionContainer = styled.div` - ${applyHtmlContentStyle("BodySmall", { + ${applyHtmlContentStyle({ + textSize: "BodySmall", textColor: Color.Neutral[3], })} `; diff --git a/src/markup/index.ts b/src/markup/index.ts new file mode 100644 index 000000000..e26a2598d --- /dev/null +++ b/src/markup/index.ts @@ -0,0 +1,2 @@ +export * from "./markup"; +export * from "./types"; diff --git a/src/markup/markup.style.tsx b/src/markup/markup.style.tsx new file mode 100644 index 000000000..39810fb84 --- /dev/null +++ b/src/markup/markup.style.tsx @@ -0,0 +1,19 @@ +import styled from "styled-components"; +import { + HtmlContentStyleOptions, + applyHtmlContentStyle, +} from "../shared/html-content/html-content"; + +// ============================================================================= +// STYLE INTERFACES +// ============================================================================= +interface ContainerStyleProps { + $options?: HtmlContentStyleOptions | undefined; +} + +// ============================================================================= +// STYLING +// ============================================================================= +export const Container = styled.div` + ${(props) => applyHtmlContentStyle(props.$options)} +`; diff --git a/src/markup/markup.tsx b/src/markup/markup.tsx new file mode 100644 index 000000000..71b237779 --- /dev/null +++ b/src/markup/markup.tsx @@ -0,0 +1,24 @@ +import React, { forwardRef } from "react"; +import { Container } from "./markup.style"; +import { MarkupProps } from "./types"; + +const Component = (props: MarkupProps, ref: React.Ref) => { + // ========================================================================= + // CONST, STATE, REF + // ========================================================================= + const { baseTextColor, baseTextSize, inline, ...otherProps } = props; + + // ========================================================================= + // RENDER FUNCTION + // ========================================================================= + return ( + + ); +}; + +export const Markup = forwardRef(Component); diff --git a/src/markup/types.ts b/src/markup/types.ts new file mode 100644 index 000000000..1a293a6fa --- /dev/null +++ b/src/markup/types.ts @@ -0,0 +1,13 @@ +import { TextSizeType } from "../text"; + +export interface MarkupProps extends React.HTMLAttributes { + /** The default font size. If not specified, inherited from the parent */ + baseTextSize?: TextSizeType | undefined; + /** The default font color. If not specified, inherited from the parent */ + baseTextColor?: string | ((props: unknown) => string) | undefined; + /** + * Specifies if element is rendered as block element `div` or inline + * element `span` + */ + inline?: boolean | undefined; +} diff --git a/src/popover-v2/popover.styles.tsx b/src/popover-v2/popover.styles.tsx index 8d7d9c008..6faaa2f31 100644 --- a/src/popover-v2/popover.styles.tsx +++ b/src/popover-v2/popover.styles.tsx @@ -1,5 +1,6 @@ import styled from "styled-components"; import { Card } from "../card"; +import { Color } from "../color"; import { MediaQuery } from "../media"; import { ModalBox } from "../modal/modal-box"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; @@ -14,7 +15,10 @@ export const PopoverContainer = styled.div` `; export const PopoverCard = styled(Card)` - ${applyHtmlContentStyle("BodySmall")} + ${applyHtmlContentStyle({ + textSize: "BodySmall", + textColor: Color.Neutral[1], + })} ${MediaQuery.MaxWidth.mobileL} { display: none; @@ -32,5 +36,8 @@ export const ContentWrapper = styled.div` display: none; /* Chrome/Safari/Webkit */ } - ${applyHtmlContentStyle("BodySmall")} + ${applyHtmlContentStyle({ + textSize: "BodySmall", + textColor: Color.Neutral[1], + })} `; diff --git a/src/shared/html-content/html-content.ts b/src/shared/html-content/html-content.ts index ba69f3314..632a7e757 100644 --- a/src/shared/html-content/html-content.ts +++ b/src/shared/html-content/html-content.ts @@ -1,25 +1,27 @@ import { css } from "styled-components"; import { Color } from "../../color"; +import { FontFamily } from "../../spec/text-spec/font-spec"; import { TextLinkSizeType, TextSizeType, TextStyleHelper } from "../../text"; -interface HtmlContentStyleOptions { - textColor?: string | ((props: any) => string); +export interface HtmlContentStyleOptions { + textSize?: TextSizeType | TextLinkSizeType | undefined; + textColor?: string | ((props: any) => string) | undefined; } -export const applyHtmlContentStyle = ( - textStyle: TextSizeType | TextLinkSizeType, - options?: HtmlContentStyleOptions -) => { - const { textColor = Color.Neutral[1] } = options || {}; +export const applyHtmlContentStyle = (options?: HtmlContentStyleOptions) => { + const { textSize, textColor } = options || {}; return css` - // Text - ${TextStyleHelper.getTextStyle(textStyle, "regular")} - color: ${textColor}; - - a, + // Text styling + ${textSize && TextStyleHelper.getTextStyle(textSize, "regular")} + ${textColor && + css` + color: ${textColor}; + `} + strong { - ${TextStyleHelper.getTextStyle(textStyle, "semibold")} + font-family: ${FontFamily.OpenSans.Semibold}; + ${textSize && TextStyleHelper.getTextStyle(textSize, "semibold")} } p { @@ -28,11 +30,22 @@ export const applyHtmlContentStyle = ( // Link styling a { + font-family: ${FontFamily.OpenSans.Semibold}; + ${textSize && TextStyleHelper.getTextStyle(textSize, "semibold")} color: ${Color.Primary}; text-decoration: none; + svg { + color: ${Color.Primary}; + height: 1rem; + width: 1rem; + margin-left: 0.4rem; + vertical-align: baseline; + } + :hover, :active, + :visited, :focus { color: ${Color.Secondary}; diff --git a/stories/markup/markup.mdx b/stories/markup/markup.mdx new file mode 100644 index 000000000..8d2593d39 --- /dev/null +++ b/stories/markup/markup.mdx @@ -0,0 +1,17 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Secondary, Title } from "../storybook-common"; +import * as MarkupStories from "./markup.stories"; + + + +Markup + +Overview + +A component that sets styling for commonly used markup such as `` or ``. + +```tsx +import { Markup } from "@lifesg/react-design-system/markup"; +``` + + diff --git a/stories/markup/markup.stories.tsx b/stories/markup/markup.stories.tsx new file mode 100644 index 000000000..5e0c4b76c --- /dev/null +++ b/stories/markup/markup.stories.tsx @@ -0,0 +1,44 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Markup } from "src/markup"; + +type Component = typeof Markup; + +const meta: Meta = { + title: "General/Markup", + component: Markup, +}; + +export default meta; + +export const Default: StoryObj = { + render: () => ( + +

+ You can use bold text to emphasise important + information +

+
+

+ Or add a{" "} + + hyperlink + {" "} + to direct users to some external source +

+
+

This also supports bullet points:

+
    +
  • List item
  • +
  • List item
  • +
  • List item
  • +
+
+

As well as numbered lists:

+
    +
  1. List item
  2. +
  3. List item
  4. +
  5. List item
  6. +
+ + ), +}; From 9fde8ab76133a38dbfdfa5b95ffaf5c8082d255f Mon Sep 17 00:00:00 2001 From: roll Date: Wed, 22 May 2024 21:44:36 +0800 Subject: [PATCH 0119/1949] [CCUBE-1360][RL] Add documentation --- stories/markup/markup.mdx | 9 +++++ stories/markup/markup.stories.tsx | 14 +++++++- stories/markup/props-table.tsx | 56 +++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 stories/markup/props-table.tsx diff --git a/stories/markup/markup.mdx b/stories/markup/markup.mdx index 8d2593d39..fe151e720 100644 --- a/stories/markup/markup.mdx +++ b/stories/markup/markup.mdx @@ -1,6 +1,7 @@ import { Canvas, Meta } from "@storybook/blocks"; import { Secondary, Title } from "../storybook-common"; import * as MarkupStories from "./markup.stories"; +import { PropsTable } from "./props-table"; @@ -15,3 +16,11 @@ import { Markup } from "@lifesg/react-design-system/markup"; ``` + +By default, text will inherit the parent's font style and color. + + + +Component API + + diff --git a/stories/markup/markup.stories.tsx b/stories/markup/markup.stories.tsx index 5e0c4b76c..188fde6e4 100644 --- a/stories/markup/markup.stories.tsx +++ b/stories/markup/markup.stories.tsx @@ -1,4 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; +import { Color } from "src/color"; import { Markup } from "src/markup"; type Component = typeof Markup; @@ -12,7 +13,7 @@ export default meta; export const Default: StoryObj = { render: () => ( - +

You can use bold text to emphasise important information @@ -42,3 +43,14 @@ export const Default: StoryObj = { ), }; + +export const Inheritance: StoryObj = { + render: () => ( +

+ + Font style and color are inherited. In particular, this is what{" "} + bolded and link elements look like + +
+ ), +}; diff --git a/stories/markup/props-table.tsx b/stories/markup/props-table.tsx new file mode 100644 index 000000000..bdc7de098 --- /dev/null +++ b/stories/markup/props-table.tsx @@ -0,0 +1,56 @@ +import { ApiTable, code } from "../storybook-common/api-table"; +import { ApiTableSectionProps } from "../storybook-common/api-table/types"; + +const DATA: ApiTableSectionProps[] = [ + { + attributes: [ + { + name: "", + description: ( + <> + This component also inherits props from  + + HTMLDivAttributes + + + ), + }, + { + name: "baseTextSize", + description: + "The default font size. If not specified, inherited from the parent", + propTypes: ( + + TextSizeType + + ), + }, + { + name: "baseTextColor", + description: + "The default font color. Supports theming. If not specified, inherited from the parent", + propTypes: ["string", "(props: unknown) => string"], + }, + { + name: "inline", + description: ( + <> + Specifies if component is a block {code("
")}{" "} + element or inline {code("")} element + + ), + propTypes: ["boolean"], + }, + ], + }, +]; + +export const PropsTable = () => ; From 1a47aee5688f5019823b7fb581452cb2eaba6cd7 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 23 May 2024 09:29:59 +0800 Subject: [PATCH 0120/1949] [CCUBE-1360][RL] Export component at top level --- src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.ts b/src/index.ts index 164fbf996..34f925247 100644 --- a/src/index.ts +++ b/src/index.ts @@ -39,6 +39,7 @@ export * from "./input-slider"; export * from "./input-textarea"; export * from "./layout"; export * from "./link-list"; +export * from "./markup"; export * from "./masked-input"; export * from "./masonry"; export * from "./masthead"; From 4ddaa94e5d667d200e0cd07e60a8f7625dbc6379 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 23 May 2024 12:35:18 +0800 Subject: [PATCH 0121/1949] [CCUBE-1360][RL] Style color from css --- src/alert/alert.style.tsx | 11 +++-------- src/file-upload/file-upload.styles.tsx | 12 ++++-------- src/markup/markup.style.tsx | 12 +++++++++--- src/markup/markup.tsx | 3 ++- src/popover-v2/popover.styles.tsx | 12 ++++-------- src/shared/html-content/html-content.ts | 13 ++++--------- 6 files changed, 26 insertions(+), 37 deletions(-) diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index f4cc9dc67..79ef7924d 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -66,17 +66,12 @@ export const Wrapper = styled.div` `; }} + color: ${Color.Neutral[1]}; ${(props) => { if (props.$sizeType === "small") { - return applyHtmlContentStyle({ - textSize: "H6", - textColor: Color.Neutral[1], - }); + return applyHtmlContentStyle({ textSize: "H6" }); } - return applyHtmlContentStyle({ - textSize: "BodySmall", - textColor: Color.Neutral[1], - }); + return applyHtmlContentStyle({ textSize: "BodySmall" }); }} `; diff --git a/src/file-upload/file-upload.styles.tsx b/src/file-upload/file-upload.styles.tsx index 889a30147..e74331916 100644 --- a/src/file-upload/file-upload.styles.tsx +++ b/src/file-upload/file-upload.styles.tsx @@ -20,10 +20,8 @@ export const Title = styled(Text.H4)` `; export const TitleContainer = styled.div` - ${applyHtmlContentStyle({ - textSize: "Body", - textColor: Color.Neutral[1], - })} + color: ${Color.Neutral[1]}; + ${applyHtmlContentStyle({ textSize: "Body" })} `; export const Description = styled(Text.BodySmall)` @@ -32,10 +30,8 @@ export const Description = styled(Text.BodySmall)` `; export const DescriptionContainer = styled.div` - ${applyHtmlContentStyle({ - textSize: "BodySmall", - textColor: Color.Neutral[3], - })} + color: ${Color.Neutral[3]}; + ${applyHtmlContentStyle({ textSize: "BodySmall" })} `; export const WarningAlert = styled(Alert)` diff --git a/src/markup/markup.style.tsx b/src/markup/markup.style.tsx index 39810fb84..396d4ed56 100644 --- a/src/markup/markup.style.tsx +++ b/src/markup/markup.style.tsx @@ -1,4 +1,4 @@ -import styled from "styled-components"; +import styled, { css } from "styled-components"; import { HtmlContentStyleOptions, applyHtmlContentStyle, @@ -8,12 +8,18 @@ import { // STYLE INTERFACES // ============================================================================= interface ContainerStyleProps { - $options?: HtmlContentStyleOptions | undefined; + $textSize?: HtmlContentStyleOptions["textSize"] | undefined; + $textColor?: string | ((props: unknown) => string) | undefined; } // ============================================================================= // STYLING // ============================================================================= export const Container = styled.div` - ${(props) => applyHtmlContentStyle(props.$options)} + ${(props) => applyHtmlContentStyle({ textSize: props.$textSize })} + ${(props) => + props.color && + css` + color: ${props.color}; + `} `; diff --git a/src/markup/markup.tsx b/src/markup/markup.tsx index 71b237779..64ad8a5e3 100644 --- a/src/markup/markup.tsx +++ b/src/markup/markup.tsx @@ -15,7 +15,8 @@ const Component = (props: MarkupProps, ref: React.Ref) => { ); diff --git a/src/popover-v2/popover.styles.tsx b/src/popover-v2/popover.styles.tsx index 6faaa2f31..03a14ac33 100644 --- a/src/popover-v2/popover.styles.tsx +++ b/src/popover-v2/popover.styles.tsx @@ -15,10 +15,8 @@ export const PopoverContainer = styled.div` `; export const PopoverCard = styled(Card)` - ${applyHtmlContentStyle({ - textSize: "BodySmall", - textColor: Color.Neutral[1], - })} + color: ${Color.Neutral[1]}; + ${applyHtmlContentStyle({ textSize: "BodySmall" })} ${MediaQuery.MaxWidth.mobileL} { display: none; @@ -36,8 +34,6 @@ export const ContentWrapper = styled.div` display: none; /* Chrome/Safari/Webkit */ } - ${applyHtmlContentStyle({ - textSize: "BodySmall", - textColor: Color.Neutral[1], - })} + color: ${Color.Neutral[1]}; + ${applyHtmlContentStyle({ textSize: "BodySmall" })} `; diff --git a/src/shared/html-content/html-content.ts b/src/shared/html-content/html-content.ts index 632a7e757..c819b643d 100644 --- a/src/shared/html-content/html-content.ts +++ b/src/shared/html-content/html-content.ts @@ -1,24 +1,19 @@ import { css } from "styled-components"; import { Color } from "../../color"; import { FontFamily } from "../../spec/text-spec/font-spec"; -import { TextLinkSizeType, TextSizeType, TextStyleHelper } from "../../text"; +import { TextSizeType, TextStyleHelper } from "../../text"; export interface HtmlContentStyleOptions { - textSize?: TextSizeType | TextLinkSizeType | undefined; - textColor?: string | ((props: any) => string) | undefined; + textSize?: TextSizeType | undefined; } export const applyHtmlContentStyle = (options?: HtmlContentStyleOptions) => { - const { textSize, textColor } = options || {}; + const { textSize } = options || {}; return css` // Text styling ${textSize && TextStyleHelper.getTextStyle(textSize, "regular")} - ${textColor && - css` - color: ${textColor}; - `} - + strong { font-family: ${FontFamily.OpenSans.Semibold}; ${textSize && TextStyleHelper.getTextStyle(textSize, "semibold")} From 9bd01a69fd3585b9cb23b00052ebfd11ec370e3d Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Thu, 23 May 2024 15:16:27 +0800 Subject: [PATCH 0122/1949] [RBS-1266][DS] small change in maxCollapsedHeight docs to clarify --- .../notification-banner.mdx | 7 ++++- .../notification-banner.stories.tsx | 31 ++++++++++++------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/stories/notification-banner/notification-banner.mdx b/stories/notification-banner/notification-banner.mdx index 174dd1679..6539c3517 100644 --- a/stories/notification-banner/notification-banner.mdx +++ b/stories/notification-banner/notification-banner.mdx @@ -60,9 +60,14 @@ The `NotificationBanner` allows performing of an action when clicked. With max collapsed height -You can restrict the height of content by setting `maxCollapsedHeight` to a +Handling long content + +You can restrict the height of content by setting maxCollapsedHeight to a desired value in px. +A button can also be configured to perform some action, +such as redirecting the user to another page. + With action button diff --git a/stories/notification-banner/notification-banner.stories.tsx b/stories/notification-banner/notification-banner.stories.tsx index d0a4ea526..df98196fd 100644 --- a/stories/notification-banner/notification-banner.stories.tsx +++ b/stories/notification-banner/notification-banner.stories.tsx @@ -265,9 +265,20 @@ export const ClickableBanner: StoryObj = { export const WithMaxCollapsedHeight: StoryObj = { render: () => { + const [showParagraph, setShowParagraph] = useState(false); + return (
- + + View more + + + ), + onClick: () => setShowParagraph(!showParagraph), + }}> This is a notification banner with maxCollapsedHeight set. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna @@ -279,17 +290,13 @@ export const WithMaxCollapsedHeight: StoryObj = { deserunt mollit anim id est laborum. - - Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore - magna aliqua. Ut enim ad minim veniam, quis nostrud - exercitation ullamco laboris nisi ut aliquip ex ea - commodo consequat. Duis aute irure dolor in - reprehenderit in voluptate velit esse cillum dolore eu - fugiat nulla pariatur. Excepteur sint occaecat cupidatat - non proident, sunt in culpa qui officia deserunt mollit - anim id est laborum. - + {showParagraph && ( + + Lorem ipsum dolor sit amet, consectetur adipiscing + elit, sed do eiusmod tempor incididunt ut labore et + dolore magna aliqua + + )}
); From d63594b71d6404f753e3df968483731efc746277 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Thu, 23 May 2024 16:10:23 +0800 Subject: [PATCH 0123/1949] [RBS-1266][DS] rework notification story for long content --- .../notification-banner.mdx | 10 +-- .../notification-banner.stories.tsx | 61 ++----------------- 2 files changed, 7 insertions(+), 64 deletions(-) diff --git a/stories/notification-banner/notification-banner.mdx b/stories/notification-banner/notification-banner.mdx index 6539c3517..f264328f1 100644 --- a/stories/notification-banner/notification-banner.mdx +++ b/stories/notification-banner/notification-banner.mdx @@ -58,9 +58,7 @@ The `NotificationBanner` allows performing of an action when clicked. -With max collapsed height - -Handling long content +Handling long content You can restrict the height of content by setting maxCollapsedHeight to a desired value in px. @@ -68,11 +66,7 @@ desired value in px. A button can also be configured to perform some action, such as redirecting the user to another page. - - -With action button - - + Using as a Higher Order Component (HOC) diff --git a/stories/notification-banner/notification-banner.stories.tsx b/stories/notification-banner/notification-banner.stories.tsx index df98196fd..1477b5657 100644 --- a/stories/notification-banner/notification-banner.stories.tsx +++ b/stories/notification-banner/notification-banner.stories.tsx @@ -263,10 +263,8 @@ export const ClickableBanner: StoryObj = { }, }; -export const WithMaxCollapsedHeight: StoryObj = { +export const HandlingLongContent: StoryObj = { render: () => { - const [showParagraph, setShowParagraph] = useState(false); - return (
= { ), - onClick: () => setShowParagraph(!showParagraph), + onClick: (event) => { + event.preventDefault(); + alert("I got clicked"); + }, }}> This is a notification banner with maxCollapsedHeight set. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed @@ -289,58 +290,6 @@ export const WithMaxCollapsedHeight: StoryObj = { occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - - {showParagraph && ( - - Lorem ipsum dolor sit amet, consectetur adipiscing - elit, sed do eiusmod tempor incididunt ut labore et - dolore magna aliqua - - )} - -
- ); - }, -}; - -export const WithActionButton: StoryObj = { - render: () => { - const [showParagraph, setShowParagraph] = useState(false); - return ( -
- - View more - - - ), - onClick: () => setShowParagraph(!showParagraph), - }} - > - This is a notification banner with an action button set. - - - - Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore - magna aliqua. Ut enim ad minim veniam, quis nostrud - exercitation ullamco laboris nisi ut aliquip ex ea - commodo consequat. Duis aute irure dolor in - reprehenderit in voluptate velit esse cillum dolore eu - fugiat nulla pariatur. Excepteur sint occaecat cupidatat - non proident, sunt in culpa qui officia deserunt mollit - anim id est laborum. - - {showParagraph && ( - - Lorem ipsum dolor sit amet, consectetur adipiscing - elit, sed do eiusmod tempor incididunt ut labore et - dolore magna aliqua - - )} -
); }, From 1dd95895ee53400d511443b7e371b7cdb92f003d Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Thu, 23 May 2024 16:13:12 +0800 Subject: [PATCH 0124/1949] [RBS-1266][DS] minor copy change --- stories/notification-banner/notification-banner.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/notification-banner/notification-banner.mdx b/stories/notification-banner/notification-banner.mdx index f264328f1..6ae5ce8fd 100644 --- a/stories/notification-banner/notification-banner.mdx +++ b/stories/notification-banner/notification-banner.mdx @@ -60,7 +60,7 @@ The `NotificationBanner` allows performing of an action when clicked. Handling long content -You can restrict the height of content by setting maxCollapsedHeight to a +You can restrict the height of content by setting `maxCollapsedHeight` to a desired value in px. A button can also be configured to perform some action, From d0070a669f7505e5cf361cbaf1501ebb224918d9 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 24 May 2024 12:13:00 +0800 Subject: [PATCH 0125/1949] [MISC][RL] Bump 2.6.0-canary.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5c8b303f3..ebc01112b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.1", + "version": "2.6.0-canary.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.1", + "version": "2.6.0-canary.2", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index a580dea6f..ea685ee71 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.1", + "version": "2.6.0-canary.2", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From b44449ef2a2a9d903c7ed7787a0c14a071466bf5 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Wed, 29 May 2024 12:20:58 +0800 Subject: [PATCH 0126/1949] [MOL-15775][AM] Create composite option component --- src/composite-option/composite-option.tsx | 314 ++++++++++++++++++ .../compositeOption.styles.tsx | 256 ++++++++++++++ src/composite-option/index.ts | 2 + src/composite-option/types.ts | 47 +++ 4 files changed, 619 insertions(+) create mode 100644 src/composite-option/composite-option.tsx create mode 100644 src/composite-option/compositeOption.styles.tsx create mode 100644 src/composite-option/index.ts create mode 100644 src/composite-option/types.ts diff --git a/src/composite-option/composite-option.tsx b/src/composite-option/composite-option.tsx new file mode 100644 index 000000000..81475620f --- /dev/null +++ b/src/composite-option/composite-option.tsx @@ -0,0 +1,314 @@ +import { ChevronDownIcon, ChevronUpIcon } from "@lifesg/react-icons"; +import { MouseEvent, useEffect, useState } from "react"; +import { ToggleIcon } from "../shared/toggle-icon/toggle-icon"; +import { + AlertContainer, + ButtonContainer, + ButtonLabel, + Children, + ChildrenContainer, + CompositeOptionSelector, + Container, + ErrorListContainer, + ErrorListItem, + ErrorListli, + ErrorMessage, + HeaderContainer, + HeadingText, + Label, + SubLabel, + ViewMoreOrLessButtonContainer, + ViewMoreOrLessButtonLabel, +} from "./compositeOption.styles"; +import { TextList } from "../text-list"; +import { CompositeOptionProps } from "./types"; + +export type CompositeOptionType = "checkbox" | "radio"; + +export type ToggleIconType = "checkbox" | "radio"; + +export const CompositeOption = ({ + type = "checkbox", + checked, + disabled, + children, + title, + subtitle, + remove, + id, + hideMoreOrLessButton, + titleMaxLines, + className, + error, + errorMessage, + "data-testid": testId, + onClick, + showChildren, + errorList, + onRemove, +}: CompositeOptionProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const [selected, setSelected] = useState(checked); + const [showMore, setShowMore] = useState(!!showChildren); + const [showErrorList, setShowErrorList] = useState(false); + + // ============================================================================= + // EFFECTS + // ============================================================================= + useEffect(() => { + setSelected(checked); + }, [checked]); + + useEffect(() => { + if (selected !== undefined && showChildren === undefined) { + setShowMore(selected); + } + }, [selected, showChildren]); + + useEffect(() => { + if (errorList) { + const showErrorIfString = + !showMore && Array.isArray(errorList) && errorList?.length > 0; + const showErrorIfElement = !showMore && !Array.isArray(errorList); + if (!selected) { + setShowErrorList(!selected); + } else { + setShowErrorList(showErrorIfString || showErrorIfElement); + } + } + }, [showMore, errorList, selected]); + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + const handleOnClick = ( + event: MouseEvent + ) => { + event?.preventDefault(); + if (!disabled) { + if (onClick) { + onClick(event); + return; + } + + switch (type) { + case "checkbox": + setSelected((prevSelected) => { + return !prevSelected; + }); + break; + case "radio": + { + if (!selected) { + setSelected(true); + } + } + break; + } + } + }; + const handleView = () => { + if (!disabled) { + setShowMore(!showMore); + } + }; + + const handleOnRemove = () => { + if (!disabled) { + if (onRemove) { + onRemove(); + return; + } + } + }; + + const renderTitleOrSubtitle = (item, headerValue: "label" | "subLabel") => { + if (!item) { + return null; + } + + const Component = headerValue === "label" ? Label : SubLabel; + return ( + + {item} + + ); + }; + + const renderChildren = () => { + if (!children) { + return null; + } + const ChildrenisFinalItem = hideMoreOrLessButton || remove; + return ( + + {children} + + ); + }; + const renderViewMoreOrLessButton = () => { + const errorMssgOrChildrenShown = showMore || showErrorList; + return ( + <> +
+ handleView()} + data-testid="toggle-button" + > + + {showMore ? "Show less" : "Show more"} + + {showMore ? : } + + + ); + }; + + const renderErrorsList = () => { + return ( + !showMore && + showErrorList && ( + handleView()} + data-testid="error-alert" + > + + {Array.isArray(errorList) ? ( + <> + + Error + + + {errorList?.map((item, index) => { + return ( + + + {item} + + + ); + })} + + + ) : ( + errorList + )} + + + ) + ); + }; + + return ( + <> + + + handleOnClick(e)} + id={`selector-${id}`} + role={type} + aria-checked={selected} + > + + + {renderTitleOrSubtitle(title, "label")} + {renderTitleOrSubtitle(subtitle, "subLabel")} + + + {remove && ( + <> + + + Remove + + + + )} + + + {children && ( + + {renderChildren()} + {!remove && ( + <> + {renderErrorsList()} + {renderViewMoreOrLessButton()} + + )} + + )} + + {errorMessage && ( + + {errorMessage} + + )} + + ); +}; + +export default CompositeOption; diff --git a/src/composite-option/compositeOption.styles.tsx b/src/composite-option/compositeOption.styles.tsx new file mode 100644 index 000000000..e5fe12463 --- /dev/null +++ b/src/composite-option/compositeOption.styles.tsx @@ -0,0 +1,256 @@ +import styled, { css } from "styled-components"; +import { Color } from "../color"; +import { Text, TextStyleHelper } from "../text"; +import { MediaQuery } from "../media"; +import { Alert } from "../alert"; +// ============================================================================= +// STYLE INTERFACES, transient props are denoted with $ +// See more https://styled-components.com/docs/api#transient-props +// ============================================================================= +interface StyleProps { + $selected?: boolean; + $disabled?: boolean; +} + +interface ContainerStyleProps extends StyleProps { + $error?: boolean; +} + +interface LabelStyleProps extends StyleProps { + $maxLines?: { desktop?: number; mobile?: number }; +} + +interface ButtonStyleProps extends StyleProps { + $show?: boolean; +} + +interface ChildrenStyleProps extends StyleProps { + $isNotFinalItem?: boolean; +} + +// ============================================================================= +// STYLING +// ============================================================================= +export const Container = styled.div` + width: 100%; + position: relative; + display: inline-flex; + border-radius: 0.125rem; + border-width: 0.063rem; + border-style: solid; + flex-direction: column; + height: fit-content; + + // Background, Hover and Border style + ${(props) => { + if (props.$disabled && !props.$selected) { + return css` + border-color: ${Color.Neutral[5]}; + `; + } else if (props.$disabled && props.$selected) { + return css` + border-color: ${Color.Neutral[4]}; + `; + } else if (props.$error) { + return css` + border-color: ${Color.Validation.Red.Border}; + + :hover { + box-shadow: 0 0 0.25rem 0.063rem ${Color.Shadow.Red}; + } + `; + } else if (props.$selected) { + return css` + border-color: ${Color.Primary}; + + :hover { + box-shadow: 0 0 0.25rem 0.063rem ${Color.Shadow.Accent}; + } + `; + } else { + return css` + background: ${Color.Neutral[8]}; + border-color: ${Color.Neutral[5]}; + + :hover { + box-shadow: 0 0 0.25rem 0.063rem ${Color.Shadow.Accent}; + border-color: ${Color.Accent.Light[1]}; + } + `; + } + }} +`; + +export const HeaderContainer = styled.div` + display: flex; + padding: 0.688rem; + align-items: flex-start; + justify-content: space-between; + ${(props) => { + if (props.$disabled && !props.$selected) { + return css` + background: ${Color.Neutral[6]}; + `; + } else if (props.$disabled && props.$selected) { + return css` + background: ${Color.Neutral[6]}; + `; + } else if (props.$error) { + return css` + background: ${Color.Neutral[8]}; + `; + } else if (props.$selected) { + return css` + background: ${Color.Accent.Light[5]}; + `; + } else { + return css` + background: ${Color.Neutral[8]}; + `; + } + }} +`; + +export const CompositeOptionSelector = styled.div` + display: flex; + cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; + height: 100%; + width: 100%; +`; +export const HeadingText = styled.div` + display: flex; + flex-direction: column; +`; + +export const ButtonLabel = styled.label` + ${TextStyleHelper.getTextStyle("H4", "semibold")}; + line-height: 1.375rem; + color: ${Color.Validation.Red[1]}; + cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; +`; +export const Label = styled.label` + ${TextStyleHelper.getTextStyle("H4", "regular")} + + user-select: none; + overflow: hidden; + display: -webkit-inline-box; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + overflow-wrap: break-word; + cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; + -webkit-line-clamp: ${(props) => props.$maxLines?.desktop ?? "none"}; + ${MediaQuery.MaxWidth.tablet} { + -webkit-line-clamp: ${(props) => props.$maxLines?.mobile ?? "none"}; + } + + ${(props) => { + if (props.$disabled) { + return css` + color: ${Color.Neutral[3]}; + `; + } else if (props.$selected) { + return css` + color: ${Color.Primary}; + `; + } else { + return css` + color: ${Color.Neutral[1]}; + `; + } + }} +`; +export const SubLabel = styled(Label)` + ${TextStyleHelper.getTextStyle("BodySmall", "regular")} + margin-top: 0.5rem; +`; + +export const ViewMoreOrLessButtonLabel = styled(Text.H4)` + color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; + margin-right: 0.5rem; +`; + +export const ButtonContainer = styled.button` + color: ${(props) => + props.$disabled ? Color.Neutral[3] : Color.Validation.Red.Icon}; + white-space: nowrap; + height: fit-content; + padding-top: 0rem; + padding-bottom: 0rem; + border: none; + background: none; + cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; +`; +export const ViewMoreOrLessButtonContainer = styled.button` + color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; + width: 100%; + justify-content: flex-end; + align-items: center; + padding-bottom: 0.688rem; + border: none; + background: none; + cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; + float: right; + display: ${(props) => (props.$show ? "flex" : "none")}; +`; +export const ErrorListContainer = styled.div` + width: 100%; + color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; + border: none; + background: none; + cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; + display: ${(props) => (props.$show ? "flex" : "none")}; + padding-top: 0.688rem; + padding-bottom: ${(props) => (!props.$show ? "0.688rem" : "0.5rem")}; +`; + +export const AlertContainer = styled(Alert)` + width: 100%; + user-select: none; +`; +export const ChildrenContainer = styled.div` + padding: 0 1rem; +`; + +export const ErrorMessage = styled(Text.H6)` + color: ${Color.Validation.Red.Text}; + margin-top: 0.5rem; + margin-bottom: 0; + outline: none; +`; + +export const Children = styled.div` + ${TextStyleHelper.getTextStyle("BodySmall", "regular")} + padding-top: 0.688rem; + padding-bottom: ${(props) => + props.$isNotFinalItem ? "0.5rem" : "0.688rem"}; + display: ${(props) => (props.$selected ? "flex" : "none")}; + strong, + b { + ${TextStyleHelper.getFontFamily("BodySmall", "semibold")} + color: inherit; + } + + ${(props) => { + if (props.$disabled) { + return css` + color: ${Color.Neutral[3]}; + `; + } else if (props.$selected) { + return css` + color: ${Color.Primary}; + `; + } else { + return css` + color: ${Color.Neutral[1]}; + `; + } + }} +`; + +export const ErrorListItem = styled(Text.H5)` + color: ${(props) => (props.$disabled ? Color.Neutral[3] : "#C60000")}; +`; +export const ErrorListli = styled.li` + color: ${(props) => + props.$disabled ? Color.Neutral[3] : "#C60000"} !important; +`; diff --git a/src/composite-option/index.ts b/src/composite-option/index.ts new file mode 100644 index 000000000..32ad1f1fa --- /dev/null +++ b/src/composite-option/index.ts @@ -0,0 +1,2 @@ +export { default } from "./composite-option"; +export * from "./composite-option"; diff --git a/src/composite-option/types.ts b/src/composite-option/types.ts new file mode 100644 index 000000000..61be85dc1 --- /dev/null +++ b/src/composite-option/types.ts @@ -0,0 +1,47 @@ +import { MouseEvent } from "react"; + +export type CompositeOptionType = "checkbox" | "radio"; + +export interface CompositeOptionProps + extends React.DOMAttributes { + /** + * The type of toggle. Values: "checkbox" | "radio" + * + * "checkbox" - allows deselection + * + * "radio" - does not allow deselection. However they + * will determine the indicator to be displayed + */ + type?: CompositeOptionType | undefined; + + /** Indicates if the element is checked */ + checked?: boolean | undefined; + disabled?: boolean | undefined; + /** The Composite Option title */ + title: string | JSX.Element; + titleMaxLines?: { mobile?: number; desktop?: number } | undefined; + /** The Composite Option subtitle */ + subtitle?: string | JSX.Element; + /** The children inside the composite option */ + children?: React.ReactNode; + showChildren?: boolean | undefined; + /** specifies to show or hide view more or less button when remove button is not present */ + hideMoreOrLessButton?: boolean; + onClick?: + | (( + event?: + | MouseEvent + | undefined + ) => void) + | undefined; + /** specifies the list of errors that has to be shown inside the composite-option container when the show less button is clicked*/ + errorList?: string[] | JSX.Element | undefined; + /** Specifies if the error display should be present */ + error?: boolean | undefined; + errorMessage?: string; + remove?: boolean | undefined; + onRemove?: (() => void) | undefined; + id?: string | undefined; + className?: string | undefined; + "data-testid"?: string | undefined; +} From 1162d24a452304897564a44c04b33a98964a3fc7 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Wed, 29 May 2024 12:45:35 +0800 Subject: [PATCH 0127/1949] [MOL-15775][AM] Document composite option stories --- .../composite-option-1-collapsible.mdx | 11 + ...composite-option-1-collapsible.stories.tsx | 297 ++++++++++++++++++ .../composite-option-2-removable.mdx | 11 + .../composite-option-2-removable.stories.tsx | 166 ++++++++++ stories/composite-option/composite-option.mdx | 46 +++ .../composite-option.stories.tsx | 243 ++++++++++++++ stories/composite-option/doc-elements.tsx | 112 +++++++ stories/composite-option/props-table.tsx | 152 +++++++++ 8 files changed, 1038 insertions(+) create mode 100644 stories/composite-option/composite-option-1-collapsible.mdx create mode 100644 stories/composite-option/composite-option-1-collapsible.stories.tsx create mode 100644 stories/composite-option/composite-option-2-removable.mdx create mode 100644 stories/composite-option/composite-option-2-removable.stories.tsx create mode 100644 stories/composite-option/composite-option.mdx create mode 100644 stories/composite-option/composite-option.stories.tsx create mode 100644 stories/composite-option/doc-elements.tsx create mode 100644 stories/composite-option/props-table.tsx diff --git a/stories/composite-option/composite-option-1-collapsible.mdx b/stories/composite-option/composite-option-1-collapsible.mdx new file mode 100644 index 000000000..c05a026b4 --- /dev/null +++ b/stories/composite-option/composite-option-1-collapsible.mdx @@ -0,0 +1,11 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../storybook-common"; +import * as CompositeOptionIndicatorStories from "./composite-option-1-collapsible.stories"; +import { PropsTable } from "./props-table"; + + + +Collapsible + + + diff --git a/stories/composite-option/composite-option-1-collapsible.stories.tsx b/stories/composite-option/composite-option-1-collapsible.stories.tsx new file mode 100644 index 000000000..eae09fcaf --- /dev/null +++ b/stories/composite-option/composite-option-1-collapsible.stories.tsx @@ -0,0 +1,297 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { useState } from "react"; +import { CompositeOption } from "src/composite-option"; +import { Form } from "../../src/form"; +import { Headings, HeadingsNextLine, Wrapper } from "./doc-elements"; + +type Component = typeof CompositeOption; + +const meta: Meta = { + title: "Data Input/CompositeOption/collapsible", + component: CompositeOption, +}; +export default meta; + +export const CheckboxCollapsible: StoryObj = { + render: () => { + const [checkboxError, setCheckboxError] = useState< + string[] | undefined + >(["Enter a label"]); + + const onChangeHandler = (inputVal) => { + if (inputVal === "") { + setCheckboxError(["Enter a label"]); + } else { + setCheckboxError([]); + } + }; + return ( + + +
+ + ({})} + /> + + + ({})} + /> + + +
+ + ({})} + /> + +
+ + ({})} + /> + + + ({})} + /> + +
+ + +
+ + ({})} + /> + + + + + onChangeHandler(event.target.value) + } + /> + + + Hello + +
+
+ ); + }, +}; + +export const RadioCollapsible: StoryObj = { + render: () => { + const [radioError, setRadioError] = useState([ + "Enter a label", + ]); + + const onChangeHandler = (inputVal) => { + if (inputVal === "") { + setRadioError(["Enter a label"]); + } else { + setRadioError([]); + } + }; + return ( + + +
+ + ({})} + /> + + + ({})} + /> + + +
+ + ({})} + /> + +
+ + ({})} + /> + + + ({})} + /> + +
+ + +
+ + ({})} + /> + + + + + onChangeHandler(event.target.value) + } + /> + + + Hello + +
+
+ ); + }, +}; diff --git a/stories/composite-option/composite-option-2-removable.mdx b/stories/composite-option/composite-option-2-removable.mdx new file mode 100644 index 000000000..56af3e662 --- /dev/null +++ b/stories/composite-option/composite-option-2-removable.mdx @@ -0,0 +1,11 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../storybook-common"; +import * as CompositeOptionIndicatorStories from "./composite-option-2-removable.stories"; +import { PropsTable } from "./props-table"; + + + +Removable + + + diff --git a/stories/composite-option/composite-option-2-removable.stories.tsx b/stories/composite-option/composite-option-2-removable.stories.tsx new file mode 100644 index 000000000..30f8c3fd6 --- /dev/null +++ b/stories/composite-option/composite-option-2-removable.stories.tsx @@ -0,0 +1,166 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { CompositeOption } from "src/composite-option"; +import { Form } from "../../src/form"; +import { Headings, Wrapper } from "./doc-elements"; + +type Component = typeof CompositeOption; + +const meta: Meta = { + title: "Data Input/CompositeOption/removable", + component: CompositeOption, +}; + +export default meta; + +export const CheckboxRemovable: StoryObj = { + render: () => { + return ( + + +
+ + ({})} + /> + + + ({})} + /> + + +
+ + ({})} + /> + +
+ + ({})} + /> + + + ({})} + /> + +
+
+ ); + }, +}; + +export const RadioRemovable: StoryObj = { + render: () => { + return ( + + +
+ + Hello + + + ({})} + /> + +
+ + ({})} + /> + +
+ + ({})} + /> + + + ({})} + /> + +
+
+ ); + }, +}; diff --git a/stories/composite-option/composite-option.mdx b/stories/composite-option/composite-option.mdx new file mode 100644 index 000000000..bc4c0c811 --- /dev/null +++ b/stories/composite-option/composite-option.mdx @@ -0,0 +1,46 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../storybook-common"; +import * as CompositeOptionIndicatorStories from "./composite-option.stories"; +import { PropsTable } from "./props-table"; + + + +Composite option + +Overview + +1. A checkbox/radio button that allows a user to enter a response by clicking. +2. it has 2 states Collapsible and Removable. +3. its shown with a different state when activated. + +```tsx +import { CompositeOption } from "@lifesg/react-design-system/composite-option"; +``` + + + +Behaviours + +The `Composite-option` can be used as a checkbox or radio button. This can be determined by the `type` prop. + +| Type | Behaviour | +| ---------- | --------------------------------- | +| `checkbox` | Checkbox, deselection is allowed | +| `radio` | Radio, deselection is not allowed | + +Click to see the interactions. + + + +Variants + +Click on the links to see the variants in depth. + +- [collapsible](/docs/data-input-compositeoption-collapsible--docs) +- [Removable](/docs/data-input-compositeoption-removable--docs) + +
+ +Component API + + diff --git a/stories/composite-option/composite-option.stories.tsx b/stories/composite-option/composite-option.stories.tsx new file mode 100644 index 000000000..c83d4db55 --- /dev/null +++ b/stories/composite-option/composite-option.stories.tsx @@ -0,0 +1,243 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { useState } from "react"; +import { CompositeOption } from "src/composite-option"; +import { Text } from "src/text"; +import { Form } from "../../src/form"; +import { + Headings, + HeadingsNextLine, + SimpleContainer, + Wrapper, +} from "./doc-elements"; +type Component = typeof CompositeOption; + +const meta: Meta = { + title: "Data Input/CompositeOption", + component: CompositeOption, +}; + +export default meta; + +export const Default: StoryObj = { + render: () => { + const [checkboxError, setCheckboxError] = useState< + string[] | undefined + >(["Enter a label"]); + + const onChangeHandler = (inputVal) => { + if (inputVal === "") { + setCheckboxError(["Enter a label"]); + } else { + setCheckboxError([]); + } + }; + return ( + + Collapsible + +
+ + ({})} + /> + + + ({})} + /> + + +
+ + ({})} + /> + +
+ + ({})} + /> + + + ({})} + /> + +
+ + +
+ + ({})} + /> + + + + + onChangeHandler(event.target.value) + } + /> + + + Hello + +
+ Removable + +
+ + ({})} + /> + + + ({})} + /> + + +
+ + ({})} + /> + +
+ + ({})} + /> + + + ({})} + /> + +
+
+ ); + }, +}; + +export const Behaviours: StoryObj = { + render: () => { + return ( + +
  • + Checkbox +
  • +
  • + + Radio + +
  • +
    + ); + }, +}; diff --git a/stories/composite-option/doc-elements.tsx b/stories/composite-option/doc-elements.tsx new file mode 100644 index 000000000..98e4dfa62 --- /dev/null +++ b/stories/composite-option/doc-elements.tsx @@ -0,0 +1,112 @@ +import styled, { css } from "styled-components"; +import { MediaQuery } from "../../src/media"; +import { Text } from "../../src/text"; + +interface StyleProps { + $layout?: "default" | "vertical"; +} + +// ============================================================================= +// STYLING +// ============================================================================= +export const Wrapper = styled.div` + ${(props) => { + if (props.$layout === "vertical") { + return css` + width: 100%; + display: grid; + grid-template: auto / repeat(3, minmax(0, 1fr)); + column-gap: 2rem; + + > div { + display: grid; + column-gap: 1.5rem; + row-gap: 1.5rem; + margin: 1rem 0; + + ${HeadingLabel} { + text-align: left; + align-self: center; + } + } + + ${MediaQuery.MaxWidth.mobileL} { + width: 100%; + display: flex; + flex-direction: column; + } + `; + } else { + return css` + > div { + display: grid; + grid-template: auto / repeat(5, minmax(0, 1fr)); + column-gap: 1.5rem; + row-gap: 1.5rem; + margin: 1rem 0; + } + + ${MediaQuery.MaxWidth.mobileL} { + width: 100%; + display: grid; + grid-template-columns: repeat(2, 1fr); + column-gap: 2rem; + + > div { + grid-template: unset; + } + } + `; + } + }} +`; + +export const HeadingLabel = styled(Text.H6)` + text-align: center; + + ${MediaQuery.MaxWidth.mobileL} { + text-align: left; + align-self: center; + } +`; + +export const SimpleContainer = styled.ul` + display: flex; + list-style: none; + + li { + :not(:last-child) { + margin-right: 1.5rem; + } + } +`; + +// ============================================================================= +// COMPONENTS +// ============================================================================= +export const Headings = () => { + return ( +
    + Default + Selected + Error + Disabled + Disabled Selected +
    + ); +}; +export const HeadingsNextLine = () => { + return ( +
    + + Hide Show more or less button + + + Selected with error list + + + Disabled Selected with error list + +
    + ); +}; diff --git a/stories/composite-option/props-table.tsx b/stories/composite-option/props-table.tsx new file mode 100644 index 000000000..757b48c62 --- /dev/null +++ b/stories/composite-option/props-table.tsx @@ -0,0 +1,152 @@ +import { ApiTable } from "../storybook-common/api-table"; +import { ApiTableSectionProps } from "../storybook-common/api-table/types"; + +const DATA: ApiTableSectionProps[] = [ + { + attributes: [ + { + name: "type", + description: ( + <> + The type of composite option + + ), + propTypes: [`"checkbox"`, `"radio"`], + defaultValue: `"checkbox"`, + }, + { + name: "checked", + description: "Specifies if the element is checked or selected", + propTypes: ["boolean"], + }, + { + name: "disabled", + description: + "Specifies if the element is disabled and non-interactable", + propTypes: ["boolean"], + }, + { + name: "title", + description: "The title of the element", + propTypes: ["string", "JSX.Element"], + }, + { + name: "titleMaxLines", + description: ( + <>Maximum number of lines to be shown in the title + ), + propTypes: ["number"], + }, + + { + name: "subtitle", + description: ( + <> + The description label of the{" "} + composite Option displayed below the main + label. + + ), + propTypes: ["string", "JSX.Element"], + }, + { + name: "children", + description: ( + <> + The description label of the{" "} + Composite Option displayed below the main + label. + + ), + propTypes: ["string", "JSX.Element"], + }, + { + name: "showChildren", + description: <>specifies if the children have to be shown, + propTypes: ["boolean"], + }, + { + name: "hideMoreOrLessButton", + description: ( + <> + specifies if show More Or{" "} + show Less Button is shown/hidden. if remove + prop is true then this props doesnt affect.{" "} + + ), + propTypes: ["boolean"], + }, + { + name: "onClick", + description: ( + <> + Called when the Composite Option is + selected or deselected + + ), + propTypes: [ + "(event: MouseEvent) => void", + ], + }, + { + name: "errorList", + description: + "Specifies if the internal errors should be displayed inside the container error list has to be displayed inside the container.", + propTypes: ["string[]", "JSX.Element"], + }, + { + name: "error", + description: + "Specifies if the container should be displayed with error.", + propTypes: ["boolean"], + }, + { + name: "errorMessage", + description: + "specifies error message to be displayed in error Color.", + propTypes: ["string"], + }, + { + name: "remove", + description: ( + <> + Specifies if the element has Remove button on top. if + remove is true then hideMoreOrLessButton{" "} + will not have anyeffect. it will always be true(hidden). + set showChildren to true if + the children have to be shown with remove{" "} + button. + + ), + propTypes: ["boolean"], + defaultValue: `false`, + }, + { + name: "onRemove", + description: ( + <> + Called when the Remove button is clicked + + ), + propTypes: ["() => void"], + }, + { + name: "id", + description: "The unique identifier of the element", + propTypes: ["string"], + }, + { + name: "className", + description: "The class selector of the element", + propTypes: ["string"], + }, + { + name: "data-testid", + description: "The test identifier of the element", + propTypes: ["string"], + }, + ], + }, +]; + +export const PropsTable = () => ; From 84425e9e2bed94ce59226c116b9581c9a24f4e63 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Thu, 30 May 2024 15:21:22 +0800 Subject: [PATCH 0128/1949] Revert "[MOL-15775][AM] Document composite option stories" This reverts commit 1162d24a452304897564a44c04b33a98964a3fc7. --- .../composite-option-1-collapsible.mdx | 11 - ...composite-option-1-collapsible.stories.tsx | 297 ------------------ .../composite-option-2-removable.mdx | 11 - .../composite-option-2-removable.stories.tsx | 166 ---------- stories/composite-option/composite-option.mdx | 46 --- .../composite-option.stories.tsx | 243 -------------- stories/composite-option/doc-elements.tsx | 112 ------- stories/composite-option/props-table.tsx | 152 --------- 8 files changed, 1038 deletions(-) delete mode 100644 stories/composite-option/composite-option-1-collapsible.mdx delete mode 100644 stories/composite-option/composite-option-1-collapsible.stories.tsx delete mode 100644 stories/composite-option/composite-option-2-removable.mdx delete mode 100644 stories/composite-option/composite-option-2-removable.stories.tsx delete mode 100644 stories/composite-option/composite-option.mdx delete mode 100644 stories/composite-option/composite-option.stories.tsx delete mode 100644 stories/composite-option/doc-elements.tsx delete mode 100644 stories/composite-option/props-table.tsx diff --git a/stories/composite-option/composite-option-1-collapsible.mdx b/stories/composite-option/composite-option-1-collapsible.mdx deleted file mode 100644 index c05a026b4..000000000 --- a/stories/composite-option/composite-option-1-collapsible.mdx +++ /dev/null @@ -1,11 +0,0 @@ -import { Canvas, Meta } from "@storybook/blocks"; -import { Heading3, Secondary, Title } from "../storybook-common"; -import * as CompositeOptionIndicatorStories from "./composite-option-1-collapsible.stories"; -import { PropsTable } from "./props-table"; - - - -Collapsible - - - diff --git a/stories/composite-option/composite-option-1-collapsible.stories.tsx b/stories/composite-option/composite-option-1-collapsible.stories.tsx deleted file mode 100644 index eae09fcaf..000000000 --- a/stories/composite-option/composite-option-1-collapsible.stories.tsx +++ /dev/null @@ -1,297 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react"; -import { useState } from "react"; -import { CompositeOption } from "src/composite-option"; -import { Form } from "../../src/form"; -import { Headings, HeadingsNextLine, Wrapper } from "./doc-elements"; - -type Component = typeof CompositeOption; - -const meta: Meta = { - title: "Data Input/CompositeOption/collapsible", - component: CompositeOption, -}; -export default meta; - -export const CheckboxCollapsible: StoryObj = { - render: () => { - const [checkboxError, setCheckboxError] = useState< - string[] | undefined - >(["Enter a label"]); - - const onChangeHandler = (inputVal) => { - if (inputVal === "") { - setCheckboxError(["Enter a label"]); - } else { - setCheckboxError([]); - } - }; - return ( - - -
    - - ({})} - /> - - - ({})} - /> - - -
    - - ({})} - /> - -
    - - ({})} - /> - - - ({})} - /> - -
    - - -
    - - ({})} - /> - - - - - onChangeHandler(event.target.value) - } - /> - - - Hello - -
    -
    - ); - }, -}; - -export const RadioCollapsible: StoryObj = { - render: () => { - const [radioError, setRadioError] = useState([ - "Enter a label", - ]); - - const onChangeHandler = (inputVal) => { - if (inputVal === "") { - setRadioError(["Enter a label"]); - } else { - setRadioError([]); - } - }; - return ( - - -
    - - ({})} - /> - - - ({})} - /> - - -
    - - ({})} - /> - -
    - - ({})} - /> - - - ({})} - /> - -
    - - -
    - - ({})} - /> - - - - - onChangeHandler(event.target.value) - } - /> - - - Hello - -
    -
    - ); - }, -}; diff --git a/stories/composite-option/composite-option-2-removable.mdx b/stories/composite-option/composite-option-2-removable.mdx deleted file mode 100644 index 56af3e662..000000000 --- a/stories/composite-option/composite-option-2-removable.mdx +++ /dev/null @@ -1,11 +0,0 @@ -import { Canvas, Meta } from "@storybook/blocks"; -import { Heading3, Secondary, Title } from "../storybook-common"; -import * as CompositeOptionIndicatorStories from "./composite-option-2-removable.stories"; -import { PropsTable } from "./props-table"; - - - -Removable - - - diff --git a/stories/composite-option/composite-option-2-removable.stories.tsx b/stories/composite-option/composite-option-2-removable.stories.tsx deleted file mode 100644 index 30f8c3fd6..000000000 --- a/stories/composite-option/composite-option-2-removable.stories.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react"; -import { CompositeOption } from "src/composite-option"; -import { Form } from "../../src/form"; -import { Headings, Wrapper } from "./doc-elements"; - -type Component = typeof CompositeOption; - -const meta: Meta = { - title: "Data Input/CompositeOption/removable", - component: CompositeOption, -}; - -export default meta; - -export const CheckboxRemovable: StoryObj = { - render: () => { - return ( - - -
    - - ({})} - /> - - - ({})} - /> - - -
    - - ({})} - /> - -
    - - ({})} - /> - - - ({})} - /> - -
    -
    - ); - }, -}; - -export const RadioRemovable: StoryObj = { - render: () => { - return ( - - -
    - - Hello - - - ({})} - /> - -
    - - ({})} - /> - -
    - - ({})} - /> - - - ({})} - /> - -
    -
    - ); - }, -}; diff --git a/stories/composite-option/composite-option.mdx b/stories/composite-option/composite-option.mdx deleted file mode 100644 index bc4c0c811..000000000 --- a/stories/composite-option/composite-option.mdx +++ /dev/null @@ -1,46 +0,0 @@ -import { Canvas, Meta } from "@storybook/blocks"; -import { Heading3, Secondary, Title } from "../storybook-common"; -import * as CompositeOptionIndicatorStories from "./composite-option.stories"; -import { PropsTable } from "./props-table"; - - - -Composite option - -Overview - -1. A checkbox/radio button that allows a user to enter a response by clicking. -2. it has 2 states Collapsible and Removable. -3. its shown with a different state when activated. - -```tsx -import { CompositeOption } from "@lifesg/react-design-system/composite-option"; -``` - - - -Behaviours - -The `Composite-option` can be used as a checkbox or radio button. This can be determined by the `type` prop. - -| Type | Behaviour | -| ---------- | --------------------------------- | -| `checkbox` | Checkbox, deselection is allowed | -| `radio` | Radio, deselection is not allowed | - -Click to see the interactions. - - - -Variants - -Click on the links to see the variants in depth. - -- [collapsible](/docs/data-input-compositeoption-collapsible--docs) -- [Removable](/docs/data-input-compositeoption-removable--docs) - -
    - -Component API - - diff --git a/stories/composite-option/composite-option.stories.tsx b/stories/composite-option/composite-option.stories.tsx deleted file mode 100644 index c83d4db55..000000000 --- a/stories/composite-option/composite-option.stories.tsx +++ /dev/null @@ -1,243 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react"; -import { useState } from "react"; -import { CompositeOption } from "src/composite-option"; -import { Text } from "src/text"; -import { Form } from "../../src/form"; -import { - Headings, - HeadingsNextLine, - SimpleContainer, - Wrapper, -} from "./doc-elements"; -type Component = typeof CompositeOption; - -const meta: Meta = { - title: "Data Input/CompositeOption", - component: CompositeOption, -}; - -export default meta; - -export const Default: StoryObj = { - render: () => { - const [checkboxError, setCheckboxError] = useState< - string[] | undefined - >(["Enter a label"]); - - const onChangeHandler = (inputVal) => { - if (inputVal === "") { - setCheckboxError(["Enter a label"]); - } else { - setCheckboxError([]); - } - }; - return ( - - Collapsible - -
    - - ({})} - /> - - - ({})} - /> - - -
    - - ({})} - /> - -
    - - ({})} - /> - - - ({})} - /> - -
    - - -
    - - ({})} - /> - - - - - onChangeHandler(event.target.value) - } - /> - - - Hello - -
    - Removable - -
    - - ({})} - /> - - - ({})} - /> - - -
    - - ({})} - /> - -
    - - ({})} - /> - - - ({})} - /> - -
    -
    - ); - }, -}; - -export const Behaviours: StoryObj = { - render: () => { - return ( - -
  • - Checkbox -
  • -
  • - - Radio - -
  • -
    - ); - }, -}; diff --git a/stories/composite-option/doc-elements.tsx b/stories/composite-option/doc-elements.tsx deleted file mode 100644 index 98e4dfa62..000000000 --- a/stories/composite-option/doc-elements.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import styled, { css } from "styled-components"; -import { MediaQuery } from "../../src/media"; -import { Text } from "../../src/text"; - -interface StyleProps { - $layout?: "default" | "vertical"; -} - -// ============================================================================= -// STYLING -// ============================================================================= -export const Wrapper = styled.div` - ${(props) => { - if (props.$layout === "vertical") { - return css` - width: 100%; - display: grid; - grid-template: auto / repeat(3, minmax(0, 1fr)); - column-gap: 2rem; - - > div { - display: grid; - column-gap: 1.5rem; - row-gap: 1.5rem; - margin: 1rem 0; - - ${HeadingLabel} { - text-align: left; - align-self: center; - } - } - - ${MediaQuery.MaxWidth.mobileL} { - width: 100%; - display: flex; - flex-direction: column; - } - `; - } else { - return css` - > div { - display: grid; - grid-template: auto / repeat(5, minmax(0, 1fr)); - column-gap: 1.5rem; - row-gap: 1.5rem; - margin: 1rem 0; - } - - ${MediaQuery.MaxWidth.mobileL} { - width: 100%; - display: grid; - grid-template-columns: repeat(2, 1fr); - column-gap: 2rem; - - > div { - grid-template: unset; - } - } - `; - } - }} -`; - -export const HeadingLabel = styled(Text.H6)` - text-align: center; - - ${MediaQuery.MaxWidth.mobileL} { - text-align: left; - align-self: center; - } -`; - -export const SimpleContainer = styled.ul` - display: flex; - list-style: none; - - li { - :not(:last-child) { - margin-right: 1.5rem; - } - } -`; - -// ============================================================================= -// COMPONENTS -// ============================================================================= -export const Headings = () => { - return ( -
    - Default - Selected - Error - Disabled - Disabled Selected -
    - ); -}; -export const HeadingsNextLine = () => { - return ( -
    - - Hide Show more or less button - - - Selected with error list - - - Disabled Selected with error list - -
    - ); -}; diff --git a/stories/composite-option/props-table.tsx b/stories/composite-option/props-table.tsx deleted file mode 100644 index 757b48c62..000000000 --- a/stories/composite-option/props-table.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; - -const DATA: ApiTableSectionProps[] = [ - { - attributes: [ - { - name: "type", - description: ( - <> - The type of composite option - - ), - propTypes: [`"checkbox"`, `"radio"`], - defaultValue: `"checkbox"`, - }, - { - name: "checked", - description: "Specifies if the element is checked or selected", - propTypes: ["boolean"], - }, - { - name: "disabled", - description: - "Specifies if the element is disabled and non-interactable", - propTypes: ["boolean"], - }, - { - name: "title", - description: "The title of the element", - propTypes: ["string", "JSX.Element"], - }, - { - name: "titleMaxLines", - description: ( - <>Maximum number of lines to be shown in the title - ), - propTypes: ["number"], - }, - - { - name: "subtitle", - description: ( - <> - The description label of the{" "} - composite Option displayed below the main - label. - - ), - propTypes: ["string", "JSX.Element"], - }, - { - name: "children", - description: ( - <> - The description label of the{" "} - Composite Option displayed below the main - label. - - ), - propTypes: ["string", "JSX.Element"], - }, - { - name: "showChildren", - description: <>specifies if the children have to be shown, - propTypes: ["boolean"], - }, - { - name: "hideMoreOrLessButton", - description: ( - <> - specifies if show More Or{" "} - show Less Button is shown/hidden. if remove - prop is true then this props doesnt affect.{" "} - - ), - propTypes: ["boolean"], - }, - { - name: "onClick", - description: ( - <> - Called when the Composite Option is - selected or deselected - - ), - propTypes: [ - "(event: MouseEvent) => void", - ], - }, - { - name: "errorList", - description: - "Specifies if the internal errors should be displayed inside the container error list has to be displayed inside the container.", - propTypes: ["string[]", "JSX.Element"], - }, - { - name: "error", - description: - "Specifies if the container should be displayed with error.", - propTypes: ["boolean"], - }, - { - name: "errorMessage", - description: - "specifies error message to be displayed in error Color.", - propTypes: ["string"], - }, - { - name: "remove", - description: ( - <> - Specifies if the element has Remove button on top. if - remove is true then hideMoreOrLessButton{" "} - will not have anyeffect. it will always be true(hidden). - set showChildren to true if - the children have to be shown with remove{" "} - button. - - ), - propTypes: ["boolean"], - defaultValue: `false`, - }, - { - name: "onRemove", - description: ( - <> - Called when the Remove button is clicked - - ), - propTypes: ["() => void"], - }, - { - name: "id", - description: "The unique identifier of the element", - propTypes: ["string"], - }, - { - name: "className", - description: "The class selector of the element", - propTypes: ["string"], - }, - { - name: "data-testid", - description: "The test identifier of the element", - propTypes: ["string"], - }, - ], - }, -]; - -export const PropsTable = () => ; From 2910452c0aaa7f43bc836b276008753d00c53713 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Thu, 30 May 2024 15:21:31 +0800 Subject: [PATCH 0129/1949] Revert "[MOL-15775][AM] Create composite option component" This reverts commit b44449ef2a2a9d903c7ed7787a0c14a071466bf5. --- src/composite-option/composite-option.tsx | 314 ------------------ .../compositeOption.styles.tsx | 256 -------------- src/composite-option/index.ts | 2 - src/composite-option/types.ts | 47 --- 4 files changed, 619 deletions(-) delete mode 100644 src/composite-option/composite-option.tsx delete mode 100644 src/composite-option/compositeOption.styles.tsx delete mode 100644 src/composite-option/index.ts delete mode 100644 src/composite-option/types.ts diff --git a/src/composite-option/composite-option.tsx b/src/composite-option/composite-option.tsx deleted file mode 100644 index 81475620f..000000000 --- a/src/composite-option/composite-option.tsx +++ /dev/null @@ -1,314 +0,0 @@ -import { ChevronDownIcon, ChevronUpIcon } from "@lifesg/react-icons"; -import { MouseEvent, useEffect, useState } from "react"; -import { ToggleIcon } from "../shared/toggle-icon/toggle-icon"; -import { - AlertContainer, - ButtonContainer, - ButtonLabel, - Children, - ChildrenContainer, - CompositeOptionSelector, - Container, - ErrorListContainer, - ErrorListItem, - ErrorListli, - ErrorMessage, - HeaderContainer, - HeadingText, - Label, - SubLabel, - ViewMoreOrLessButtonContainer, - ViewMoreOrLessButtonLabel, -} from "./compositeOption.styles"; -import { TextList } from "../text-list"; -import { CompositeOptionProps } from "./types"; - -export type CompositeOptionType = "checkbox" | "radio"; - -export type ToggleIconType = "checkbox" | "radio"; - -export const CompositeOption = ({ - type = "checkbox", - checked, - disabled, - children, - title, - subtitle, - remove, - id, - hideMoreOrLessButton, - titleMaxLines, - className, - error, - errorMessage, - "data-testid": testId, - onClick, - showChildren, - errorList, - onRemove, -}: CompositeOptionProps) => { - // ============================================================================= - // CONST, STATE, REF - // ============================================================================= - const [selected, setSelected] = useState(checked); - const [showMore, setShowMore] = useState(!!showChildren); - const [showErrorList, setShowErrorList] = useState(false); - - // ============================================================================= - // EFFECTS - // ============================================================================= - useEffect(() => { - setSelected(checked); - }, [checked]); - - useEffect(() => { - if (selected !== undefined && showChildren === undefined) { - setShowMore(selected); - } - }, [selected, showChildren]); - - useEffect(() => { - if (errorList) { - const showErrorIfString = - !showMore && Array.isArray(errorList) && errorList?.length > 0; - const showErrorIfElement = !showMore && !Array.isArray(errorList); - if (!selected) { - setShowErrorList(!selected); - } else { - setShowErrorList(showErrorIfString || showErrorIfElement); - } - } - }, [showMore, errorList, selected]); - - // ============================================================================= - // EVENT HANDLERS - // ============================================================================= - const handleOnClick = ( - event: MouseEvent - ) => { - event?.preventDefault(); - if (!disabled) { - if (onClick) { - onClick(event); - return; - } - - switch (type) { - case "checkbox": - setSelected((prevSelected) => { - return !prevSelected; - }); - break; - case "radio": - { - if (!selected) { - setSelected(true); - } - } - break; - } - } - }; - const handleView = () => { - if (!disabled) { - setShowMore(!showMore); - } - }; - - const handleOnRemove = () => { - if (!disabled) { - if (onRemove) { - onRemove(); - return; - } - } - }; - - const renderTitleOrSubtitle = (item, headerValue: "label" | "subLabel") => { - if (!item) { - return null; - } - - const Component = headerValue === "label" ? Label : SubLabel; - return ( - - {item} - - ); - }; - - const renderChildren = () => { - if (!children) { - return null; - } - const ChildrenisFinalItem = hideMoreOrLessButton || remove; - return ( - - {children} - - ); - }; - const renderViewMoreOrLessButton = () => { - const errorMssgOrChildrenShown = showMore || showErrorList; - return ( - <> -
    - handleView()} - data-testid="toggle-button" - > - - {showMore ? "Show less" : "Show more"} - - {showMore ? : } - - - ); - }; - - const renderErrorsList = () => { - return ( - !showMore && - showErrorList && ( - handleView()} - data-testid="error-alert" - > - - {Array.isArray(errorList) ? ( - <> - - Error - - - {errorList?.map((item, index) => { - return ( - - - {item} - - - ); - })} - - - ) : ( - errorList - )} - - - ) - ); - }; - - return ( - <> - - - handleOnClick(e)} - id={`selector-${id}`} - role={type} - aria-checked={selected} - > - - - {renderTitleOrSubtitle(title, "label")} - {renderTitleOrSubtitle(subtitle, "subLabel")} - - - {remove && ( - <> - - - Remove - - - - )} - - - {children && ( - - {renderChildren()} - {!remove && ( - <> - {renderErrorsList()} - {renderViewMoreOrLessButton()} - - )} - - )} - - {errorMessage && ( - - {errorMessage} - - )} - - ); -}; - -export default CompositeOption; diff --git a/src/composite-option/compositeOption.styles.tsx b/src/composite-option/compositeOption.styles.tsx deleted file mode 100644 index e5fe12463..000000000 --- a/src/composite-option/compositeOption.styles.tsx +++ /dev/null @@ -1,256 +0,0 @@ -import styled, { css } from "styled-components"; -import { Color } from "../color"; -import { Text, TextStyleHelper } from "../text"; -import { MediaQuery } from "../media"; -import { Alert } from "../alert"; -// ============================================================================= -// STYLE INTERFACES, transient props are denoted with $ -// See more https://styled-components.com/docs/api#transient-props -// ============================================================================= -interface StyleProps { - $selected?: boolean; - $disabled?: boolean; -} - -interface ContainerStyleProps extends StyleProps { - $error?: boolean; -} - -interface LabelStyleProps extends StyleProps { - $maxLines?: { desktop?: number; mobile?: number }; -} - -interface ButtonStyleProps extends StyleProps { - $show?: boolean; -} - -interface ChildrenStyleProps extends StyleProps { - $isNotFinalItem?: boolean; -} - -// ============================================================================= -// STYLING -// ============================================================================= -export const Container = styled.div` - width: 100%; - position: relative; - display: inline-flex; - border-radius: 0.125rem; - border-width: 0.063rem; - border-style: solid; - flex-direction: column; - height: fit-content; - - // Background, Hover and Border style - ${(props) => { - if (props.$disabled && !props.$selected) { - return css` - border-color: ${Color.Neutral[5]}; - `; - } else if (props.$disabled && props.$selected) { - return css` - border-color: ${Color.Neutral[4]}; - `; - } else if (props.$error) { - return css` - border-color: ${Color.Validation.Red.Border}; - - :hover { - box-shadow: 0 0 0.25rem 0.063rem ${Color.Shadow.Red}; - } - `; - } else if (props.$selected) { - return css` - border-color: ${Color.Primary}; - - :hover { - box-shadow: 0 0 0.25rem 0.063rem ${Color.Shadow.Accent}; - } - `; - } else { - return css` - background: ${Color.Neutral[8]}; - border-color: ${Color.Neutral[5]}; - - :hover { - box-shadow: 0 0 0.25rem 0.063rem ${Color.Shadow.Accent}; - border-color: ${Color.Accent.Light[1]}; - } - `; - } - }} -`; - -export const HeaderContainer = styled.div` - display: flex; - padding: 0.688rem; - align-items: flex-start; - justify-content: space-between; - ${(props) => { - if (props.$disabled && !props.$selected) { - return css` - background: ${Color.Neutral[6]}; - `; - } else if (props.$disabled && props.$selected) { - return css` - background: ${Color.Neutral[6]}; - `; - } else if (props.$error) { - return css` - background: ${Color.Neutral[8]}; - `; - } else if (props.$selected) { - return css` - background: ${Color.Accent.Light[5]}; - `; - } else { - return css` - background: ${Color.Neutral[8]}; - `; - } - }} -`; - -export const CompositeOptionSelector = styled.div` - display: flex; - cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; - height: 100%; - width: 100%; -`; -export const HeadingText = styled.div` - display: flex; - flex-direction: column; -`; - -export const ButtonLabel = styled.label` - ${TextStyleHelper.getTextStyle("H4", "semibold")}; - line-height: 1.375rem; - color: ${Color.Validation.Red[1]}; - cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; -`; -export const Label = styled.label` - ${TextStyleHelper.getTextStyle("H4", "regular")} - - user-select: none; - overflow: hidden; - display: -webkit-inline-box; - text-overflow: ellipsis; - -webkit-box-orient: vertical; - overflow-wrap: break-word; - cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; - -webkit-line-clamp: ${(props) => props.$maxLines?.desktop ?? "none"}; - ${MediaQuery.MaxWidth.tablet} { - -webkit-line-clamp: ${(props) => props.$maxLines?.mobile ?? "none"}; - } - - ${(props) => { - if (props.$disabled) { - return css` - color: ${Color.Neutral[3]}; - `; - } else if (props.$selected) { - return css` - color: ${Color.Primary}; - `; - } else { - return css` - color: ${Color.Neutral[1]}; - `; - } - }} -`; -export const SubLabel = styled(Label)` - ${TextStyleHelper.getTextStyle("BodySmall", "regular")} - margin-top: 0.5rem; -`; - -export const ViewMoreOrLessButtonLabel = styled(Text.H4)` - color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; - margin-right: 0.5rem; -`; - -export const ButtonContainer = styled.button` - color: ${(props) => - props.$disabled ? Color.Neutral[3] : Color.Validation.Red.Icon}; - white-space: nowrap; - height: fit-content; - padding-top: 0rem; - padding-bottom: 0rem; - border: none; - background: none; - cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; -`; -export const ViewMoreOrLessButtonContainer = styled.button` - color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; - width: 100%; - justify-content: flex-end; - align-items: center; - padding-bottom: 0.688rem; - border: none; - background: none; - cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; - float: right; - display: ${(props) => (props.$show ? "flex" : "none")}; -`; -export const ErrorListContainer = styled.div` - width: 100%; - color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; - border: none; - background: none; - cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; - display: ${(props) => (props.$show ? "flex" : "none")}; - padding-top: 0.688rem; - padding-bottom: ${(props) => (!props.$show ? "0.688rem" : "0.5rem")}; -`; - -export const AlertContainer = styled(Alert)` - width: 100%; - user-select: none; -`; -export const ChildrenContainer = styled.div` - padding: 0 1rem; -`; - -export const ErrorMessage = styled(Text.H6)` - color: ${Color.Validation.Red.Text}; - margin-top: 0.5rem; - margin-bottom: 0; - outline: none; -`; - -export const Children = styled.div` - ${TextStyleHelper.getTextStyle("BodySmall", "regular")} - padding-top: 0.688rem; - padding-bottom: ${(props) => - props.$isNotFinalItem ? "0.5rem" : "0.688rem"}; - display: ${(props) => (props.$selected ? "flex" : "none")}; - strong, - b { - ${TextStyleHelper.getFontFamily("BodySmall", "semibold")} - color: inherit; - } - - ${(props) => { - if (props.$disabled) { - return css` - color: ${Color.Neutral[3]}; - `; - } else if (props.$selected) { - return css` - color: ${Color.Primary}; - `; - } else { - return css` - color: ${Color.Neutral[1]}; - `; - } - }} -`; - -export const ErrorListItem = styled(Text.H5)` - color: ${(props) => (props.$disabled ? Color.Neutral[3] : "#C60000")}; -`; -export const ErrorListli = styled.li` - color: ${(props) => - props.$disabled ? Color.Neutral[3] : "#C60000"} !important; -`; diff --git a/src/composite-option/index.ts b/src/composite-option/index.ts deleted file mode 100644 index 32ad1f1fa..000000000 --- a/src/composite-option/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default } from "./composite-option"; -export * from "./composite-option"; diff --git a/src/composite-option/types.ts b/src/composite-option/types.ts deleted file mode 100644 index 61be85dc1..000000000 --- a/src/composite-option/types.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { MouseEvent } from "react"; - -export type CompositeOptionType = "checkbox" | "radio"; - -export interface CompositeOptionProps - extends React.DOMAttributes { - /** - * The type of toggle. Values: "checkbox" | "radio" - * - * "checkbox" - allows deselection - * - * "radio" - does not allow deselection. However they - * will determine the indicator to be displayed - */ - type?: CompositeOptionType | undefined; - - /** Indicates if the element is checked */ - checked?: boolean | undefined; - disabled?: boolean | undefined; - /** The Composite Option title */ - title: string | JSX.Element; - titleMaxLines?: { mobile?: number; desktop?: number } | undefined; - /** The Composite Option subtitle */ - subtitle?: string | JSX.Element; - /** The children inside the composite option */ - children?: React.ReactNode; - showChildren?: boolean | undefined; - /** specifies to show or hide view more or less button when remove button is not present */ - hideMoreOrLessButton?: boolean; - onClick?: - | (( - event?: - | MouseEvent - | undefined - ) => void) - | undefined; - /** specifies the list of errors that has to be shown inside the composite-option container when the show less button is clicked*/ - errorList?: string[] | JSX.Element | undefined; - /** Specifies if the error display should be present */ - error?: boolean | undefined; - errorMessage?: string; - remove?: boolean | undefined; - onRemove?: (() => void) | undefined; - id?: string | undefined; - className?: string | undefined; - "data-testid"?: string | undefined; -} From fa5664ebb12d1874f76c17c27e25386583732136 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Thu, 30 May 2024 16:39:01 +0800 Subject: [PATCH 0130/1949] [MOL-15775][AM] Update Toggle to cater for composite option section --- src/toggle/toggle.styles.tsx | 186 ++++++++++++++++++++-- src/toggle/toggle.tsx | 292 ++++++++++++++++++++++++++++++----- src/toggle/types.ts | 12 +- 3 files changed, 441 insertions(+), 49 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index 9deb56a25..b0f22ad27 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -1,6 +1,7 @@ import styled, { css } from "styled-components"; +import { Alert } from "../alert"; import { Color } from "../color"; -import { TextStyleHelper } from "../text"; +import { Text, TextStyleHelper } from "../text"; import { ToggleStyleType } from "./types"; // ============================================================================= @@ -18,7 +19,21 @@ interface ContainerStyleProps extends StyleProps { $error?: boolean; } -interface LabelStyleProps extends StyleProps {} +interface IndicatorContainerStyleProps { + $addPadding?: boolean; +} + +interface LabelStyleProps extends StyleProps { + $maxLines?: { desktop?: number; mobile?: number }; +} + +interface ButtonStyleProps extends StyleProps { + $show?: boolean; +} + +interface ChildrenStyleProps extends StyleProps { + $isNotFinalItem?: boolean; +} // ============================================================================= // STYLING @@ -30,8 +45,11 @@ export const Container = styled.div` border-radius: 4px; border-width: 1px; border-style: solid; - cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; - padding: 0.6875rem 1rem; + overflow: hidden; + border-width: 0.063rem; + flex-direction: column; + height: fit-content; + width: 100%; // Content positioning style ${(props) => { @@ -49,7 +67,6 @@ export const Container = styled.div` if (props.$error) { return css` border-color: ${Color.Validation.Red.Icon}; - background: ${Color.Neutral[8]}; :hover { box-shadow: 0 0 4px 1px ${Color.Shadow.Red}; @@ -73,17 +90,14 @@ export const Container = styled.div` default: { if (props.$disabled && !props.$selected) { return css` - background: ${Color.Neutral[6]}; border-color: ${Color.Neutral[5]}; `; } else if (props.$disabled && props.$selected) { return css` - background: ${Color.Neutral[6]}; border-color: ${Color.Neutral[4]}; `; } else if (props.$error) { return css` - background: ${Color.Neutral[8]}; border-color: ${Color.Validation.Red.Border}; :hover { @@ -92,7 +106,6 @@ export const Container = styled.div` `; } else if (props.$selected) { return css` - background: ${Color.Accent.Light[5]}; border-color: ${Color.Primary}; :hover { @@ -193,3 +206,158 @@ export const SubLabel = styled.div` } }} `; + +export const HeaderContainer = styled.div` + display: flex; + align-items: flex-start; + justify-content: space-between; + + // Background, Hover and Border style + ${(props) => { + switch (props.$styleType) { + case "no-border": { + if (props.$error) { + return css` + background: ${Color.Neutral[8]}; + `; + } else if (!props.$disabled) { + return css` + :hover { + background: ${Color.Accent.Light[6]}; + } + `; + } else { + return css``; + } + } + default: { + if (props.$disabled && !props.$selected) { + return css` + background: ${Color.Neutral[6]}; + `; + } else if (props.$disabled && props.$selected) { + return css` + background: ${Color.Neutral[6]}; + `; + } else if (props.$error) { + return css` + background: ${Color.Neutral[8]}; + `; + } else if (props.$selected) { + return css` + background: ${Color.Accent.Light[5]}; + `; + } else { + return css` + background: ${Color.Neutral[8]}; + `; + } + } + } + }} +`; + +export const IndicatorLabelContainer = styled.div` + display: flex; + height: 100%; + width: 100%; + position: relative; + padding: ${(props) => + props.$addPadding ? "0.6875rem 0rem 0.6875rem 1rem" : "0.6875rem 1rem"}; +`; + +export const ButtonContainer = styled.button` + color: ${(props) => + props.$disabled ? Color.Neutral[3] : Color.Validation.Red.Icon}; + white-space: nowrap; + height: fit-content; + padding: 0.6875rem 1rem 0.6875rem 0.5rem; + border: none; + background: none; + + cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; +`; +export const ButtonLabel = styled.label` + ${TextStyleHelper.getTextStyle("H4", "semibold")}; + line-height: 1.375rem; + color: ${Color.Validation.Red[1]}; + cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; +`; +export const ViewMoreOrLessButtonLabel = styled(Text.H4)` + color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; + margin-right: 0.5rem; +`; +export const ViewMoreOrLessButtonContainer = styled.button` + color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; + width: 100%; + justify-content: flex-end; + align-items: center; + padding-bottom: 0.6875rem; + border: none; + background: none; + cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; + float: right; + display: ${(props) => (props.$show ? "flex" : "none")}; +`; +export const ErrorListContainer = styled.div` + width: 100%; + color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; + border: none; + background: none; + cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; + display: ${(props) => (props.$show ? "flex" : "none")}; + padding-top: 0.6875rem; + padding-bottom: ${(props) => (!props.$show ? "0.6875rem" : "0.5rem")}; +`; + +export const AlertContainer = styled(Alert)` + width: 100%; + user-select: none; +`; +export const ChildrenContainer = styled.div` + padding: 0 1rem; +`; + +export const Children = styled.div` + ${TextStyleHelper.getTextStyle("BodySmall", "regular")} + padding-top: 0.6875rem; + padding-bottom: ${(props) => + props.$isNotFinalItem ? "0.5rem" : "0.6875rem"}; + display: ${(props) => (props.$selected ? "flex" : "none")}; + strong, + b { + ${TextStyleHelper.getFontFamily("BodySmall", "semibold")} + color: inherit; + } + + ${(props) => { + if (props.$disabled) { + return css` + color: ${Color.Neutral[3]}; + `; + } else if (props.$selected) { + return css` + color: ${Color.Primary}; + `; + } else { + return css` + color: ${Color.Neutral[1]}; + `; + } + }} +`; + +export const ErrorListItem = styled(Text.H5)` + color: ${(props) => (props.$disabled ? Color.Neutral[3] : "#C60000")}; +`; +export const ErrorListli = styled.li` + color: ${(props) => + props.$disabled ? Color.Neutral[3] : "#C60000"} !important; +`; + +export const ErrorMessage = styled(Text.H6)` + color: ${Color.Validation.Red.Text}; + margin-top: 0.5rem; + margin-bottom: 0; + outline: none; +`; diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 8dd6e24b8..d601f680f 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -1,14 +1,30 @@ +import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; +import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; import { useEffect, useRef, useState } from "react"; +import { ToggleIcon, ToggleIconType } from "../shared/toggle-icon/toggle-icon"; +import { TextList } from "../text-list"; +import { SimpleIdGenerator } from "../util"; import { + AlertContainer, + ButtonContainer, + ButtonLabel, + Children, + ChildrenContainer, Container, + ErrorListContainer, + ErrorListItem, + ErrorListli, + ErrorMessage, + HeaderContainer, + IndicatorLabelContainer, Input, Label, SubLabel, TextContainer, + ViewMoreOrLessButtonContainer, + ViewMoreOrLessButtonLabel, } from "./toggle.styles"; import { ToggleProps } from "./types"; -import { ToggleIcon, ToggleIconType } from "../shared/toggle-icon/toggle-icon"; -import { SimpleIdGenerator } from "../util"; export const Toggle = ({ type = "checkbox", @@ -22,13 +38,25 @@ export const Toggle = ({ name, id, className, + hideMoreOrLessButton, + errorList, + errorMessage, + remove, + onRemove, + compositeOptionSection, + showCompositeOptionSection, "data-testid": testId, onChange, }: ToggleProps) => { // ============================================================================= // CONST, STATE, REF // ============================================================================= - const [selected, setSelected] = useState(checked); + const [selected, setSelected] = useState(checked); + const [showMore, setShowMore] = useState( + !!showCompositeOptionSection + ); + + const [showErrorList, setShowErrorList] = useState(false); const [uniqueId] = useState(SimpleIdGenerator.generate()); const generatedInputId = id ? `${id}-input` : `tg-${uniqueId}-input`; @@ -41,6 +69,28 @@ export const Toggle = ({ setSelected(checked); }, [checked]); + useEffect(() => { + if ( + selected !== undefined && + showCompositeOptionSection === undefined + ) { + setShowMore(selected); + } + }, [selected, showCompositeOptionSection]); + + useEffect(() => { + if (errorList) { + const showErrorIfString = + !showMore && Array.isArray(errorList) && errorList?.length > 0; + const showErrorIfElement = !showMore && !Array.isArray(errorList); + if (!selected) { + setShowErrorList(!selected); + } else { + setShowErrorList(showErrorIfString || showErrorIfElement); + } + } + }, [showMore, errorList, selected]); + // ============================================================================= // EVENT HANDLERS // ============================================================================= @@ -50,7 +100,6 @@ export const Toggle = ({ onChange(event); return; } - switch (type) { case "checkbox": setSelected((prevSelected) => { @@ -70,6 +119,12 @@ export const Toggle = ({ } }; + const handleView = () => { + if (!disabled) { + setShowMore(!showMore); + } + }; + // ============================================================================= // RENDER FUNCTIONS // ============================================================================= @@ -97,7 +152,14 @@ export const Toggle = ({ /> ); }; - + const handleOnRemove = () => { + if (!disabled) { + if (onRemove) { + onRemove(); + return; + } + } + }; const renderSubLabel = () => { if (!subLabel) { return null; @@ -105,10 +167,10 @@ export const Toggle = ({ let component: string | JSX.Element; - if (typeof subLabel === "string") { - component = subLabel; - } else if (typeof subLabel === "function") { + if (typeof subLabel === "function") { component = subLabel(); + } else { + component = subLabel; } return ( @@ -122,40 +184,192 @@ export const Toggle = ({ ); }; + const renderCompositeOptionSection = () => { + if (!compositeOptionSection) { + return null; + } + const ChildrenisFinalItem = hideMoreOrLessButton || remove; + return ( + + {compositeOptionSection} + + ); + }; + + const renderViewMoreOrLessButton = () => { + const errorMssgOrChildrenShown = showMore || showErrorList; + return ( + <> +
    + handleView()} + data-testid="toggle-button" + > + + {showMore ? "Show less" : "Show more"} + + {showMore ? ( + + ) : ( + + )} + + + ); + }; + + const renderErrorsList = () => { + return ( + !showMore && + showErrorList && ( + handleView()} + data-testid="error-alert" + > + + {Array.isArray(errorList) ? ( + <> + + Error + + + {errorList?.map((item, index) => { + return ( + + + {item} + + + ); + })} + + + ) : ( + errorList + )} + + + ) + ); + }; + return ( - - {indicator && renderIndicator()} - - - - {subLabel && renderSubLabel()} - - + {errorMessage} + + )} + ); }; diff --git a/src/toggle/types.ts b/src/toggle/types.ts index d95300fd1..46a68ea23 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -22,7 +22,7 @@ export interface ToggleProps /** The Toggle label */ children: React.ReactNode; // /** The description label displayed below the main label */ - subLabel?: (() => JSX.Element) | string | undefined; + subLabel?: (() => JSX.Element) | JSX.Element | string | undefined; disabled?: boolean | undefined; /** Specifies if the error display should be present */ error?: boolean | undefined; @@ -33,4 +33,14 @@ export interface ToggleProps onChange?: | ((event: React.ChangeEvent) => void) | undefined; + /** specifies to show or hide view more or less button when remove button is not present */ + hideMoreOrLessButton?: boolean; + /** specifies the list of errors that has to be shown inside the composite-option container when the show less button is clicked*/ + errorList?: string[] | JSX.Element | undefined; + errorMessage?: string; + remove?: boolean | undefined; + onRemove?: (() => void) | undefined; + /** The children inside the composite option */ + compositeOptionSection?: React.ReactNode; + showCompositeOptionSection?: boolean | undefined; } From fed24ad0232af7010bf3d5ace7f9c7d996224a5c Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Thu, 30 May 2024 16:40:32 +0800 Subject: [PATCH 0131/1949] [MOL-15775][AM] Update Toggle stories to cater for composite option section --- stories/toggle/doc-elements.tsx | 16 + stories/toggle/toggle-4-collapsible.mdx | 11 + .../toggle/toggle-4-collapsible.stories.tsx | 348 ++++++++++++++++++ stories/toggle/toggle-5-removable.mdx | 11 + stories/toggle/toggle-5-removable.stories.tsx | 207 +++++++++++ 5 files changed, 593 insertions(+) create mode 100644 stories/toggle/toggle-4-collapsible.mdx create mode 100644 stories/toggle/toggle-4-collapsible.stories.tsx create mode 100644 stories/toggle/toggle-5-removable.mdx create mode 100644 stories/toggle/toggle-5-removable.stories.tsx diff --git a/stories/toggle/doc-elements.tsx b/stories/toggle/doc-elements.tsx index ec4241ae9..c1a016785 100644 --- a/stories/toggle/doc-elements.tsx +++ b/stories/toggle/doc-elements.tsx @@ -96,3 +96,19 @@ export const Headings = () => {
    ); }; + +export const HeadingsNextLine = () => { + return ( +
    + + Hide Show more or less button + + + Selected with error list + + + Disabled Selected with error list + +
    + ); +}; diff --git a/stories/toggle/toggle-4-collapsible.mdx b/stories/toggle/toggle-4-collapsible.mdx new file mode 100644 index 000000000..6e379cb35 --- /dev/null +++ b/stories/toggle/toggle-4-collapsible.mdx @@ -0,0 +1,11 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../storybook-common"; +import * as ToggleCollapsibleStories from "./toggle-4-collapsible.stories"; +import { PropsTable } from "./props-table"; + + + +Collapsible + + + diff --git a/stories/toggle/toggle-4-collapsible.stories.tsx b/stories/toggle/toggle-4-collapsible.stories.tsx new file mode 100644 index 000000000..282c11dd0 --- /dev/null +++ b/stories/toggle/toggle-4-collapsible.stories.tsx @@ -0,0 +1,348 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { useState } from "react"; +import { Form } from "../../src/form"; +import { Headings, HeadingsNextLine, Wrapper } from "./doc-elements"; +import { Toggle } from "../../src"; + +type Component = typeof Toggle; + +const meta: Meta = { + title: "Data Input/Toggle/collapsible", + component: Toggle, +}; +export default meta; + +export const CheckboxCollapsible: StoryObj = { + render: () => { + const [checkboxError, setCheckboxError] = useState< + string[] | undefined + >(["Enter a label"]); + + const onChangeHandler = (inputVal) => { + if (inputVal === "") { + setCheckboxError(["Enter a label"]); + } else { + setCheckboxError([]); + } + }; + return ( + + +
    + ({})} + /> + } + > + Text + + ({})} + /> + } + > + Text + + + ({})} + /> + } + > + Text + + ({})} + /> + } + > + Text + +
    + ({})} + /> + } + errorMessage={"this is the error"} + > + Text + +
    +
    + + +
    + ({})} + /> + } + > + Text + + + + onChangeHandler(event.target.value) + } + /> + } + > + Text + + + Hello + +
    +
    + ); + }, +}; + +export const RadioCollapsible: StoryObj = { + render: () => { + const [radioError, setRadioError] = useState([ + "Enter a label", + ]); + + const onChangeHandler = (inputVal) => { + if (inputVal === "") { + setRadioError(["Enter a label"]); + } else { + setRadioError([]); + } + }; + return ( + + +
    + ({})} + /> + } + > + Text + + ({})} + /> + } + > + Text + + + ({})} + /> + } + > + Text + + ({})} + /> + } + > + Text + +
    + ({})} + /> + } + error + errorMessage={"this is the error"} + > + Text + +
    +
    + + +
    + ({})} + /> + } + > + Text + + + + onChangeHandler(event.target.value) + } + /> + } + > + Text + + + Hello + +
    +
    + ); + }, +}; diff --git a/stories/toggle/toggle-5-removable.mdx b/stories/toggle/toggle-5-removable.mdx new file mode 100644 index 000000000..8f5723fb7 --- /dev/null +++ b/stories/toggle/toggle-5-removable.mdx @@ -0,0 +1,11 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../storybook-common"; +import * as ToggleRemovableStories from "./toggle-5-removable.stories"; +import { PropsTable } from "./props-table"; + + + +Removable + + + diff --git a/stories/toggle/toggle-5-removable.stories.tsx b/stories/toggle/toggle-5-removable.stories.tsx new file mode 100644 index 000000000..5c92a9d2d --- /dev/null +++ b/stories/toggle/toggle-5-removable.stories.tsx @@ -0,0 +1,207 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Form } from "../../src/form"; +import { Headings, Wrapper } from "./doc-elements"; +import { Toggle } from "../../src"; + +type Component = typeof Toggle; + +const meta: Meta = { + title: "Data Input/Toggle/removable", + component: Toggle, +}; + +export default meta; + +export const CheckboxRemovable: StoryObj = { + render: () => { + return ( + + +
    + ({})} + /> + } + > + Text + + ({})} + /> + } + > + Text + + +
    + ({})} + /> + } + > + Text + +
    + ({})} + /> + } + > + Text + + ({})} + /> + } + > + Text + +
    +
    + ); + }, +}; + +export const RadioRemovable: StoryObj = { + render: () => { + return ( + + +
    + + Hello + + ({})} + /> + } + > + Text + +
    + ({})} + /> + } + > + Text + +
    + ({})} + /> + } + > + Text + + ({})} + /> + } + > + Text + +
    +
    + ); + }, +}; From 56b90bed1ad556735f6ad75c84ec70fde3da2a1f Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Thu, 30 May 2024 16:41:00 +0800 Subject: [PATCH 0132/1949] [MOL-15775][AM] Update Props table --- stories/toggle/props-table.tsx | 69 +++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index 1efc519e5..665d296d4 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -83,7 +83,7 @@ const DATA: ApiTableSectionProps[] = [ displayed below the main label. ), - propTypes: ["string", "() => JSX.Element"], + propTypes: ["string", "() => JSX.Element", "JSX.Element"], }, { name: "onChange", @@ -97,6 +97,73 @@ const DATA: ApiTableSectionProps[] = [ "(event: React.ChangeEvent) => void", ], }, + { + name: "compositeOptionSection", + description: ( + <> + The description label of the{" "} + composite Option Section displayed below + the main label. + + ), + propTypes: ["string", "JSX.Element"], + }, + { + name: "showCompositeOption", + description: ( + <>specifies if the CompositeOption have to be shown + ), + propTypes: ["boolean"], + }, + { + name: "hideMoreOrLessButton", + description: ( + <> + specifies if show More Or{" "} + show Less Button is shown/hidden. if remove + prop is true then this props doesnt affect.{" "} + + ), + propTypes: ["boolean"], + }, + + { + name: "errorList", + description: + "Specifies if the internal errors should be displayed inside the container error list has to be displayed inside the container.", + propTypes: ["string[]", "JSX.Element"], + }, + + { + name: "errorMessage", + description: + "specifies error message to be displayed in error Color.", + propTypes: ["string"], + }, + { + name: "remove", + description: ( + <> + Specifies if the element has Remove button on top. if + remove is true then hideMoreOrLessButton{" "} + will not have anyeffect. it will always be true(hidden). + set showChildren to true if + the children have to be shown with remove{" "} + button. + + ), + propTypes: ["boolean"], + defaultValue: `false`, + }, + { + name: "onRemove", + description: ( + <> + Called when the Remove button is clicked + + ), + propTypes: ["() => void"], + }, ], }, ]; From 40fb26c03e7c7ced4a5d8573d2d5515ef07ac798 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Thu, 30 May 2024 16:50:47 +0800 Subject: [PATCH 0133/1949] [MOL-15775][AM] Add "go back to main" in the removable and collapsible stories --- stories/toggle/toggle-4-collapsible.mdx | 4 +++- stories/toggle/toggle-5-removable.mdx | 4 +++- stories/toggle/toggle-5-removable.stories.tsx | 9 ++++++++- stories/toggle/toggle.mdx | 2 ++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/stories/toggle/toggle-4-collapsible.mdx b/stories/toggle/toggle-4-collapsible.mdx index 6e379cb35..aceba2920 100644 --- a/stories/toggle/toggle-4-collapsible.mdx +++ b/stories/toggle/toggle-4-collapsible.mdx @@ -5,7 +5,9 @@ import { PropsTable } from "./props-table"; -Collapsible +[Back to main](/docs/data-input-toggle--docs#variants) + +Collapsible diff --git a/stories/toggle/toggle-5-removable.mdx b/stories/toggle/toggle-5-removable.mdx index 8f5723fb7..35616b563 100644 --- a/stories/toggle/toggle-5-removable.mdx +++ b/stories/toggle/toggle-5-removable.mdx @@ -5,7 +5,9 @@ import { PropsTable } from "./props-table"; -Removable +[Back to main](/docs/data-input-toggle--docs#variants) + +Removable diff --git a/stories/toggle/toggle-5-removable.stories.tsx b/stories/toggle/toggle-5-removable.stories.tsx index 5c92a9d2d..bb54c5f79 100644 --- a/stories/toggle/toggle-5-removable.stories.tsx +++ b/stories/toggle/toggle-5-removable.stories.tsx @@ -129,8 +129,15 @@ export const RadioRemovable: StoryObj = { type={"radio"} remove showCompositeOptionSection + compositeOptionSection={ + ({})} + /> + } > - Hello + Text From 3463be0a30d49cc7b834398200e7d3487750f40b Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 31 May 2024 11:46:31 +0800 Subject: [PATCH 0134/1949] [MISC][RL] Update font color for masked value --- src/uneditable-section/section-item.styles.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/uneditable-section/section-item.styles.tsx b/src/uneditable-section/section-item.styles.tsx index 4b0a26cb2..de86ea135 100644 --- a/src/uneditable-section/section-item.styles.tsx +++ b/src/uneditable-section/section-item.styles.tsx @@ -59,6 +59,7 @@ export const IconContainer = styled.div` export const Clickable = styled.button` ${TextStyleHelper.getTextStyle("Body", "regular")} + color: ${Color.Neutral[1]}; border: none; background: transparent; padding: 0; From 74bd2ab5ffa321736bcf43ab259c795eb85ede4e Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Fri, 31 May 2024 16:46:07 +0800 Subject: [PATCH 0135/1949] [MOL-15775][AM] Remove Error Message prop --- src/toggle/toggle.styles.tsx | 7 ------- src/toggle/toggle.tsx | 14 -------------- stories/toggle/props-table.tsx | 6 ------ 3 files changed, 27 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index b0f22ad27..dc92d85cb 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -354,10 +354,3 @@ export const ErrorListli = styled.li` color: ${(props) => props.$disabled ? Color.Neutral[3] : "#C60000"} !important; `; - -export const ErrorMessage = styled(Text.H6)` - color: ${Color.Validation.Red.Text}; - margin-top: 0.5rem; - margin-bottom: 0; - outline: none; -`; diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index d601f680f..47b672fd1 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -14,7 +14,6 @@ import { ErrorListContainer, ErrorListItem, ErrorListli, - ErrorMessage, HeaderContainer, IndicatorLabelContainer, Input, @@ -288,7 +287,6 @@ export const Toggle = ({ }; return ( - <> )} - - {errorMessage && ( - - {errorMessage} - - )} - ); }; diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index 665d296d4..73ef7808e 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -134,12 +134,6 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["string[]", "JSX.Element"], }, - { - name: "errorMessage", - description: - "specifies error message to be displayed in error Color.", - propTypes: ["string"], - }, { name: "remove", description: ( From 9de36dca687af6fa7167704d83a3fc951185f2bb Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Fri, 31 May 2024 16:48:13 +0800 Subject: [PATCH 0136/1949] [MOL-15775][AM] Update types for toggle 2. update hideMoreOrLessButton to collapsible 3. update remove prop to removable prop --- src/toggle/toggle.tsx | 173 ++++++++++++++++++--------------- src/toggle/types.ts | 9 +- stories/toggle/props-table.tsx | 30 ++++-- 3 files changed, 120 insertions(+), 92 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 47b672fd1..13ddc7bdb 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -37,19 +37,21 @@ export const Toggle = ({ name, id, className, - hideMoreOrLessButton, - errorList, - errorMessage, - remove, - onRemove, - compositeOptionSection, - showCompositeOptionSection, + compositeSection, "data-testid": testId, onChange, }: ToggleProps) => { // ============================================================================= // CONST, STATE, REF // ============================================================================= + const { + collapsible = true, + errorList, + removable, + onRemove, + compositeOptionSection, + showCompositeOptionSection, + } = compositeSection || {}; const [selected, setSelected] = useState(checked); const [showMore, setShowMore] = useState( !!showCompositeOptionSection @@ -187,7 +189,7 @@ export const Toggle = ({ if (!compositeOptionSection) { return null; } - const ChildrenisFinalItem = hideMoreOrLessButton || remove; + const ChildrenisFinalItem = !collapsible || removable; return (
    handleView()} data-testid="toggle-button" @@ -236,12 +238,80 @@ export const Toggle = ({ ); }; + const renderToggleWithRemoveButton = () => { + return ( + + + + {indicator && renderIndicator()} + + + {subLabel && renderSubLabel()} + + + + {removable && ( + <> + + + Remove + + + + )} + + ); + }; + + const renderCompositeSection = () => { + return ( + compositeOptionSection && ( + + {renderCompositeOptionSection()} + {!removable && ( + <> + {renderErrorsList()} + {renderViewMoreOrLessButton()} + + )} + + ) + ); + }; const renderErrorsList = () => { return ( !showMore && showErrorList && ( handleView()} data-testid="error-alert" @@ -287,75 +357,18 @@ export const Toggle = ({ }; return ( - - - - - {indicator && renderIndicator()} - - - {subLabel && renderSubLabel()} - - - - {remove && ( - <> - - - Remove - - - - )} - - {compositeOptionSection && ( - - {renderCompositeOptionSection()} - {!remove && ( - <> - {renderErrorsList()} - {renderViewMoreOrLessButton()} - - )} - - )} - + + {renderToggleWithRemoveButton()} + {renderCompositeSection()} + ); }; diff --git a/src/toggle/types.ts b/src/toggle/types.ts index 46a68ea23..5000b0e3a 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -33,12 +33,15 @@ export interface ToggleProps onChange?: | ((event: React.ChangeEvent) => void) | undefined; + compositeSection?: ToggleCompositeSectionProps | undefined; +} + +export interface ToggleCompositeSectionProps { /** specifies to show or hide view more or less button when remove button is not present */ - hideMoreOrLessButton?: boolean; + collapsible?: boolean; /** specifies the list of errors that has to be shown inside the composite-option container when the show less button is clicked*/ errorList?: string[] | JSX.Element | undefined; - errorMessage?: string; - remove?: boolean | undefined; + removable?: boolean | undefined; onRemove?: (() => void) | undefined; /** The children inside the composite option */ compositeOptionSection?: React.ReactNode; diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index 73ef7808e..47d4de82d 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -98,7 +98,18 @@ const DATA: ApiTableSectionProps[] = [ ], }, { - name: "compositeOptionSection", + name: "compositeSection", + description: <>The section below the Toggle., + propTypes: ["compositeSectionProps"], + }, + ], + }, + + { + name: "Props", + attributes: [ + { + name: "compositeSectionProps", description: ( <> The description label of the{" "} @@ -116,11 +127,12 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["boolean"], }, { - name: "hideMoreOrLessButton", + name: "collapsible", description: ( <> specifies if show More Or{" "} - show Less Button is shown/hidden. if remove + show Less Button is shown/hidden. if{" "} + removable prop is true then this props doesnt affect.{" "} ), @@ -135,15 +147,15 @@ const DATA: ApiTableSectionProps[] = [ }, { - name: "remove", + name: "removable", description: ( <> Specifies if the element has Remove button on top. if - remove is true then hideMoreOrLessButton{" "} - will not have anyeffect. it will always be true(hidden). - set showChildren to true if - the children have to be shown with remove{" "} - button. + removable is true then collapsible will not + have anyeffect. it will always be true(hidden). set{" "} + showCompositeOption to true if + the children have to be shown with{" "} + removable button. ), propTypes: ["boolean"], From 66999054f67c7fffd56d4fc87d429ccbd703f64e Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Fri, 31 May 2024 16:49:02 +0800 Subject: [PATCH 0137/1949] [MOL-15775][AM] update stories for composite section in toggle --- .../toggle/toggle-4-collapsible.stories.tsx | 209 +++++++----------- stories/toggle/toggle-5-removable.stories.tsx | 156 ++++--------- 2 files changed, 125 insertions(+), 240 deletions(-) diff --git a/stories/toggle/toggle-4-collapsible.stories.tsx b/stories/toggle/toggle-4-collapsible.stories.tsx index 282c11dd0..351c58cb3 100644 --- a/stories/toggle/toggle-4-collapsible.stories.tsx +++ b/stories/toggle/toggle-4-collapsible.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "../../src/form"; import { Headings, HeadingsNextLine, Wrapper } from "./doc-elements"; -import { Toggle } from "../../src"; +import { Toggle, ToggleCompositeSectionProps } from "../../src"; type Component = typeof Toggle; @@ -12,12 +12,40 @@ const meta: Meta = { }; export default meta; +const renderCompositeSection = () => { + return ( + ({})} + /> + ); +}; + +const compositeOption: ToggleCompositeSectionProps = { + compositeOptionSection: renderCompositeSection(), + errorList: undefined, + showCompositeOptionSection: undefined, + collapsible: undefined, +}; + export const CheckboxCollapsible: StoryObj = { render: () => { const [checkboxError, setCheckboxError] = useState< string[] | undefined >(["Enter a label"]); + const compositeOptionSectionWithErrorList = () => { + return ( + onChangeHandler(event.target.value)} + /> + ); + }; + const onChangeHandler = (inputVal) => { if (inputVal === "") { setCheckboxError(["Enter a label"]); @@ -40,13 +68,7 @@ export const CheckboxCollapsible: StoryObj = { ({})} - /> - } + compositeSection={compositeOption} > Text @@ -54,13 +76,7 @@ export const CheckboxCollapsible: StoryObj = { indicator checked subLabel={"this is helper text"} - compositeOptionSection={ - ({})} - /> - } + compositeSection={compositeOption} > Text @@ -69,13 +85,7 @@ export const CheckboxCollapsible: StoryObj = { indicator subLabel={"this is helper text"} disabled - compositeOptionSection={ - ({})} - /> - } + compositeSection={compositeOption} > Text @@ -84,13 +94,7 @@ export const CheckboxCollapsible: StoryObj = { subLabel={"this is helper text"} disabled checked - compositeOptionSection={ - ({})} - /> - } + compositeSection={compositeOption} > Text @@ -99,14 +103,7 @@ export const CheckboxCollapsible: StoryObj = { indicator subLabel={"this is helper text"} error - compositeOptionSection={ - ({})} - /> - } - errorMessage={"this is the error"} + compositeSection={compositeOption} > Text @@ -125,51 +122,41 @@ export const CheckboxCollapsible: StoryObj = { > ({})} - /> - } + compositeSection={{ + ...compositeOption, + collapsible: false, + }} > Text - onChangeHandler(event.target.value) - } - /> - } + compositeSection={{ + ...compositeOption, + compositeOptionSection: + compositeOptionSectionWithErrorList(), + errorList: checkboxError, + }} > Text Hello @@ -192,6 +179,16 @@ export const RadioCollapsible: StoryObj = { setRadioError([]); } }; + const renderCompositeOptionErrorList = () => { + return ( + onChangeHandler(event.target.value)} + /> + ); + }; return ( @@ -207,28 +204,15 @@ export const RadioCollapsible: StoryObj = { ({})} - /> - } + compositeSection={compositeOption} > Text ({})} - /> - } + compositeSection={compositeOption} > Text @@ -237,13 +221,7 @@ export const RadioCollapsible: StoryObj = { indicator type={"radio"} disabled - compositeOptionSection={ - ({})} - /> - } + compositeSection={compositeOption} > Text @@ -252,13 +230,7 @@ export const RadioCollapsible: StoryObj = { type={"radio"} disabled checked - compositeOptionSection={ - ({})} - /> - } + compositeSection={compositeOption} > Text @@ -266,15 +238,8 @@ export const RadioCollapsible: StoryObj = { ({})} - /> - } + compositeSection={compositeOption} error - errorMessage={"this is the error"} > Text @@ -294,50 +259,38 @@ export const RadioCollapsible: StoryObj = { ({})} - /> - } + compositeSection={{ + ...compositeOption, + collapsible: false, + }} > Text - onChangeHandler(event.target.value) - } - /> - } + compositeSection={{ + ...compositeOption, + errorList: radioError, + compositeOptionSection: + renderCompositeOptionErrorList(), + }} > Text Hello diff --git a/stories/toggle/toggle-5-removable.stories.tsx b/stories/toggle/toggle-5-removable.stories.tsx index bb54c5f79..1dcfc0a7b 100644 --- a/stories/toggle/toggle-5-removable.stories.tsx +++ b/stories/toggle/toggle-5-removable.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "../../src/form"; import { Headings, Wrapper } from "./doc-elements"; -import { Toggle } from "../../src"; +import { Toggle, ToggleCompositeSectionProps } from "../../src"; type Component = typeof Toggle; @@ -12,6 +12,21 @@ const meta: Meta = { export default meta; +const renderCompositeSection = () => { + return ( + ({})} + /> + ); +}; +const compositeOption: ToggleCompositeSectionProps = { + removable: true, + showCompositeOptionSection: true, + compositeOptionSection: renderCompositeSection(), +}; + export const CheckboxRemovable: StoryObj = { render: () => { return ( @@ -26,66 +41,21 @@ export const CheckboxRemovable: StoryObj = { gridTemplate: "auto / repeat(5,minmax(0,1fr))", }} > - ({})} - /> - } - > + Text ({})} - /> - } > Text -
    - ({})} - /> - } - > - Text - -
    ({})} - /> - } + compositeSection={compositeOption} > Text @@ -93,17 +63,19 @@ export const CheckboxRemovable: StoryObj = { indicator disabled checked - remove - compositeOptionSection={ - ({})} - /> - } + compositeSection={compositeOption} > Text
    +
    + + Text + +
    ); @@ -127,66 +99,24 @@ export const RadioRemovable: StoryObj = { ({})} - /> - } + compositeSection={compositeOption} > Text ({})} - /> - } + compositeSection={compositeOption} > Text -
    - ({})} - /> - } - > - Text - -
    + ({})} - /> - } + compositeSection={compositeOption} > Text @@ -195,18 +125,20 @@ export const RadioRemovable: StoryObj = { type={"radio"} disabled checked - remove - showCompositeOptionSection - compositeOptionSection={ - ({})} - /> - } + compositeSection={compositeOption} > Text +
    + + Text + +
    ); From 91c48563e4d75516b4efc3c3fe1f39b5f7c19875 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Fri, 31 May 2024 16:57:50 +0800 Subject: [PATCH 0138/1949] [MOL-15775][AM] Update props inside the compositeSection --- src/toggle/toggle.tsx | 4 ++-- src/toggle/types.ts | 4 ++-- stories/toggle/props-table.tsx | 12 +++++++----- stories/toggle/toggle-4-collapsible.stories.tsx | 17 +++++++---------- stories/toggle/toggle-5-removable.stories.tsx | 4 ++-- 5 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 13ddc7bdb..795c3cf75 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -49,8 +49,8 @@ export const Toggle = ({ errorList, removable, onRemove, - compositeOptionSection, - showCompositeOptionSection, + children: compositeOptionSection, + show: showCompositeOptionSection, } = compositeSection || {}; const [selected, setSelected] = useState(checked); const [showMore, setShowMore] = useState( diff --git a/src/toggle/types.ts b/src/toggle/types.ts index 5000b0e3a..37b1fec8c 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -44,6 +44,6 @@ export interface ToggleCompositeSectionProps { removable?: boolean | undefined; onRemove?: (() => void) | undefined; /** The children inside the composite option */ - compositeOptionSection?: React.ReactNode; - showCompositeOptionSection?: boolean | undefined; + children?: React.ReactNode; + show?: boolean | undefined; } diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index 47d4de82d..21e08045e 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -120,9 +120,12 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["string", "JSX.Element"], }, { - name: "showCompositeOption", + name: "show", description: ( - <>specifies if the CompositeOption have to be shown + <> + specifies if the CompositeOption children have to be + shown + ), propTypes: ["boolean"], }, @@ -153,9 +156,8 @@ const DATA: ApiTableSectionProps[] = [ Specifies if the element has Remove button on top. if removable is true then collapsible will not have anyeffect. it will always be true(hidden). set{" "} - showCompositeOption to true if - the children have to be shown with{" "} - removable button. + show to true if the children + have to be shown with removable button. ), propTypes: ["boolean"], diff --git a/stories/toggle/toggle-4-collapsible.stories.tsx b/stories/toggle/toggle-4-collapsible.stories.tsx index 351c58cb3..c1bff0454 100644 --- a/stories/toggle/toggle-4-collapsible.stories.tsx +++ b/stories/toggle/toggle-4-collapsible.stories.tsx @@ -23,9 +23,9 @@ const renderCompositeSection = () => { }; const compositeOption: ToggleCompositeSectionProps = { - compositeOptionSection: renderCompositeSection(), + children: renderCompositeSection(), errorList: undefined, - showCompositeOptionSection: undefined, + show: undefined, collapsible: undefined, }; @@ -138,8 +138,7 @@ export const CheckboxCollapsible: StoryObj = { subLabel={"this is helper text"} compositeSection={{ ...compositeOption, - compositeOptionSection: - compositeOptionSectionWithErrorList(), + children: compositeOptionSectionWithErrorList(), errorList: checkboxError, }} > @@ -152,9 +151,8 @@ export const CheckboxCollapsible: StoryObj = { disabled={true} compositeSection={{ ...compositeOption, - showCompositeOptionSection: false, - compositeOptionSection: - compositeOptionSectionWithErrorList(), + show: false, + children: compositeOptionSectionWithErrorList(), errorList: ["Type inline error here"], }} > @@ -275,8 +273,7 @@ export const RadioCollapsible: StoryObj = { compositeSection={{ ...compositeOption, errorList: radioError, - compositeOptionSection: - renderCompositeOptionErrorList(), + children: renderCompositeOptionErrorList(), }} > Text @@ -288,7 +285,7 @@ export const RadioCollapsible: StoryObj = { disabled={true} compositeSection={{ ...compositeOption, - showCompositeOptionSection: false, + show: false, errorList: ["Enter a label"], }} > diff --git a/stories/toggle/toggle-5-removable.stories.tsx b/stories/toggle/toggle-5-removable.stories.tsx index 1dcfc0a7b..0fbba3922 100644 --- a/stories/toggle/toggle-5-removable.stories.tsx +++ b/stories/toggle/toggle-5-removable.stories.tsx @@ -23,8 +23,8 @@ const renderCompositeSection = () => { }; const compositeOption: ToggleCompositeSectionProps = { removable: true, - showCompositeOptionSection: true, - compositeOptionSection: renderCompositeSection(), + show: true, + children: renderCompositeSection(), }; export const CheckboxRemovable: StoryObj = { From 27e7ce29e7e43c5297a7de2f340a5a2e35bc29d3 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Mon, 3 Jun 2024 11:04:09 +0800 Subject: [PATCH 0139/1949] [MOL-15775][AM] Update ids --- src/toggle/toggle.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 795c3cf75..45cf9610d 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -314,7 +314,7 @@ export const Toggle = ({ $show={!collapsible ? false : selected} $disabled={disabled} onClick={() => handleView()} - data-testid="error-alert" + id={`error-alert-${id}`} > Date: Mon, 3 Jun 2024 11:15:36 +0800 Subject: [PATCH 0140/1949] [MOL-15775][AM]Add error Message prop --- src/toggle/toggle.styles.tsx | 6 +++ src/toggle/toggle.tsx | 40 +++++++++++++------ src/toggle/types.ts | 1 + stories/toggle/props-table.tsx | 6 +++ .../toggle/toggle-4-collapsible.stories.tsx | 2 + stories/toggle/toggle-5-removable.stories.tsx | 2 + 6 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index dc92d85cb..52ce0a364 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -354,3 +354,9 @@ export const ErrorListli = styled.li` color: ${(props) => props.$disabled ? Color.Neutral[3] : "#C60000"} !important; `; +export const ErrorMessage = styled(Text.H6)` + color: ${Color.Validation.Red.Text}; + margin-top: 0.5rem; + margin-bottom: 0; + outline: none; +`; diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 45cf9610d..09edf1c3e 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -14,6 +14,7 @@ import { ErrorListContainer, ErrorListItem, ErrorListli, + ErrorMessage, HeaderContainer, IndicatorLabelContainer, Input, @@ -38,6 +39,7 @@ export const Toggle = ({ id, className, compositeSection, + errorMessage, "data-testid": testId, onChange, }: ToggleProps) => { @@ -358,18 +360,30 @@ export const Toggle = ({ }; return ( - - {renderToggleWithRemoveButton()} - {renderCompositeSection()} - + <> + + {renderToggleWithRemoveButton()} + {renderCompositeSection()} + + {errorMessage && ( + + {errorMessage} + + )} + ); }; diff --git a/src/toggle/types.ts b/src/toggle/types.ts index 37b1fec8c..65422de4e 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -33,6 +33,7 @@ export interface ToggleProps onChange?: | ((event: React.ChangeEvent) => void) | undefined; + errorMessage?: string; compositeSection?: ToggleCompositeSectionProps | undefined; } diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index 21e08045e..b3fe9c35b 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -97,6 +97,12 @@ const DATA: ApiTableSectionProps[] = [ "(event: React.ChangeEvent) => void", ], }, + { + name: "errorMessage", + description: + "specifies error message to be displayed in error Color.", + propTypes: ["string"], + }, { name: "compositeSection", description: <>The section below the Toggle., diff --git a/stories/toggle/toggle-4-collapsible.stories.tsx b/stories/toggle/toggle-4-collapsible.stories.tsx index c1bff0454..6aee7943e 100644 --- a/stories/toggle/toggle-4-collapsible.stories.tsx +++ b/stories/toggle/toggle-4-collapsible.stories.tsx @@ -103,6 +103,7 @@ export const CheckboxCollapsible: StoryObj = { indicator subLabel={"this is helper text"} error + errorMessage="Error message required" compositeSection={compositeOption} > Text @@ -238,6 +239,7 @@ export const RadioCollapsible: StoryObj = { type={"radio"} compositeSection={compositeOption} error + errorMessage="Error message required" > Text diff --git a/stories/toggle/toggle-5-removable.stories.tsx b/stories/toggle/toggle-5-removable.stories.tsx index 0fbba3922..4d64ec5cd 100644 --- a/stories/toggle/toggle-5-removable.stories.tsx +++ b/stories/toggle/toggle-5-removable.stories.tsx @@ -71,6 +71,7 @@ export const CheckboxRemovable: StoryObj = { Text @@ -135,6 +136,7 @@ export const RadioRemovable: StoryObj = { type={"radio"} compositeSection={compositeOption} error + errorMessage="Error message required" > Text From 59c6754e2df982ac31688c74dbd03bd045c1b73f Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Mon, 3 Jun 2024 12:01:25 +0800 Subject: [PATCH 0141/1949] [MOL-15775][AM] Update errorlist to errors and minor typing fixes --- src/toggle/toggle.tsx | 16 ++++++++-------- src/toggle/types.ts | 6 +++--- stories/toggle/toggle-4-collapsible.stories.tsx | 10 +++++----- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 09edf1c3e..b0b2cd8bf 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -48,7 +48,7 @@ export const Toggle = ({ // ============================================================================= const { collapsible = true, - errorList, + errors, removable, onRemove, children: compositeOptionSection, @@ -82,17 +82,17 @@ export const Toggle = ({ }, [selected, showCompositeOptionSection]); useEffect(() => { - if (errorList) { + if (errors) { const showErrorIfString = - !showMore && Array.isArray(errorList) && errorList?.length > 0; - const showErrorIfElement = !showMore && !Array.isArray(errorList); + !showMore && Array.isArray(errors) && errors?.length > 0; + const showErrorIfElement = !showMore && !Array.isArray(errors); if (!selected) { setShowErrorList(!selected); } else { setShowErrorList(showErrorIfString || showErrorIfElement); } } - }, [showMore, errorList, selected]); + }, [showMore, errors, selected]); // ============================================================================= // EVENT HANDLERS @@ -323,7 +323,7 @@ export const Toggle = ({ className={className} showIcon > - {Array.isArray(errorList) ? ( + {Array.isArray(errors) ? ( <> - {errorList?.map((item, index) => { + {errors?.map((item, index) => { return ( ) : ( - errorList + errors )} diff --git a/src/toggle/types.ts b/src/toggle/types.ts index 65422de4e..43d0c1165 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -39,12 +39,12 @@ export interface ToggleProps export interface ToggleCompositeSectionProps { /** specifies to show or hide view more or less button when remove button is not present */ - collapsible?: boolean; + collapsible?: boolean | undefined; /** specifies the list of errors that has to be shown inside the composite-option container when the show less button is clicked*/ - errorList?: string[] | JSX.Element | undefined; + errors?: string[] | JSX.Element | undefined; removable?: boolean | undefined; onRemove?: (() => void) | undefined; /** The children inside the composite option */ - children?: React.ReactNode; + children: React.ReactNode; show?: boolean | undefined; } diff --git a/stories/toggle/toggle-4-collapsible.stories.tsx b/stories/toggle/toggle-4-collapsible.stories.tsx index 6aee7943e..0be021d60 100644 --- a/stories/toggle/toggle-4-collapsible.stories.tsx +++ b/stories/toggle/toggle-4-collapsible.stories.tsx @@ -24,7 +24,7 @@ const renderCompositeSection = () => { const compositeOption: ToggleCompositeSectionProps = { children: renderCompositeSection(), - errorList: undefined, + errors: undefined, show: undefined, collapsible: undefined, }; @@ -140,7 +140,7 @@ export const CheckboxCollapsible: StoryObj = { compositeSection={{ ...compositeOption, children: compositeOptionSectionWithErrorList(), - errorList: checkboxError, + errors: checkboxError, }} > Text @@ -154,7 +154,7 @@ export const CheckboxCollapsible: StoryObj = { ...compositeOption, show: false, children: compositeOptionSectionWithErrorList(), - errorList: ["Type inline error here"], + errors: ["Type inline error here"], }} > Hello @@ -274,7 +274,7 @@ export const RadioCollapsible: StoryObj = { type="radio" compositeSection={{ ...compositeOption, - errorList: radioError, + errors: radioError, children: renderCompositeOptionErrorList(), }} > @@ -288,7 +288,7 @@ export const RadioCollapsible: StoryObj = { compositeSection={{ ...compositeOption, show: false, - errorList: ["Enter a label"], + errors: ["Enter a label"], }} > Hello From d076c53535e83e8b8464e3c06cfeb7936638f0cc Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Mon, 3 Jun 2024 12:43:45 +0800 Subject: [PATCH 0142/1949] [MOL-15775][AM] Update errorlist to errors --- src/toggle/toggle.tsx | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index b0b2cd8bf..a105f0180 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -293,22 +293,7 @@ export const Toggle = ({ ); }; - const renderCompositeSection = () => { - return ( - compositeOptionSection && ( - - {renderCompositeOptionSection()} - {!removable && ( - <> - {renderErrorsList()} - {renderViewMoreOrLessButton()} - - )} - - ) - ); - }; - const renderErrorsList = () => { + const renderError = () => { return ( !showMore && showErrorList && ( @@ -359,6 +344,22 @@ export const Toggle = ({ ); }; + const renderCompositeSection = () => { + return ( + compositeOptionSection && ( + + {renderCompositeOptionSection()} + {!removable && ( + <> + {renderError()} + {renderViewMoreOrLessButton()} + + )} + + ) + ); + }; + return ( <> Date: Mon, 3 Jun 2024 12:50:55 +0800 Subject: [PATCH 0143/1949] [MOL-15775][AM] Update ids --- src/toggle/toggle.tsx | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index a105f0180..2c2c9faaf 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -61,7 +61,7 @@ export const Toggle = ({ const [showErrorList, setShowErrorList] = useState(false); const [uniqueId] = useState(SimpleIdGenerator.generate()); - const generatedInputId = id ? `${id}-input` : `tg-${uniqueId}-input`; + const generatedId = id ? `${id}` : `tg-${uniqueId}`; const inputRef = useRef(); @@ -243,7 +243,7 @@ export const Toggle = ({ const renderToggleWithRemoveButton = () => { return ( @@ -277,17 +277,13 @@ export const Toggle = ({ {removable && ( - <> - - - Remove - - - + + Remove + )} ); @@ -301,7 +297,7 @@ export const Toggle = ({ $show={!collapsible ? false : selected} $disabled={disabled} onClick={() => handleView()} - id={`error-alert-${id}`} + id={`${generatedId}-error-alert`} > {errorMessage && ( {errorMessage} From 3147ef6dafc1f744bb127612e0bef3ea887c0a61 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Mon, 3 Jun 2024 13:15:15 +0800 Subject: [PATCH 0144/1949] [MOL-15775][AM] extract errorlist component to a seperate function --- src/toggle/toggle.tsx | 45 ++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 2c2c9faaf..7edfeff0f 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -289,27 +289,10 @@ export const Toggle = ({ ); }; - const renderError = () => { + const renderErrorList = (errors: string[]) => { return ( - !showMore && - showErrorList && ( - handleView()} - id={`${generatedId}-error-alert`} - > - - {Array.isArray(errors) ? ( <> - + Error @@ -331,9 +314,27 @@ export const Toggle = ({ })} - ) : ( - errors - )} + ); + }; + + const renderError = () => { + return ( + !showMore && + showErrorList && ( + handleView()} + id={`${generatedId}-error-alert`} + > + + {Array.isArray(errors) + ? renderErrorList(errors) + : errors} ) From 6060a847f306d789ac2c3b24ab0a61b818a1c884 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Mon, 3 Jun 2024 13:16:15 +0800 Subject: [PATCH 0145/1949] [MOL-15775][AM] update handleview to handleExpandCollapseClick --- src/toggle/toggle.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 7edfeff0f..1c65ab4ac 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -122,7 +122,7 @@ export const Toggle = ({ } }; - const handleView = () => { + const handleExpandCollapseClick = () => { if (!disabled) { setShowMore(!showMore); } @@ -220,7 +220,7 @@ export const Toggle = ({ handleView()} + onClick={() => handleExpandCollapseClick()} data-testid="toggle-button" > handleView()} + onClick={() => handleExpandCollapseClick()} id={`${generatedId}-error-alert`} > Date: Mon, 3 Jun 2024 13:16:44 +0800 Subject: [PATCH 0146/1949] [MOL-15775][AM] update chevron styles in the parent container --- src/toggle/toggle.styles.tsx | 4 +++ src/toggle/toggle.tsx | 48 +++++++++++++++++------------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index 52ce0a364..e4c9cb89c 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -288,6 +288,10 @@ export const ViewMoreOrLessButtonLabel = styled(Text.H4)` margin-right: 0.5rem; `; export const ViewMoreOrLessButtonContainer = styled.button` + svg { + width: 1.125rem; + height: 1.125rem; + } color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; width: 100%; justify-content: flex-end; diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 1c65ab4ac..9b4c31baa 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -230,11 +230,7 @@ export const Toggle = ({ > {showMore ? "Show less" : "Show more"} - {showMore ? ( - - ) : ( - - )} + {showMore ? : } ); @@ -291,29 +287,29 @@ export const Toggle = ({ const renderErrorList = (errors: string[]) => { return ( - <> + <> - Error + Error + + + {errors?.map((item, index) => { + return ( + + + {item} - - {errors?.map((item, index) => { - return ( - - - {item} - - - ); - })} - - + + ); + })} + + ); }; From 70cd7f03c627ad06851da1f18e33e5c1983a37c0 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Mon, 3 Jun 2024 13:27:58 +0800 Subject: [PATCH 0147/1949] [MOL-15775][AM] minor changes for onClick and button type --- src/toggle/toggle.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 9b4c31baa..5822e0181 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -220,7 +220,7 @@ export const Toggle = ({ handleExpandCollapseClick()} + onClick={handleExpandCollapseClick} data-testid="toggle-button" > handleExpandCollapseClick()} + onClick={handleExpandCollapseClick} id={`${generatedId}-error-alert`} > Date: Mon, 3 Jun 2024 13:34:20 +0800 Subject: [PATCH 0148/1949] [MOL-15775][AM] minor fixes --- src/toggle/toggle.tsx | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 5822e0181..0a4f8ef13 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -127,6 +127,14 @@ export const Toggle = ({ setShowMore(!showMore); } }; + const handleOnRemove = () => { + if (!disabled) { + if (onRemove) { + onRemove(); + return; + } + } + }; // ============================================================================= // RENDER FUNCTIONS @@ -155,14 +163,6 @@ export const Toggle = ({ /> ); }; - const handleOnRemove = () => { - if (!disabled) { - if (onRemove) { - onRemove(); - return; - } - } - }; const renderSubLabel = () => { if (!subLabel) { return null; @@ -188,9 +188,6 @@ export const Toggle = ({ }; const renderCompositeOptionSection = () => { - if (!compositeOptionSection) { - return null; - } const ChildrenisFinalItem = !collapsible || removable; return ( Date: Tue, 4 Jun 2024 12:28:00 +0800 Subject: [PATCH 0149/1949] [MOL-15775][AM] move remove props from composite option props to Toggle props --- src/toggle/toggle.tsx | 4 ++-- src/toggle/types.ts | 5 +++-- stories/toggle/toggle-5-removable.stories.tsx | 16 ++++++++++++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 0a4f8ef13..1d16d6e9f 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -40,6 +40,8 @@ export const Toggle = ({ className, compositeSection, errorMessage, + removable, + onRemove, "data-testid": testId, onChange, }: ToggleProps) => { @@ -49,8 +51,6 @@ export const Toggle = ({ const { collapsible = true, errors, - removable, - onRemove, children: compositeOptionSection, show: showCompositeOptionSection, } = compositeSection || {}; diff --git a/src/toggle/types.ts b/src/toggle/types.ts index 43d0c1165..3256ec4dd 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -35,15 +35,16 @@ export interface ToggleProps | undefined; errorMessage?: string; compositeSection?: ToggleCompositeSectionProps | undefined; + removable?: boolean | undefined; + onRemove?: (() => void) | undefined; } export interface ToggleCompositeSectionProps { /** specifies to show or hide view more or less button when remove button is not present */ collapsible?: boolean | undefined; + // showmore or less button /** specifies the list of errors that has to be shown inside the composite-option container when the show less button is clicked*/ errors?: string[] | JSX.Element | undefined; - removable?: boolean | undefined; - onRemove?: (() => void) | undefined; /** The children inside the composite option */ children: React.ReactNode; show?: boolean | undefined; diff --git a/stories/toggle/toggle-5-removable.stories.tsx b/stories/toggle/toggle-5-removable.stories.tsx index 4d64ec5cd..eb7fbac95 100644 --- a/stories/toggle/toggle-5-removable.stories.tsx +++ b/stories/toggle/toggle-5-removable.stories.tsx @@ -22,7 +22,6 @@ const renderCompositeSection = () => { ); }; const compositeOption: ToggleCompositeSectionProps = { - removable: true, show: true, children: renderCompositeSection(), }; @@ -41,10 +40,15 @@ export const CheckboxRemovable: StoryObj = { gridTemplate: "auto / repeat(5,minmax(0,1fr))", }} > - + Text = { = { Text = {
    = { }} > = { Text = { = { Text = {
    Date: Tue, 4 Jun 2024 12:29:14 +0800 Subject: [PATCH 0150/1949] [MOL-15775][AM] Update styling for Remove Button --- src/toggle/toggle.styles.tsx | 9 ++------- src/toggle/toggle.tsx | 9 ++++----- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index e4c9cb89c..a5ba485e0 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -266,10 +266,11 @@ export const IndicatorLabelContainer = styled.div` props.$addPadding ? "0.6875rem 0rem 0.6875rem 1rem" : "0.6875rem 1rem"}; `; -export const ButtonContainer = styled.button` +export const RemoveButton = styled.button` color: ${(props) => props.$disabled ? Color.Neutral[3] : Color.Validation.Red.Icon}; white-space: nowrap; + ${TextStyleHelper.getTextStyle("H4", "semibold")} height: fit-content; padding: 0.6875rem 1rem 0.6875rem 0.5rem; border: none; @@ -277,12 +278,6 @@ export const ButtonContainer = styled.button` cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; `; -export const ButtonLabel = styled.label` - ${TextStyleHelper.getTextStyle("H4", "semibold")}; - line-height: 1.375rem; - color: ${Color.Validation.Red[1]}; - cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; -`; export const ViewMoreOrLessButtonLabel = styled(Text.H4)` color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; margin-right: 0.5rem; diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 1d16d6e9f..e82074560 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -6,8 +6,6 @@ import { TextList } from "../text-list"; import { SimpleIdGenerator } from "../util"; import { AlertContainer, - ButtonContainer, - ButtonLabel, Children, ChildrenContainer, Container, @@ -19,6 +17,7 @@ import { IndicatorLabelContainer, Input, Label, + RemoveButton, SubLabel, TextContainer, ViewMoreOrLessButtonContainer, @@ -270,14 +269,14 @@ export const Toggle = ({ {removable && ( - - Remove - + Remove + )} ); From 76ed770cc57ed2327a34f30a8f190e0aa0578167 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Tue, 4 Jun 2024 12:33:29 +0800 Subject: [PATCH 0151/1949] [MOL-15775][AM] Make remove button independent of showmoreOrLess button(collapsible) and showCompositeOption. --- src/toggle/toggle.styles.tsx | 5 +- src/toggle/toggle.tsx | 13 ++--- stories/toggle/props-table.tsx | 53 +++++++++---------- stories/toggle/toggle-5-removable.stories.tsx | 1 + 4 files changed, 32 insertions(+), 40 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index a5ba485e0..e8e3158b9 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -32,7 +32,7 @@ interface ButtonStyleProps extends StyleProps { } interface ChildrenStyleProps extends StyleProps { - $isNotFinalItem?: boolean; + $isFinalItem?: boolean; } // ============================================================================= @@ -320,8 +320,7 @@ export const ChildrenContainer = styled.div` export const Children = styled.div` ${TextStyleHelper.getTextStyle("BodySmall", "regular")} padding-top: 0.6875rem; - padding-bottom: ${(props) => - props.$isNotFinalItem ? "0.5rem" : "0.6875rem"}; + padding-bottom: ${(props) => (props.$isFinalItem ? "0.6875rem" : "0.5rem")}; display: ${(props) => (props.$selected ? "flex" : "none")}; strong, b { diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index e82074560..9e331c4c0 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -187,13 +187,10 @@ export const Toggle = ({ }; const renderCompositeOptionSection = () => { - const ChildrenisFinalItem = !collapsible || removable; return ( {compositeOptionSection} @@ -339,12 +336,8 @@ export const Toggle = ({ compositeOptionSection && ( {renderCompositeOptionSection()} - {!removable && ( - <> - {renderError()} - {renderViewMoreOrLessButton()} - - )} + {renderError()} + {renderViewMoreOrLessButton()} ) ); diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index b3fe9c35b..4e23075a6 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -103,6 +103,31 @@ const DATA: ApiTableSectionProps[] = [ "specifies error message to be displayed in error Color.", propTypes: ["string"], }, + { + name: "removable", + description: ( + <> + Specifies if the element has Remove button on top. if + removable is true then collapsible will not + have anyeffect. it will always be true(hidden). set{" "} + show to true and{" "} + collapsible to false if the + children have to be shown without show more or less + button with removable button. + + ), + propTypes: ["boolean"], + defaultValue: `false`, + }, + { + name: "onRemove", + description: ( + <> + Called when the Remove button is clicked + + ), + propTypes: ["() => void"], + }, { name: "compositeSection", description: <>The section below the Toggle., @@ -140,9 +165,7 @@ const DATA: ApiTableSectionProps[] = [ description: ( <> specifies if show More Or{" "} - show Less Button is shown/hidden. if{" "} - removable - prop is true then this props doesnt affect.{" "} + show Less Button is shown/hidden. ), propTypes: ["boolean"], @@ -154,30 +177,6 @@ const DATA: ApiTableSectionProps[] = [ "Specifies if the internal errors should be displayed inside the container error list has to be displayed inside the container.", propTypes: ["string[]", "JSX.Element"], }, - - { - name: "removable", - description: ( - <> - Specifies if the element has Remove button on top. if - removable is true then collapsible will not - have anyeffect. it will always be true(hidden). set{" "} - show to true if the children - have to be shown with removable button. - - ), - propTypes: ["boolean"], - defaultValue: `false`, - }, - { - name: "onRemove", - description: ( - <> - Called when the Remove button is clicked - - ), - propTypes: ["() => void"], - }, ], }, ]; diff --git a/stories/toggle/toggle-5-removable.stories.tsx b/stories/toggle/toggle-5-removable.stories.tsx index eb7fbac95..8268968a9 100644 --- a/stories/toggle/toggle-5-removable.stories.tsx +++ b/stories/toggle/toggle-5-removable.stories.tsx @@ -24,6 +24,7 @@ const renderCompositeSection = () => { const compositeOption: ToggleCompositeSectionProps = { show: true, children: renderCompositeSection(), + collapsible: false, }; export const CheckboxRemovable: StoryObj = { From 770555c1ea9ccbd48cd1b5913dd01bfa8e4a9dc3 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Tue, 4 Jun 2024 13:31:49 +0800 Subject: [PATCH 0152/1949] [MOL-15775][AM] update showErrorList to ShowErrors. --- src/toggle/toggle.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 9e331c4c0..a03650ae8 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -58,7 +58,7 @@ export const Toggle = ({ !!showCompositeOptionSection ); - const [showErrorList, setShowErrorList] = useState(false); + const [showErrors, setShowErrors] = useState(false); const [uniqueId] = useState(SimpleIdGenerator.generate()); const generatedId = id ? `${id}` : `tg-${uniqueId}`; @@ -86,9 +86,9 @@ export const Toggle = ({ !showMore && Array.isArray(errors) && errors?.length > 0; const showErrorIfElement = !showMore && !Array.isArray(errors); if (!selected) { - setShowErrorList(!selected); + setShowErrors(!selected); } else { - setShowErrorList(showErrorIfString || showErrorIfElement); + setShowErrors(showErrorIfString || showErrorIfElement); } } }, [showMore, errors, selected]); @@ -199,7 +199,7 @@ export const Toggle = ({ }; const renderViewMoreOrLessButton = () => { - const errorMssgOrChildrenShown = showMore || showErrorList; + const errorMssgOrChildrenShown = showMore || showErrors; return ( <>
    { return ( !showMore && - showErrorList && ( + showErrors && ( Date: Tue, 4 Jun 2024 13:33:11 +0800 Subject: [PATCH 0153/1949] [MOL-15775][AM] update padding for showMoreOrless button --- src/toggle/toggle.styles.tsx | 3 +++ src/toggle/toggle.tsx | 39 ++++++++++++++---------------------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index e8e3158b9..9e6b0425a 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -29,6 +29,7 @@ interface LabelStyleProps extends StyleProps { interface ButtonStyleProps extends StyleProps { $show?: boolean; + $paddingTopRequired?: boolean; } interface ChildrenStyleProps extends StyleProps { @@ -297,6 +298,8 @@ export const ViewMoreOrLessButtonContainer = styled.button` cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; float: right; display: ${(props) => (props.$show ? "flex" : "none")}; + padding-top: ${(props) => + props.$paddingTopRequired ? "0.6875rem" : "0rem"}; `; export const ErrorListContainer = styled.div` width: 100%; diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index a03650ae8..fe66df115 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -199,33 +199,24 @@ export const Toggle = ({ }; const renderViewMoreOrLessButton = () => { - const errorMssgOrChildrenShown = showMore || showErrors; + const showLessWithoutErrors = !showMore && !showErrors; return ( - <> -
    - + - - {showMore ? "Show less" : "Show more"} - - {showMore ? : } - - + {showMore ? "Show less" : "Show more"} + + {showMore ? : } + ); }; From dc242dd4c728ac56869cb40e1d97040c94d1e03f Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Tue, 4 Jun 2024 13:37:29 +0800 Subject: [PATCH 0154/1949] Revert "[MOL-15775][AM]Add error Message prop" This reverts commit 76de11d0215eb759a70bbc233eebb5c6e26619dd. --- src/toggle/toggle.styles.tsx | 6 --- src/toggle/toggle.tsx | 40 ++++++------------- src/toggle/types.ts | 1 - stories/toggle/props-table.tsx | 6 --- .../toggle/toggle-4-collapsible.stories.tsx | 38 ++++++++---------- stories/toggle/toggle-5-removable.stories.tsx | 40 ++++++++----------- 6 files changed, 46 insertions(+), 85 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index 9e6b0425a..7358cc23c 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -355,9 +355,3 @@ export const ErrorListli = styled.li` color: ${(props) => props.$disabled ? Color.Neutral[3] : "#C60000"} !important; `; -export const ErrorMessage = styled(Text.H6)` - color: ${Color.Validation.Red.Text}; - margin-top: 0.5rem; - margin-bottom: 0; - outline: none; -`; diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index fe66df115..d7635e61d 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -12,7 +12,6 @@ import { ErrorListContainer, ErrorListItem, ErrorListli, - ErrorMessage, HeaderContainer, IndicatorLabelContainer, Input, @@ -38,7 +37,6 @@ export const Toggle = ({ id, className, compositeSection, - errorMessage, removable, onRemove, "data-testid": testId, @@ -335,30 +333,18 @@ export const Toggle = ({ }; return ( - <> - - {renderToggleWithRemoveButton()} - {renderCompositeSection()} - - {errorMessage && ( - - {errorMessage} - - )} - + + {renderToggleWithRemoveButton()} + {renderCompositeSection()} + ); }; diff --git a/src/toggle/types.ts b/src/toggle/types.ts index 3256ec4dd..48e015f77 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -33,7 +33,6 @@ export interface ToggleProps onChange?: | ((event: React.ChangeEvent) => void) | undefined; - errorMessage?: string; compositeSection?: ToggleCompositeSectionProps | undefined; removable?: boolean | undefined; onRemove?: (() => void) | undefined; diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index 4e23075a6..f4b5274dd 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -97,12 +97,6 @@ const DATA: ApiTableSectionProps[] = [ "(event: React.ChangeEvent) => void", ], }, - { - name: "errorMessage", - description: - "specifies error message to be displayed in error Color.", - propTypes: ["string"], - }, { name: "removable", description: ( diff --git a/stories/toggle/toggle-4-collapsible.stories.tsx b/stories/toggle/toggle-4-collapsible.stories.tsx index 0be021d60..45b1d6c50 100644 --- a/stories/toggle/toggle-4-collapsible.stories.tsx +++ b/stories/toggle/toggle-4-collapsible.stories.tsx @@ -98,17 +98,14 @@ export const CheckboxCollapsible: StoryObj = { > Text -
    - - Text - -
    + + Text +
    @@ -233,17 +230,14 @@ export const RadioCollapsible: StoryObj = { > Text
    -
    - - Text - -
    + + Text +
    diff --git a/stories/toggle/toggle-5-removable.stories.tsx b/stories/toggle/toggle-5-removable.stories.tsx index 8268968a9..9cb689e25 100644 --- a/stories/toggle/toggle-5-removable.stories.tsx +++ b/stories/toggle/toggle-5-removable.stories.tsx @@ -74,17 +74,14 @@ export const CheckboxRemovable: StoryObj = { > Text
    -
    - - Text - -
    + + Text +
    ); @@ -142,18 +139,15 @@ export const RadioRemovable: StoryObj = { > Text
    -
    - - Text - -
    + + Text +
    ); From 81a6da245dcd5d80d43ed82c06baf2a0b8809cc6 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Tue, 4 Jun 2024 13:57:00 +0800 Subject: [PATCH 0155/1949] [MOL-15775][AM] update label to cater for MaxLines. --- src/toggle/toggle.styles.tsx | 12 +++++++++++- src/toggle/toggle.tsx | 2 ++ src/toggle/types.ts | 1 + stories/toggle/props-table.tsx | 7 +++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index 7358cc23c..a098d8e58 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -1,6 +1,7 @@ import styled, { css } from "styled-components"; import { Alert } from "../alert"; import { Color } from "../color"; +import { MediaQuery } from "../media"; import { Text, TextStyleHelper } from "../text"; import { ToggleStyleType } from "./types"; @@ -148,6 +149,7 @@ export const TextContainer = styled.div` flex-direction: column; overflow-wrap: anywhere; width: 100%; + overflow: hidden; `; export const Label = styled.label` @@ -162,7 +164,15 @@ export const Label = styled.label` `; } }} - + overflow: hidden; + display: -webkit-box; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + overflow-wrap: break-word; + -webkit-line-clamp: ${(props) => props.$maxLines?.desktop ?? "none"}; + ${MediaQuery.MaxWidth.tablet} { + -webkit-line-clamp: ${(props) => props.$maxLines?.mobile ?? "none"}; + } color: ${Color.Neutral[1]}; ${(props) => { diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index d7635e61d..5ec2128d1 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -30,6 +30,7 @@ export const Toggle = ({ checked, styleType = "default", children, + childrenMaxLines, subLabel, disabled, error, @@ -247,6 +248,7 @@ export const Toggle = ({ $indicator={indicator} $disabled={disabled} data-testid={`${generatedId}-toggle-label`} + $maxLines={childrenMaxLines} > {children} diff --git a/src/toggle/types.ts b/src/toggle/types.ts index 48e015f77..9c1aa8c9d 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -21,6 +21,7 @@ export interface ToggleProps styleType?: ToggleStyleType | undefined; /** The Toggle label */ children: React.ReactNode; + childrenMaxLines?: { mobile?: number; desktop?: number } | undefined; // /** The description label displayed below the main label */ subLabel?: (() => JSX.Element) | JSX.Element | string | undefined; disabled?: boolean | undefined; diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index f4b5274dd..a026ca0d4 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -43,6 +43,13 @@ const DATA: ApiTableSectionProps[] = [ description: "The main selector label ", propTypes: ["string"], }, + { + name: "childrenMaxLines", + description: ( + <>Maximum number of lines to be shown in the main label + ), + propTypes: ["{desktop: number, mobile: number}"], + }, { name: "disabled", description: From 9439e89a91bced81742e73b29bdac9f6404a8bf9 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Tue, 4 Jun 2024 14:10:13 +0800 Subject: [PATCH 0156/1949] [MOL-15775][AM] update stories to show the code in DS docs --- .../toggle/toggle-4-collapsible.stories.tsx | 210 +++++++++++++----- stories/toggle/toggle-5-removable.stories.tsx | 137 +++++++++--- 2 files changed, 263 insertions(+), 84 deletions(-) diff --git a/stories/toggle/toggle-4-collapsible.stories.tsx b/stories/toggle/toggle-4-collapsible.stories.tsx index 45b1d6c50..fdbe4f87d 100644 --- a/stories/toggle/toggle-4-collapsible.stories.tsx +++ b/stories/toggle/toggle-4-collapsible.stories.tsx @@ -1,8 +1,8 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; +import { Toggle } from "../../src"; import { Form } from "../../src/form"; import { Headings, HeadingsNextLine, Wrapper } from "./doc-elements"; -import { Toggle, ToggleCompositeSectionProps } from "../../src"; type Component = typeof Toggle; @@ -12,40 +12,12 @@ const meta: Meta = { }; export default meta; -const renderCompositeSection = () => { - return ( - ({})} - /> - ); -}; - -const compositeOption: ToggleCompositeSectionProps = { - children: renderCompositeSection(), - errors: undefined, - show: undefined, - collapsible: undefined, -}; - export const CheckboxCollapsible: StoryObj = { render: () => { const [checkboxError, setCheckboxError] = useState< string[] | undefined >(["Enter a label"]); - const compositeOptionSectionWithErrorList = () => { - return ( - onChangeHandler(event.target.value)} - /> - ); - }; - const onChangeHandler = (inputVal) => { if (inputVal === "") { setCheckboxError(["Enter a label"]); @@ -68,7 +40,15 @@ export const CheckboxCollapsible: StoryObj = { ({})} + /> + ), + }} > Text @@ -76,7 +56,15 @@ export const CheckboxCollapsible: StoryObj = { indicator checked subLabel={"this is helper text"} - compositeSection={compositeOption} + compositeSection={{ + children: ( + ({})} + /> + ), + }} > Text @@ -85,7 +73,15 @@ export const CheckboxCollapsible: StoryObj = { indicator subLabel={"this is helper text"} disabled - compositeSection={compositeOption} + compositeSection={{ + children: ( + ({})} + /> + ), + }} > Text @@ -94,7 +90,15 @@ export const CheckboxCollapsible: StoryObj = { subLabel={"this is helper text"} disabled checked - compositeSection={compositeOption} + compositeSection={{ + children: ( + ({})} + /> + ), + }} > Text @@ -102,7 +106,15 @@ export const CheckboxCollapsible: StoryObj = { indicator subLabel={"this is helper text"} error - compositeSection={compositeOption} + compositeSection={{ + children: ( + ({})} + /> + ), + }} > Text @@ -123,7 +135,13 @@ export const CheckboxCollapsible: StoryObj = { checked subLabel={"this is helper text"} compositeSection={{ - ...compositeOption, + children: ( + ({})} + /> + ), collapsible: false, }} > @@ -135,8 +153,20 @@ export const CheckboxCollapsible: StoryObj = { checked subLabel={"this is helper text"} compositeSection={{ - ...compositeOption, - children: compositeOptionSectionWithErrorList(), + children: ( + + onChangeHandler(event.target.value) + } + /> + ), errors: checkboxError, }} > @@ -148,9 +178,21 @@ export const CheckboxCollapsible: StoryObj = { subLabel={"this is helper text"} disabled={true} compositeSection={{ - ...compositeOption, show: false, - children: compositeOptionSectionWithErrorList(), + children: ( + + onChangeHandler(event.target.value) + } + /> + ), errors: ["Type inline error here"], }} > @@ -175,16 +217,6 @@ export const RadioCollapsible: StoryObj = { setRadioError([]); } }; - const renderCompositeOptionErrorList = () => { - return ( - onChangeHandler(event.target.value)} - /> - ); - }; return ( @@ -200,7 +232,15 @@ export const RadioCollapsible: StoryObj = { ({})} + /> + ), + }} > Text @@ -208,7 +248,15 @@ export const RadioCollapsible: StoryObj = { indicator type={"radio"} checked - compositeSection={compositeOption} + compositeSection={{ + children: ( + ({})} + /> + ), + }} > Text @@ -217,7 +265,15 @@ export const RadioCollapsible: StoryObj = { indicator type={"radio"} disabled - compositeSection={compositeOption} + compositeSection={{ + children: ( + ({})} + /> + ), + }} > Text @@ -226,14 +282,30 @@ export const RadioCollapsible: StoryObj = { type={"radio"} disabled checked - compositeSection={compositeOption} + compositeSection={{ + children: ( + ({})} + /> + ), + }} > Text ({})} + /> + ), + }} error > Text @@ -255,7 +327,13 @@ export const RadioCollapsible: StoryObj = { type={"radio"} checked compositeSection={{ - ...compositeOption, + children: ( + ({})} + /> + ), collapsible: false, }} > @@ -267,9 +345,19 @@ export const RadioCollapsible: StoryObj = { checked type="radio" compositeSection={{ - ...compositeOption, + children: ( + + onChangeHandler(event.target.value) + } + /> + ), errors: radioError, - children: renderCompositeOptionErrorList(), }} > Text @@ -280,7 +368,13 @@ export const RadioCollapsible: StoryObj = { checked disabled={true} compositeSection={{ - ...compositeOption, + children: ( + ({})} + /> + ), show: false, errors: ["Enter a label"], }} diff --git a/stories/toggle/toggle-5-removable.stories.tsx b/stories/toggle/toggle-5-removable.stories.tsx index 9cb689e25..ec5d85c13 100644 --- a/stories/toggle/toggle-5-removable.stories.tsx +++ b/stories/toggle/toggle-5-removable.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; +import { Toggle } from "../../src"; import { Form } from "../../src/form"; import { Headings, Wrapper } from "./doc-elements"; -import { Toggle, ToggleCompositeSectionProps } from "../../src"; type Component = typeof Toggle; @@ -12,21 +12,6 @@ const meta: Meta = { export default meta; -const renderCompositeSection = () => { - return ( - ({})} - /> - ); -}; -const compositeOption: ToggleCompositeSectionProps = { - show: true, - children: renderCompositeSection(), - collapsible: false, -}; - export const CheckboxRemovable: StoryObj = { render: () => { return ( @@ -44,14 +29,34 @@ export const CheckboxRemovable: StoryObj = { ({})} + /> + ), + collapsible: false, + }} > Text ({})} + /> + ), + collapsible: false, + }} checked > Text @@ -61,7 +66,17 @@ export const CheckboxRemovable: StoryObj = { removable indicator disabled - compositeSection={compositeOption} + compositeSection={{ + show: true, + children: ( + ({})} + /> + ), + collapsible: false, + }} > Text @@ -70,7 +85,17 @@ export const CheckboxRemovable: StoryObj = { indicator disabled checked - compositeSection={compositeOption} + compositeSection={{ + show: true, + children: ( + ({})} + /> + ), + collapsible: false, + }} > Text @@ -78,7 +103,17 @@ export const CheckboxRemovable: StoryObj = { removable indicator error - compositeSection={compositeOption} + compositeSection={{ + show: true, + children: ( + ({})} + /> + ), + collapsible: false, + }} > Text @@ -106,7 +141,17 @@ export const RadioRemovable: StoryObj = { removable indicator type={"radio"} - compositeSection={compositeOption} + compositeSection={{ + show: true, + children: ( + ({})} + /> + ), + collapsible: false, + }} > Text @@ -115,7 +160,17 @@ export const RadioRemovable: StoryObj = { indicator type={"radio"} checked - compositeSection={compositeOption} + compositeSection={{ + show: true, + children: ( + ({})} + /> + ), + collapsible: false, + }} > Text @@ -125,7 +180,17 @@ export const RadioRemovable: StoryObj = { indicator type={"radio"} disabled - compositeSection={compositeOption} + compositeSection={{ + show: true, + children: ( + ({})} + /> + ), + collapsible: false, + }} > Text @@ -135,7 +200,17 @@ export const RadioRemovable: StoryObj = { type={"radio"} disabled checked - compositeSection={compositeOption} + compositeSection={{ + show: true, + children: ( + ({})} + /> + ), + collapsible: false, + }} > Text @@ -143,7 +218,17 @@ export const RadioRemovable: StoryObj = { removable indicator type={"radio"} - compositeSection={compositeOption} + compositeSection={{ + show: true, + children: ( + ({})} + /> + ), + collapsible: false, + }} error > Text From cc62cee99d4a3e7b97d064483ea7fcb67f2b5639 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Tue, 4 Jun 2024 16:20:29 +0800 Subject: [PATCH 0157/1949] [MOL-15775][AM] added prevent default in onChange --- src/toggle/toggle.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 5ec2128d1..12143a697 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -96,6 +96,7 @@ export const Toggle = ({ // EVENT HANDLERS // ============================================================================= const handleOnChange = (event: React.ChangeEvent) => { + event?.preventDefault(); if (!disabled) { if (onChange) { onChange(event); From 8778646aae3b35262a2f43e31ef69491d3a23e92 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Wed, 5 Jun 2024 23:38:35 +0800 Subject: [PATCH 0158/1949] [MOL-15775][RL] Update documentation --- stories/toggle/doc-elements.tsx | 57 ++- stories/toggle/toggle-4-collapsible.mdx | 13 - .../toggle/toggle-4-collapsible.stories.tsx | 388 ------------------ ...5-removable.mdx => toggle-4-removable.mdx} | 6 +- stories/toggle/toggle-4-removable.stories.tsx | 60 +++ stories/toggle/toggle-5-composite-section.mdx | 28 ++ .../toggle-5-composite-section.stories.tsx | 205 +++++++++ stories/toggle/toggle-5-removable.stories.tsx | 240 ----------- 8 files changed, 339 insertions(+), 658 deletions(-) delete mode 100644 stories/toggle/toggle-4-collapsible.mdx delete mode 100644 stories/toggle/toggle-4-collapsible.stories.tsx rename stories/toggle/{toggle-5-removable.mdx => toggle-4-removable.mdx} (62%) create mode 100644 stories/toggle/toggle-4-removable.stories.tsx create mode 100644 stories/toggle/toggle-5-composite-section.mdx create mode 100644 stories/toggle/toggle-5-composite-section.stories.tsx delete mode 100644 stories/toggle/toggle-5-removable.stories.tsx diff --git a/stories/toggle/doc-elements.tsx b/stories/toggle/doc-elements.tsx index c1a016785..dad2da84d 100644 --- a/stories/toggle/doc-elements.tsx +++ b/stories/toggle/doc-elements.tsx @@ -47,10 +47,10 @@ export const Wrapper = styled.div` margin: 1rem 0; } - ${MediaQuery.MaxWidth.mobileL} { + @media only screen and (max-width: 900px) { width: 100%; display: grid; - grid-template-columns: repeat(2, 1fr); + grid-template-columns: max-content 1fr; column-gap: 2rem; > div { @@ -82,9 +82,41 @@ export const SimpleContainer = styled.ul` } `; +const VariantWrapper = styled.div` + width: 100%; + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 2rem; + + > div { + display: flex; + flex-direction: column; + ${HeadingLabel} { + margin: 1rem; + min-width: 100px; + } + } + + @media only screen and (max-width: 1200px) { + grid-template-columns: 1fr; + + > div { + flex-direction: row; + } + } +`; + // ============================================================================= // COMPONENTS // ============================================================================= +const VARIANTS = [ + "Default", + "Selected", + "Disabled", + "Disabled Selected", + "Error", +]; + export const Headings = () => { return (
    @@ -97,18 +129,15 @@ export const Headings = () => { ); }; -export const HeadingsNextLine = () => { +export const Variants = ({ children }: { children: React.ReactNode }) => { return ( -
    - - Hide Show more or less button - - - Selected with error list - - - Disabled Selected with error list - -
    + + {React.Children.map(children, (child, i) => ( +
    + {VARIANTS[i]} + {child} +
    + ))} +
    ); }; diff --git a/stories/toggle/toggle-4-collapsible.mdx b/stories/toggle/toggle-4-collapsible.mdx deleted file mode 100644 index aceba2920..000000000 --- a/stories/toggle/toggle-4-collapsible.mdx +++ /dev/null @@ -1,13 +0,0 @@ -import { Canvas, Meta } from "@storybook/blocks"; -import { Heading3, Secondary, Title } from "../storybook-common"; -import * as ToggleCollapsibleStories from "./toggle-4-collapsible.stories"; -import { PropsTable } from "./props-table"; - - - -[Back to main](/docs/data-input-toggle--docs#variants) - -Collapsible - - - diff --git a/stories/toggle/toggle-4-collapsible.stories.tsx b/stories/toggle/toggle-4-collapsible.stories.tsx deleted file mode 100644 index fdbe4f87d..000000000 --- a/stories/toggle/toggle-4-collapsible.stories.tsx +++ /dev/null @@ -1,388 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react"; -import { useState } from "react"; -import { Toggle } from "../../src"; -import { Form } from "../../src/form"; -import { Headings, HeadingsNextLine, Wrapper } from "./doc-elements"; - -type Component = typeof Toggle; - -const meta: Meta = { - title: "Data Input/Toggle/collapsible", - component: Toggle, -}; -export default meta; - -export const CheckboxCollapsible: StoryObj = { - render: () => { - const [checkboxError, setCheckboxError] = useState< - string[] | undefined - >(["Enter a label"]); - - const onChangeHandler = (inputVal) => { - if (inputVal === "") { - setCheckboxError(["Enter a label"]); - } else { - setCheckboxError([]); - } - }; - return ( - - -
    - ({})} - /> - ), - }} - > - Text - - ({})} - /> - ), - }} - > - Text - - - ({})} - /> - ), - }} - > - Text - - ({})} - /> - ), - }} - > - Text - - ({})} - /> - ), - }} - > - Text - -
    - - -
    - ({})} - /> - ), - collapsible: false, - }} - > - Text - - - - onChangeHandler(event.target.value) - } - /> - ), - errors: checkboxError, - }} - > - Text - - - onChangeHandler(event.target.value) - } - /> - ), - errors: ["Type inline error here"], - }} - > - Hello - -
    -
    - ); - }, -}; - -export const RadioCollapsible: StoryObj = { - render: () => { - const [radioError, setRadioError] = useState([ - "Enter a label", - ]); - - const onChangeHandler = (inputVal) => { - if (inputVal === "") { - setRadioError(["Enter a label"]); - } else { - setRadioError([]); - } - }; - return ( - - -
    - ({})} - /> - ), - }} - > - Text - - ({})} - /> - ), - }} - > - Text - - - ({})} - /> - ), - }} - > - Text - - ({})} - /> - ), - }} - > - Text - - ({})} - /> - ), - }} - error - > - Text - -
    - - -
    - ({})} - /> - ), - collapsible: false, - }} - > - Text - - - - onChangeHandler(event.target.value) - } - /> - ), - errors: radioError, - }} - > - Text - - ({})} - /> - ), - show: false, - errors: ["Enter a label"], - }} - > - Hello - -
    -
    - ); - }, -}; diff --git a/stories/toggle/toggle-5-removable.mdx b/stories/toggle/toggle-4-removable.mdx similarity index 62% rename from stories/toggle/toggle-5-removable.mdx rename to stories/toggle/toggle-4-removable.mdx index 35616b563..8ade5fbbf 100644 --- a/stories/toggle/toggle-5-removable.mdx +++ b/stories/toggle/toggle-4-removable.mdx @@ -1,6 +1,6 @@ import { Canvas, Meta } from "@storybook/blocks"; import { Heading3, Secondary, Title } from "../storybook-common"; -import * as ToggleRemovableStories from "./toggle-5-removable.stories"; +import * as ToggleRemovableStories from "./toggle-4-removable.stories"; import { PropsTable } from "./props-table"; @@ -9,5 +9,5 @@ import { PropsTable } from "./props-table"; Removable - - + + diff --git a/stories/toggle/toggle-4-removable.stories.tsx b/stories/toggle/toggle-4-removable.stories.tsx new file mode 100644 index 000000000..9cd98f2a4 --- /dev/null +++ b/stories/toggle/toggle-4-removable.stories.tsx @@ -0,0 +1,60 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Toggle } from "../../src"; +import { Variants } from "./doc-elements"; + +type Component = typeof Toggle; + +const meta: Meta = { + title: "Data Input/Toggle/Removable", + component: Toggle, +}; + +export default meta; + +export const CheckboxType: StoryObj = { + render: () => { + return ( + + + Text + + + Text + + + Text + + + Text + + + Text + + + ); + }, +}; + +export const RadioType: StoryObj = { + render: () => { + return ( + + + Text + + + Text + + + Text + + + Text + + + Text + + + ); + }, +}; diff --git a/stories/toggle/toggle-5-composite-section.mdx b/stories/toggle/toggle-5-composite-section.mdx new file mode 100644 index 000000000..534415e24 --- /dev/null +++ b/stories/toggle/toggle-5-composite-section.mdx @@ -0,0 +1,28 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../storybook-common"; +import * as ToggleCompositeSectionStories from "./toggle-5-composite-section.stories"; +import { PropsTable } from "./props-table"; + + + +[Back to main](/docs/data-input-toggle--docs#variants) + +Composite section + +The toggle can be extended to display inputs under an additional section. + + + + +Collapsible + +This additional section can be collapsed and expanded. + + + +Collapsible with errors + +When the section is collapsed, an error alert can be shown. + + + diff --git a/stories/toggle/toggle-5-composite-section.stories.tsx b/stories/toggle/toggle-5-composite-section.stories.tsx new file mode 100644 index 000000000..5f16a345d --- /dev/null +++ b/stories/toggle/toggle-5-composite-section.stories.tsx @@ -0,0 +1,205 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { useState } from "react"; +import { Toggle } from "../../src"; +import { Form } from "../../src/form"; +import { Variants } from "./doc-elements"; + +type Component = typeof Toggle; + +const meta: Meta = { + title: "Data Input/Toggle/With composite section", + component: Toggle, +}; +export default meta; + +export const CheckboxType: StoryObj = { + render: () => { + return ( + + , + show: true, + }} + > + Text + + , + show: true, + }} + checked + > + Text + + , + show: true, + }} + > + Text + + , + show: true, + }} + > + Text + + , + show: true, + }} + > + Text + + + ); + }, +}; + +export const RadioType: StoryObj = { + render: () => { + return ( + + , + show: true, + }} + > + Text + + , + show: true, + }} + > + Text + + , + show: true, + }} + > + Text + + , + show: true, + }} + > + Text + + , + show: true, + }} + error + > + Text + + + ); + }, +}; + +export const Collapsible: StoryObj = { + render: () => { + return ( + , + show: true, + collapsible: true, + }} + > + Sample text + + ); + }, +}; + +export const CollapsibleWithError: StoryObj = { + render: () => { + return ( + + ), + show: true, + collapsible: true, + errors: ["Something went wrong"], + }} + > + Sample text + + ); + }, +}; + +export const CollapsibleWithErrorAndDisabled: StoryObj = { + render: () => { + return ( + + ), + show: true, + collapsible: true, + errors: ["Something went wrong"], + }} + > + Sample text + + ); + }, +}; diff --git a/stories/toggle/toggle-5-removable.stories.tsx b/stories/toggle/toggle-5-removable.stories.tsx deleted file mode 100644 index ec5d85c13..000000000 --- a/stories/toggle/toggle-5-removable.stories.tsx +++ /dev/null @@ -1,240 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react"; -import { Toggle } from "../../src"; -import { Form } from "../../src/form"; -import { Headings, Wrapper } from "./doc-elements"; - -type Component = typeof Toggle; - -const meta: Meta = { - title: "Data Input/Toggle/removable", - component: Toggle, -}; - -export default meta; - -export const CheckboxRemovable: StoryObj = { - render: () => { - return ( - - -
    - ({})} - /> - ), - collapsible: false, - }} - > - Text - - ({})} - /> - ), - collapsible: false, - }} - checked - > - Text - - - ({})} - /> - ), - collapsible: false, - }} - > - Text - - ({})} - /> - ), - collapsible: false, - }} - > - Text - - ({})} - /> - ), - collapsible: false, - }} - > - Text - -
    -
    - ); - }, -}; - -export const RadioRemovable: StoryObj = { - render: () => { - return ( - - -
    - ({})} - /> - ), - collapsible: false, - }} - > - Text - - ({})} - /> - ), - collapsible: false, - }} - > - Text - - - ({})} - /> - ), - collapsible: false, - }} - > - Text - - ({})} - /> - ), - collapsible: false, - }} - > - Text - - ({})} - /> - ), - collapsible: false, - }} - error - > - Text - -
    -
    - ); - }, -}; From ed94517e299ffde75496f0af728bbac5e4443902 Mon Sep 17 00:00:00 2001 From: shawn wee Date: Thu, 6 Jun 2024 11:13:34 +0800 Subject: [PATCH 0159/1949] [MISC][SW] regen packagelock with node 18 - replaced rollup-plugin-terser with @rollup/plugin-terser - added eslint react hooks plugin --- .eslintrc | 3 +- package-lock.json | 45855 ++++++++++++++------------------------------ package.json | 3 +- rollup.config.js | 2 +- 4 files changed, 14252 insertions(+), 31611 deletions(-) diff --git a/.eslintrc b/.eslintrc index 5170ff9fc..bbedcaf8a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -10,7 +10,8 @@ "plugin:@typescript-eslint/recommended", "plugin:react/recommended", "prettier", - "plugin:mdx/recommended" + "plugin:mdx/recommended", + "plugin:react-hooks/recommended" ], "parserOptions": { "ecmaVersion": 11, diff --git a/package-lock.json b/package-lock.json index ebc01112b..ce9b2ac01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "@lifesg/react-design-system", "version": "2.6.0-canary.2", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -28,6 +28,7 @@ "@rollup/plugin-image": "^3.0.3", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-terser": "^0.4.4", "@storybook/addon-a11y": "^7.4.6", "@storybook/addon-actions": "^7.4.6", "@storybook/addon-essentials": "^7.4.6", @@ -57,6 +58,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-mdx": "^2.0.4", "eslint-plugin-react": "^7.29.4", + "eslint-plugin-react-hooks": "^4.6.2", "html-react-parser": "^2.0.0", "husky": "^7.0.4", "identity-obj-proxy": "^3.0.0", @@ -86,7 +88,6 @@ "rollup-plugin-generate-package-json": "^3.2.0", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.2", - "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.36.0", "storybook": "^7.4.6", "style-loader": "^2.0.0", @@ -101,19 +102,19 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz", - "integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", "dev": true }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -132,43 +133,43 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -183,21 +184,15 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -205,38 +200,39 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -245,19 +241,19 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", + "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "semver": "^6.3.1" }, "engines": { @@ -268,12 +264,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", + "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, @@ -285,9 +281,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", - "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -301,74 +297,79 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", + "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -378,35 +379,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", + "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-wrap-function": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -416,14 +417,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", + "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -433,114 +434,117 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", + "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/helper-function-name": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -549,13 +553,29 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", + "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "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.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "version": "7.24.7", + "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.24.7.tgz", + "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -565,14 +585,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -581,12 +601,49 @@ "@babel/core": "^7.13.0" } }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", + "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, + "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -598,12 +655,48 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.7.tgz", + "integrity": "sha512-CcmFwUJ3tKhLjPdt4NP+SHMshebytF8ZTYOv5ZDpkzq2sin80Wb5vJrGt8fhPrORQCfoSa0LAxC/DW+GAC5+Hw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-default-from": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -615,12 +708,70 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dev": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -708,6 +859,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.7.tgz", + "integrity": "sha512-bTPz4/635WQ9WhwsyPdxUJDVpsi/X9BMmy/8Rf/UAlOO4jSql4CxUCjWI5PiM+jG+c4LVPTScoTw80geFj9+Bw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", @@ -721,12 +888,12 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz", + "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -736,12 +903,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -751,12 +918,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -790,12 +957,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -907,12 +1074,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -938,12 +1105,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -953,14 +1120,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", - "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", + "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -971,14 +1138,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -988,12 +1155,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1003,12 +1170,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", + "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1018,13 +1185,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1034,13 +1201,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1051,19 +1218,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", + "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "globals": "^11.1.0" }, "engines": { @@ -1074,13 +1240,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1090,12 +1256,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", + "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1105,13 +1271,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1121,12 +1287,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1136,12 +1302,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1152,13 +1318,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1168,12 +1334,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1184,13 +1350,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.7.tgz", + "integrity": "sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-flow": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1200,12 +1366,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1215,14 +1382,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", + "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1232,12 +1399,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1248,12 +1415,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", + "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1263,12 +1430,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1279,12 +1446,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1294,13 +1461,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", - "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1310,14 +1477,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", + "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1327,15 +1494,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", - "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", + "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1345,13 +1512,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1361,13 +1528,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1377,12 +1544,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1392,12 +1559,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1408,12 +1575,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1424,16 +1591,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" + "@babel/plugin-transform-parameters": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1443,13 +1609,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1459,12 +1625,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1475,13 +1641,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", - "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", + "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1492,12 +1658,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1507,13 +1673,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1523,14 +1689,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1541,12 +1707,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1556,12 +1722,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", + "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1571,16 +1737,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", - "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", + "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.15" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1590,12 +1756,44 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", + "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", "dev": true, + "peer": true, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1605,13 +1803,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", - "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", + "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1621,12 +1819,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1637,12 +1835,33 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1652,12 +1871,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1667,13 +1886,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1683,12 +1902,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1698,12 +1917,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1713,12 +1932,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", + "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1728,15 +1947,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", - "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz", + "integrity": "sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1746,12 +1965,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1761,13 +1980,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1777,13 +1996,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1793,13 +2012,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1809,25 +2028,27 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz", - "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.2", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", + "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1839,59 +2060,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.23.2", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.23.0", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.23.0", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.23.0", - "@babel/plugin-transform-modules-commonjs": "^7.23.0", - "@babel/plugin-transform-modules-systemjs": "^7.23.0", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.23.0", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.23.0", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1903,14 +2123,14 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", - "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.7.tgz", + "integrity": "sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-flow-strip-types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1934,17 +2154,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.15.tgz", - "integrity": "sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", + "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.22.5", - "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1954,16 +2174,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz", - "integrity": "sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", + "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/plugin-transform-modules-commonjs": "^7.21.2", - "@babel/plugin-transform-typescript": "^7.21.3" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1973,15 +2193,15 @@ } }, "node_modules/@babel/register": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", - "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz", + "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", - "pirates": "^4.0.5", + "pirates": "^4.0.6", "source-map-support": "^0.5.16" }, "engines": { @@ -2030,6 +2250,19 @@ "node": ">=6" } }, + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/register/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -2066,6 +2299,15 @@ "node": ">=4" } }, + "node_modules/@babel/register/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/register/node_modules/pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -2078,6 +2320,15 @@ "node": ">=6" } }, + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", @@ -2085,9 +2336,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2096,41 +2347,35 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true - }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -2138,13 +2383,13 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2491,9 +2736,9 @@ } }, "node_modules/@dnd-kit/accessibility": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.0.1.tgz", - "integrity": "sha512-HXRrwS9YUYQO9lFRc/49uO/VICbM+O+ZRpFDe9Pd1rwVv2PCNkRiTZRdxrDgng/UkvdC3Re9r2vwPpXXrWeFzg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.0.tgz", + "integrity": "sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==", "dev": true, "dependencies": { "tslib": "^2.0.0" @@ -2503,13 +2748,13 @@ } }, "node_modules/@dnd-kit/core": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.0.8.tgz", - "integrity": "sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.1.0.tgz", + "integrity": "sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==", "dev": true, "dependencies": { - "@dnd-kit/accessibility": "^3.0.0", - "@dnd-kit/utilities": "^3.2.1", + "@dnd-kit/accessibility": "^3.1.0", + "@dnd-kit/utilities": "^3.2.2", "tslib": "^2.0.0" }, "peerDependencies": { @@ -2532,9 +2777,9 @@ } }, "node_modules/@dnd-kit/utilities": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.1.tgz", - "integrity": "sha512-OOXqISfvBw/1REtkSK2N3Fi2EQiLMlWUlqnOK/UpOISqBZPWpE6TqL+jcPtMOkE8TqYGiURvRdPSI9hltNUjEA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", + "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", "dev": true, "dependencies": { "tslib": "^2.0.0" @@ -2544,18 +2789,18 @@ } }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", "dev": true, "dependencies": { - "@emotion/memoize": "^0.8.0" + "@emotion/memoize": "^0.8.1" } }, "node_modules/@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", "dev": true }, "node_modules/@emotion/stylis": { @@ -2579,6 +2824,54 @@ "react": ">=16.8.0" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", @@ -2595,6 +2888,294 @@ "node": ">=12" } }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -2611,23 +3192,23 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -2643,9 +3224,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2657,10 +3238,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", - "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2673,30 +3266,30 @@ "dev": true }, "node_modules/@floating-ui/core": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", - "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", + "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", "dependencies": { "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/dom": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", - "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", + "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", "dependencies": { - "@floating-ui/core": "^1.5.3", + "@floating-ui/core": "^1.0.0", "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/react": { - "version": "0.26.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.6.tgz", - "integrity": "sha512-FFDAuSlRwb8CY4/VvYio/wwk/0339B257yRpKwNOjcHWNYL/fgjl1KUvT3K6ZZ4WDbBWYc7Km4ITMuPZrS8omg==", + "version": "0.26.16", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.16.tgz", + "integrity": "sha512-HEf43zxZNAI/E781QIVpYSF3K2VH4TTYZpqecjdsFkjsaU1EbaWcM++kw0HXFffj7gDUcBFevX8s0rQGQpxkow==", "dependencies": { - "@floating-ui/react-dom": "^2.0.6", - "@floating-ui/utils": "^0.2.1", - "tabbable": "^6.0.1" + "@floating-ui/react-dom": "^2.1.0", + "@floating-ui/utils": "^0.2.0", + "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -2704,11 +3297,11 @@ } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.6.tgz", - "integrity": "sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz", + "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==", "dependencies": { - "@floating-ui/dom": "^1.5.4" + "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -2716,9 +3309,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", - "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" }, "node_modules/@focus-reactive/react-yaml": { "version": "1.1.2", @@ -2742,14 +3335,31 @@ "react": "*" } }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true, + "peer": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "peer": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -2770,9 +3380,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@icons/material": { @@ -2825,29 +3435,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -2880,6 +3467,16 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -3013,9 +3610,9 @@ } }, "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -3180,9 +3777,9 @@ } }, "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -3219,6 +3816,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@jest/core/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3263,19 +3866,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/core/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/@jest/core/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -3293,6 +3883,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/core/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3305,6 +3904,31 @@ "node": ">=8" } }, + "node_modules/@jest/core/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jest/environment": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", @@ -3337,9 +3961,9 @@ } }, "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -3431,9 +4055,9 @@ } }, "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -3539,9 +4163,9 @@ } }, "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -3686,9 +4310,9 @@ } }, "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -3725,6 +4349,33 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@jest/reporters/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@jest/reporters/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3769,19 +4420,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/reporters/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/@jest/reporters/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -3799,6 +4437,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3811,6 +4458,18 @@ "node": ">=8" } }, + "node_modules/@jest/reporters/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -3837,6 +4496,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@jest/test-result": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", @@ -3869,9 +4537,9 @@ } }, "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -3961,9 +4629,9 @@ } }, "node_modules/@jest/test-sequencer/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -4044,19 +4712,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/test-sequencer/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/@jest/test-sequencer/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -4143,12 +4798,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, "node_modules/@jest/transform/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4170,19 +4819,6 @@ "node": ">=8" } }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", @@ -4253,45 +4889,45 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -4301,21 +4937,15 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@juggle/resize-observer": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", @@ -4420,6 +5050,146 @@ "node": ">= 8" } }, + "node_modules/@npmcli/config": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-6.4.1.tgz", + "integrity": "sha512-uSz+elSGzjCMANWa5IlbGczLYPkNI/LeR+cHrgaTqTrTSh9RHhOFA4daD2eRUz6lMtOW+Fnsb+qv7V2Zz8ML0g==", + "dev": true, + "dependencies": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^4.0.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/config/node_modules/ci-info": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/@npmcli/config/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/config/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/map-workspaces": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", + "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", + "dev": true, + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -4430,19 +5200,11 @@ "node": ">=14" } }, - "node_modules/@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" - }, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -4450,26 +5212,18 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@pkgr/utils/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", - "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", + "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", "dev": true, "dependencies": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", + "ansi-html": "^0.0.9", "core-js-pure": "^3.23.3", "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", "html-entities": "^2.1.0", "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", + "schema-utils": "^4.2.0", "source-map": "^0.7.3" }, "engines": { @@ -4481,7 +5235,7 @@ "sockjs-client": "^1.4.0", "type-fest": ">=0.17.0 <5.0.0", "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x", + "webpack-dev-server": "3.x || 4.x || 5.x", "webpack-hot-middleware": "2.x", "webpack-plugin-serve": "0.x || 1.x" }, @@ -4506,15 +5260,6 @@ } } }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/@radix-ui/number": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", @@ -5178,1753 +5923,1725 @@ "@babel/runtime": "^7.13.10" } }, - "node_modules/@reach/component-component": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@reach/component-component/-/component-component-0.1.3.tgz", - "integrity": "sha512-a1USH7L3bEfDdPN4iNZGvMEFuBfkdG+QNybeyDv8RloVFgZYRoM+KGXyy2KOfEnTUM8QWDRSROwaL3+ts5Angg==", - "dev": true, - "peerDependencies": { - "prop-types": "^15.6.2", - "react": "^16.4.0", - "react-dom": "^16.4.0" - } - }, "node_modules/@reach/observe-rect": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==", "dev": true }, - "node_modules/@reach/rect": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.2.1.tgz", - "integrity": "sha512-aZ9RsNHDMQ3zETonikqu9/85iXxj+LPqZ9Gr9UAncj3AufYmGeWG3XG6b37B+7ORH+mkhVpLU2ZlIWxmOe9Cqg==", + "node_modules/@react-native-community/cli": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.8.tgz", + "integrity": "sha512-0lRdgLNaXixWY4BfFRl1J6Ao9Lapo2z+++iE7TD4GAbuxOWJSyFi+KUA8XNfSDyML4jFO02MZgyBPxAWdaminQ==", "dev": true, + "peer": true, "dependencies": { - "@reach/component-component": "^0.1.3", - "@reach/observe-rect": "^1.0.3" + "@react-native-community/cli-clean": "13.6.8", + "@react-native-community/cli-config": "13.6.8", + "@react-native-community/cli-debugger-ui": "13.6.8", + "@react-native-community/cli-doctor": "13.6.8", + "@react-native-community/cli-hermes": "13.6.8", + "@react-native-community/cli-server-api": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "@react-native-community/cli-types": "13.6.8", + "chalk": "^4.1.2", + "commander": "^9.4.1", + "deepmerge": "^4.3.0", + "execa": "^5.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.2", + "semver": "^7.5.2" }, - "peerDependencies": { - "prop-types": "^15.6.2", - "react": "^16.8.0", - "react-dom": "^16.8.0" + "bin": { + "rnc-cli": "build/bin.js" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@react-spring/animated": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.3.tgz", - "integrity": "sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==", + "node_modules/@react-native-community/cli-clean": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.8.tgz", + "integrity": "sha512-B1uxlm1N4BQuWFvBL3yRl3LVvydjswsdbTi7tMrHMtSxfRio1p9HjcmDzlzKco09Y+8qBGgakm3jcMZGLbhXQQ==", "dev": true, + "peer": true, "dependencies": { - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2" } }, - "node_modules/@react-spring/core": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.3.tgz", - "integrity": "sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==", + "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" + "color-convert": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-spring/donate" + "engines": { + "node": ">=8" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-spring/konva": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/konva/-/konva-9.7.3.tgz", - "integrity": "sha512-R9sY6SiPGYqz1383P5qppg5z57YfChVknOC1UxxaGxpw+WiZa8fZ4zmZobslrw+os3/+HAXZv8O+EvU/nQpf7g==", + "node_modules/@react-native-community/cli-clean/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "konva": ">=2.6", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-konva": "^16.8.0 || ^16.8.7-0 || ^16.9.0-0 || ^16.10.1-0 || ^16.12.0-0 || ^16.13.0-0 || ^17.0.0-0 || ^17.0.1-0 || ^17.0.2-0 || ^18.0.0-0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-spring/native": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/native/-/native-9.7.3.tgz", - "integrity": "sha512-4mpxX3FuEBCUT6ae2fjhxcJW6bhr2FBwFf274eXB7n+U30Gdg8Wo2qYwcUnmiAA0S3dvP8vLTazx3+CYWFShnA==", + "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "react": "^16.8.0 || >=17.0.0 || >=18.0.0", - "react-native": ">=0.58" + "engines": { + "node": ">=8" } }, - "node_modules/@react-spring/shared": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.3.tgz", - "integrity": "sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==", + "node_modules/@react-native-community/cli-config": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.8.tgz", + "integrity": "sha512-RabCkIsWdP4Ex/sf1uSP9qxc30utm+0uIJAjrZkNQynm7T4Lyqn/kT3LKm4yM6M0Qk61YxGguiaXF4601vAduw==", "dev": true, + "peer": true, "dependencies": { - "@react-spring/types": "~9.7.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "cosmiconfig": "^5.1.0", + "deepmerge": "^4.3.0", + "fast-glob": "^3.3.2", + "joi": "^17.2.1" } }, - "node_modules/@react-spring/three": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.7.3.tgz", - "integrity": "sha512-Q1p512CqUlmMK8UMBF/Rj79qndhOWq4XUTayxMP9S892jiXzWQuj+xC3Xvm59DP/D4JXusXpxxqfgoH+hmOktA==", + "node_modules/@react-native-community/cli-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "@react-three/fiber": ">=6.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "three": ">=0.126" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-spring/types": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.3.tgz", - "integrity": "sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==", - "dev": true + "node_modules/@react-native-community/cli-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "node_modules/@react-spring/web": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.3.tgz", - "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==", + "node_modules/@react-native-community/cli-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-spring/zdog": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/zdog/-/zdog-9.7.3.tgz", - "integrity": "sha512-L+yK/1PvNi9n8cldiJ309k4LdxcPkeWE0W18l1zrP1IBIyd5NB5EPA8DMsGr9gtNnnIujtEzZk+4JIOjT8u/tw==", + "node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, + "peer": true, "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-zdog": ">=1.0", - "zdog": ">=1.0" + "engines": { + "node": ">=4" } }, - "node_modules/@react-theming/flatten": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@react-theming/flatten/-/flatten-0.1.1.tgz", - "integrity": "sha512-cieWCbO4xTgl8/LAUTEgiafEiFIcheARteyxXddnUHm/+7POCmRvSE/woHGXlVH7dFBlCbI4y/e5ikMzwBA3CA==", + "node_modules/@react-native-community/cli-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-config/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "dev": true, + "peer": true, "dependencies": { - "color": "^3.1.2", - "color-convert": "^2.0.1", - "color-parse": "^1.3.8", - "color-rgba": "^2.1.1", - "color-string": "^1.5.3", - "color-stringify": "^1.2.1", - "flat": "^5.0.0", - "is-color-stop": "^1.1.0", - "rgb-hex": "^3.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@react-theming/storybook-addon": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@react-theming/storybook-addon/-/storybook-addon-1.1.10.tgz", - "integrity": "sha512-7DHwzPIY4nerTqkUgyQ70IqPSHMycnYgJsYQMAVkT8dsQPuQUUKz2UVjqD0HkPMw3JA+wQuSvY9BpJap5z7fqQ==", + "node_modules/@react-native-community/cli-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "peer": true, "dependencies": { - "@codemirror/theme-one-dark": "0.19.0", - "@focus-reactive/react-yaml": "^1.1.2", - "@react-theming/flatten": "^0.1.1", - "@react-theming/theme-name": "^1.0.3", - "@react-theming/theme-swatch": "^1.0.0", - "@storybook/addon-devkit": "^1.4.2", - "@usulpro/react-json-view": "^2.0.1", - "color-string": "^1.9.1", - "react-color": "^2.18.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "peerDependencies": { - "@storybook/react": "*", - "@storybook/theming": "*", - "react": "*" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@react-theming/theme-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@react-theming/theme-name/-/theme-name-1.0.3.tgz", - "integrity": "sha512-5tYnKIG3wUJ3GTX50ldeU+nxLTEU8WXEGsHk8mWeG9XGC4VxKIp2gSqS6B/opCGmfuIFm459Dtru8PSuEXiJJg==", + "node_modules/@react-native-community/cli-config/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "peer": true, "dependencies": { - "color-name-list": "^4.7.1", - "nearest-color": "^0.4.4" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@react-theming/theme-swatch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-theming/theme-swatch/-/theme-swatch-1.0.0.tgz", - "integrity": "sha512-tOzDTUbFB5uQLMVHJ4fXWYZ4i7JIKjyrS7SlHDoscRZqM69lmT+s9fSZoD1/InTdX0M7Jh8thXF0SzeoxnD1/Q==", + "node_modules/@react-native-community/cli-config/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "dev": true, - "peerDependencies": { - "react": "^16.8.6 || ^17.0.0" + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.7", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", - "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", + "node_modules/@react-native-community/cli-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.30.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@react-native-community/cli-debugger-ui": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.8.tgz", + "integrity": "sha512-2cS+MX/Su6sVSjqpDftFOXbK7EuPg98xzsPkdPhkQnkZwvXqodK9CAMuDMbx3lBHHtrPrpMbBCpFmPN8iVOnlA==", "dev": true, + "peer": true, "dependencies": { - "balanced-match": "^1.0.0" + "serve-static": "^1.13.1" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/@react-native-community/cli-doctor": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.8.tgz", + "integrity": "sha512-/3Vdy9J3hyiu0y3nd/CU3kBqPlTRxnLXg7V6jrA1jbTOlZAMyV9imEkrqEaGK0SMOyMhh9Pipf98Ozhk0Nl4QA==", "dev": true, + "peer": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@react-native-community/cli-config": "13.6.8", + "@react-native-community/cli-platform-android": "13.6.8", + "@react-native-community/cli-platform-apple": "13.6.8", + "@react-native-community/cli-platform-ios": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "deepmerge": "^4.3.0", + "envinfo": "^7.10.0", + "execa": "^5.0.0", + "hermes-profile-transformer": "^0.0.6", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "semver": "^7.5.2", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1", + "yaml": "^2.2.1" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "peer": true, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/@rollup/plugin-image": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-image/-/plugin-image-3.0.3.tgz", - "integrity": "sha512-qXWQwsXpvD4trSb8PeFPFajp8JLpRtqqOeNYRUKnEQNHm7e5UP7fuSRcbjQAJ7wDZBbnJvSdY5ujNBQd9B1iFg==", + "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "mini-svg-data-uri": "^1.4.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@rollup/pluginutils": "^5.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", + "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, + "peer": true, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "node_modules/@react-native-community/cli-doctor/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "peer": true, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=10" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "peer": true, "dependencies": { - "type-detect": "4.0.8" + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-a11y": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-7.4.6.tgz", - "integrity": "sha512-RE8sXk9KEqgmjsFmG31eObgPMTOvvWnoNZIaZEHs88X30tNHtFwjc0jzvCR/xriKsBtQdYQTUSsB7pSjaJHNzQ==", + "node_modules/@react-native-community/cli-doctor/node_modules/yaml": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.3.tgz", + "integrity": "sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==", "dev": true, - "dependencies": { - "@storybook/addon-highlight": "7.4.6", - "@storybook/channels": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "axe-core": "^4.2.0", - "lodash": "^4.17.21", - "react-resize-detector": "^7.1.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "peer": true, + "bin": { + "yaml": "bin.mjs" }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "engines": { + "node": ">= 14" } }, - "node_modules/@storybook/addon-a11y/node_modules/@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", + "node_modules/@react-native-community/cli-hermes": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.8.tgz", + "integrity": "sha512-lZi/OBFuZUj5cLK94oEgtrtmxGoqeYVRcnHXl/R5c4put9PDl+qH2bEMlGZkFiw57ae3UZKr3TMk+1s4jh3FYQ==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@react-native-community/cli-platform-android": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6" } }, - "node_modules/@storybook/addon-a11y/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/addon-a11y/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "ts-dedent": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-a11y/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-a11y/node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", + "node_modules/@react-native-community/cli-platform-android": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.8.tgz", + "integrity": "sha512-vWrqeLRRTwp2kO33nbrAgbYn8HR2c2CpIfyVJY9Ckk7HGUSwDyxdcSu7YBvt2ShdfLZH0HctWFNXsgGrfg6BDw==", "dev": true, + "peer": true, "dependencies": { - "memoizerific": "^1.11.3" + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.2.4", + "logkitty": "^0.7.1" } }, - "node_modules/@storybook/addon-actions": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.4.6.tgz", - "integrity": "sha512-SsqZr3js5NinKPnC8AeNI7Ij+Q6fIl9tRdRmSulEgjksjOg7E5S1/Wsn5Bb2CCgj7MaX6VxGyC7s3XskQtDiIQ==", + "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "polished": "^4.2.2", - "prop-types": "^15.7.2", - "react-inspector": "^6.0.0", - "telejson": "^7.2.0", - "ts-dedent": "^2.0.0", - "uuid": "^9.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-actions/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "has-flag": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-actions/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-native-community/cli-platform-apple": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.8.tgz", + "integrity": "sha512-1JPohnlXPqU44zns3ALEzIbH2cKRw6JtEDJERgLuEUbs2r2NeJgqDbKyZ7fTTO8o+pegDnn6+Rr7qGVVOuUzzg==", "dev": true, + "peer": true, "dependencies": { - "ts-dedent": "^2.0.0" + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.0.12", + "ora": "^5.4.1" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/addon-actions/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=10" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-apple/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-actions/node_modules/telejson": { + "node_modules/@react-native-community/cli-platform-apple/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "memoizerific": "^1.11.3" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-actions/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "node_modules/@react-native-community/cli-platform-ios": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.8.tgz", + "integrity": "sha512-/IIcIRM8qaoD7iZqsvtf6Qq1AwtChWYfB9sTn3mTiolZ5Zd5bXH37g+6liPfAICRkj2Ptq3iXmjrDVUQAxrOXw==", "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" + "peer": true, + "dependencies": { + "@react-native-community/cli-platform-apple": "13.6.8" } }, - "node_modules/@storybook/addon-backgrounds": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.4.6.tgz", - "integrity": "sha512-+LHTZB/ZYMAzkyD5ZxSriBsqmsrvIaW/Nnd/BeuXGbkrVKKqM0qAKiFZAfjc2WchA1piVNy0/1Rsf+kuYCEiJw==", + "node_modules/@react-native-community/cli-server-api": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.8.tgz", + "integrity": "sha512-Lx664oWTzpVfbKUTy+3GIX7e+Mt5Zn+zdkM4ehllNdik/lbB3tM9Nrg8PSvOfI+tTXs2w55+nIydLfH+0FqJVg==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "memoizerific": "^1.11.3", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "@react-native-community/cli-debugger-ui": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.1", + "nocache": "^3.0.1", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^6.2.2" } }, - "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, + "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">= 10.14.2" } }, - "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dev": true, + "peer": true, "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@types/yargs-parser": "*" } }, - "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@react-native-community/cli-server-api/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/addon-controls": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.4.6.tgz", - "integrity": "sha512-4lq3sycEUIsK8SUWDYc60QgF4vV9FZZ3lDr6M7j2W9bOnvGw49d2fbdlnq+bX1ZprZZ9VgglQpBAorQB3BXZRw==", - "dev": true, - "dependencies": { - "@storybook/blocks": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/manager-api": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "lodash": "^4.17.21", - "ts-dedent": "^2.0.0" + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/addon-controls/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-native-community/cli-server-api/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-controls/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, + "peer": true, "dependencies": { - "ts-dedent": "^2.0.0" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">= 10" } }, - "node_modules/@storybook/addon-controls/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "peer": true + }, + "node_modules/@react-native-community/cli-server-api/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-devkit": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-devkit/-/addon-devkit-1.4.2.tgz", - "integrity": "sha512-ggy34eCzmiKOwgV7xYNjlPClGpmtnYODPJv0vkCKiDyPeVLHocq2UZ7ZkOhQ5GO7TM7aLeeC1JBS00tZId9oLA==", + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, + "peer": true, "dependencies": { - "@reach/rect": "^0.2.1", - "@storybook/addons": "^6.1.18", - "@storybook/core-events": "^6.1.18", - "@storybook/theming": "^6.1.18", - "deep-equal": "^2.0.2", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "@storybook/addons": "*", - "@storybook/react": "*", - "react": "*", - "react-dom": "*" + "async-limiter": "~1.0.0" } }, - "node_modules/@storybook/addon-docs": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.4.6.tgz", - "integrity": "sha512-dLaub+XWFq4hChw+xfuF9yYg0Txp77FUawKoAigccfjWXx+OOhRV3XTuAcknpXkYq94GWynHgUFXosXT9kbDNA==", + "node_modules/@react-native-community/cli-tools": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.8.tgz", + "integrity": "sha512-1MYlae9EkbjC7DBYOGMH5xF9yDoeNYUKgEdDjL6WAUBoF2gtwiZPM6igLKi/+dhb5sCtC7fiLrLi0Oevdf+RmQ==", "dev": true, + "peer": true, "dependencies": { - "@jest/transform": "^29.3.1", - "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/csf-plugin": "7.4.6", - "@storybook/csf-tools": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.4.6", - "@storybook/postinstall": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/react-dom-shim": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "fs-extra": "^11.1.0", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^7.5.2", + "shell-quote": "^1.7.3", + "sudo-prompt": "^9.0.0" } }, - "node_modules/@storybook/addon-docs/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/addon-docs/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@react-native-community/cli-tools/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=10" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/addon-essentials": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.4.6.tgz", - "integrity": "sha512-dWodufrt71TK7ELkeIvVae/x4PzECUlbOm57Iqqt4yQCyR291CgvI4PjeB8un2HbpcXCGZ+N/Oj3YkytvzBi4A==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "7.4.6", - "@storybook/addon-backgrounds": "7.4.6", - "@storybook/addon-controls": "7.4.6", - "@storybook/addon-docs": "7.4.6", - "@storybook/addon-highlight": "7.4.6", - "@storybook/addon-measure": "7.4.6", - "@storybook/addon-outline": "7.4.6", - "@storybook/addon-toolbars": "7.4.6", - "@storybook/addon-viewport": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/manager-api": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/preview-api": "7.4.6", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-highlight": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.4.6.tgz", - "integrity": "sha512-zCufxxD2KS5VwczxfkcBxe1oR/juTTn2H1Qm8kYvWCJQx3UxzX0+G9cwafbpV7eivqaufLweEwROkH+0KjAtkQ==", + "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", "dev": true, - "dependencies": { - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.4.6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/@storybook/addon-highlight/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-native-community/cli-tools/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" + "peer": true, + "bin": { + "mime": "cli.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/@storybook/addon-interactions": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.4.6.tgz", - "integrity": "sha512-zVZYrEPZPhNrXBuPqM7HbQvr6jwsje1sbCYj3wnp83U5wjciuqrngqHIlaSZ30zOWSfRVyzbyqL+JQZKA58BNA==", + "node_modules/@react-native-community/cli-tools/node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "7.4.6", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "jest-mock": "^27.0.6", - "polished": "^4.2.2", - "ts-dedent": "^2.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "is-wsl": "^1.1.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/@storybook/addon-interactions/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "has-flag": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-interactions/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-native-community/cli-types": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.8.tgz", + "integrity": "sha512-C4mVByy0i+/NPuPhdMLBR7ubEVkjVS1VwoQu/BoG1crJFNE+167QXAzH01eFbXndsjZaMWmD4Gerx7TYc6lHfA==", "dev": true, + "peer": true, "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "joi": "^17.2.1" } }, - "node_modules/@storybook/addon-interactions/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@react-native-community/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "color-convert": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=8" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/addon-links": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.4.6.tgz", - "integrity": "sha512-BPygElZKX+CPI9Se6GJNk1dYc5oxuhA+vHigO1tBqhiM6VkHyFP3cvezJNQvpNYhkUnu3cxnZXb3UJnlRbPY3g==", + "node_modules/@react-native-community/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/router": "7.4.6", - "@storybook/types": "7.4.6", - "prop-types": "^15.7.2", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.20.0 || >=14" } }, - "node_modules/@storybook/addon-links/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-native-community/cli/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-links/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-native-community/cli/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "peer": true, "dependencies": { - "ts-dedent": "^2.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/@storybook/addon-links/node_modules/@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", + "node_modules/@react-native-community/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "type-fest": "^2.19.0" + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@storybook/addon-links/node_modules/@storybook/router": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.4.6.tgz", - "integrity": "sha512-Vl1esrHkcHxDKqc+HY7+6JQpBPW3zYvGk0cQ2rxVMhWdLZTAz1hss9DqzN9tFnPyfn0a1Q77EpMySkUrvWKKNQ==", + "node_modules/@react-native-community/cli/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "p-locate": "^4.1.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-links/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/@react-native-community/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=12.20" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/addon-measure": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.4.6.tgz", - "integrity": "sha512-nCymMLaHnxv8TE3yEM1A9Tulb1NuRXRNmtsdHTkjv7P1aWCxZo8A/GZaottKe/GLT8jSRjZ+dnpYWrbAhw6wTQ==", + "node_modules/@react-native-community/cli/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/types": "7.4.6", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "p-limit": "^2.2.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/@storybook/addon-measure/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-native-community/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "has-flag": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@react-native/assets-registry": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.84.tgz", + "integrity": "sha512-dzUhwyaX04QosWZ8zyaaNB/WYZIdeDN1lcpfQbqiOhZJShRH+FLTDVONE/dqlMQrP+EO7lDqF0RrlIt9lnOCQQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/@storybook/addon-measure/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.84.tgz", + "integrity": "sha512-UR4uiii5szIJA84mSC6GJOfYKDq7/ThyetOQT62+BBcyGeHVtHlNLNRzgaMeLqIQaT8Fq4pccMI+7QqLOMXzdw==", "dev": true, + "peer": true, "dependencies": { - "ts-dedent": "^2.0.0" + "@react-native/codegen": "0.74.84" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=18" } }, - "node_modules/@storybook/addon-outline": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.4.6.tgz", - "integrity": "sha512-errNUblRVDLpuEaHQPr/nsrnsUkD2ARmXawkRvizgDWLIDMDJYjTON3MUCaVx3x+hlZ3I6X//G5TVcma8tCc8A==", + "node_modules/@react-native/babel-preset": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.84.tgz", + "integrity": "sha512-WUfu6Y4aGuVdocQZvx33BJiQWFH6kRCHYbZfBn2psgFrSRLgQWEQrDCxqPFObNAVSayM0rNhp2FvI5K/Eyeqlg==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/types": "7.4.6", - "ts-dedent": "^2.0.0" + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.74.84", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=18" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "@babel/core": "*" } }, - "node_modules/@storybook/addon-outline/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-native/codegen": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.84.tgz", + "integrity": "sha512-0hXlnu9i0o8v+gXKQi+x6T471L85kCDwW4WrJiYAeOheWrQdNNW6rC3g8+LL7HXAf7QcHGU/8/d57iYfdVK2BQ==", "dev": true, + "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "@babel/parser": "^7.20.0", + "glob": "^7.1.1", + "hermes-parser": "0.19.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" } }, - "node_modules/@storybook/addon-outline/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-native/codegen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "ts-dedent": "^2.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/addon-storysource": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-storysource/-/addon-storysource-7.6.4.tgz", - "integrity": "sha512-D63IB8bkqn5ZDq4yjvkcLVfGz3OcAQUohlxSFR1e7COo8jMSTiQWjN7xaVPNOnVJRCj6GrlRlto/hqGl+F+WiQ==", + "node_modules/@react-native/codegen/node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", "dev": true, + "peer": true, "dependencies": { - "@storybook/source-loader": "7.6.4", - "estraverse": "^5.2.0", - "tiny-invariant": "^1.3.1" + "tslib": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=4" } }, - "node_modules/@storybook/addon-themes": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-7.5.1.tgz", - "integrity": "sha512-rWq6xr+Yvy9xrucy/7aiSuovEx5fDTgx6RGQcWhKBurHDAr2gbWX+HrYHyQsmG8zZ1x5SRKJiqj9vgS1g9cxfQ==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.5.1", - "@storybook/components": "7.5.1", - "@storybook/core-events": "7.5.1", - "@storybook/manager-api": "7.5.1", - "@storybook/preview-api": "7.5.1", - "@storybook/theming": "7.5.1", - "@storybook/types": "7.5.1", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "node_modules/@react-native/codegen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/addon-themes/node_modules/@storybook/channels": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.5.1.tgz", - "integrity": "sha512-7hTGHqvtdFTqRx8LuCznOpqPBYfUeMUt/0IIp7SFuZT585yMPxrYoaK//QmLEWnPb80B8HVTSQi7caUkJb32LA==", + "node_modules/@react-native/codegen/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.5.1", - "@storybook/core-events": "7.5.1", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/addon-themes/node_modules/@storybook/client-logger": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.5.1.tgz", - "integrity": "sha512-XxbLvg0aQRoBrzxYLcVYCbjDkGbkU8Rfb74XbV2CLiO2bIbFPmA1l1Nwbp+wkCGA+O6Z1zwzSl6wcKKqZ6XZCg==", + "node_modules/@react-native/codegen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-themes/node_modules/@storybook/components": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.5.1.tgz", - "integrity": "sha512-fdzzxGBV/Fj9pYwfYL3RZsVUHeBqlfLMBP/L6mPmjaZSwHFqkaRZZUajZc57lCtI+TOy2gY6WH3cPavEtqtgLw==", + "node_modules/@react-native/codegen/node_modules/jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", "dev": true, + "peer": true, "dependencies": { - "@radix-ui/react-select": "^1.2.2", - "@radix-ui/react-toolbar": "^1.0.4", - "@storybook/client-logger": "7.5.1", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/theming": "7.5.1", - "@storybook/types": "7.5.1", - "memoizerific": "^1.11.3", - "use-resize-observer": "^9.1.0", - "util-deprecate": "^1.0.2" + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "bin": { + "jscodeshift": "bin/jscodeshift.js" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@babel/preset-env": "^7.1.6" } }, - "node_modules/@storybook/addon-themes/node_modules/@storybook/core-events": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.5.1.tgz", - "integrity": "sha512-2eyaUhTfmEEqOEZVoCXVITCBn6N7QuZCG2UNxv0l//ED+7MuMiFhVw7kS7H3WOVk65R7gb8qbKFTNX8HFTgBHg==", + "node_modules/@react-native/codegen/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "peer": true, "dependencies": { - "ts-dedent": "^2.0.0" + "minimist": "^1.2.6" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/@storybook/addon-themes/node_modules/@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", + "node_modules/@react-native/codegen/node_modules/recast": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", "dev": true, + "peer": true, "dependencies": { - "type-fest": "^2.19.0" + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@react-native/codegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@storybook/addon-themes/node_modules/@storybook/manager-api": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.5.1.tgz", - "integrity": "sha512-ygwJywluhhE1dpA0jC2D/3NFhMXzFCt+iW4m3cOwexYTuiDWF66AbGOFBx9peE7Wk/Z9doKkf9E3v11enwaidA==", + "node_modules/@react-native/codegen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@storybook/channels": "7.5.1", - "@storybook/client-logger": "7.5.1", - "@storybook/core-events": "7.5.1", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/router": "7.5.1", - "@storybook/theming": "7.5.1", - "@storybook/types": "7.5.1", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "semver": "^7.3.7", - "store2": "^2.14.2", - "telejson": "^7.2.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-themes/node_modules/@storybook/preview-api": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.5.1.tgz", - "integrity": "sha512-8xjUbuGmHLmw8tfTUCjXSvMM9r96JaexPFmHdwW6XLe71KKdWp8u96vRDRE5648cd+/of15OjaRtakRKqluA/A==", + "node_modules/@react-native/codegen/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, + "peer": true, "dependencies": { - "@storybook/channels": "7.5.1", - "@storybook/client-logger": "7.5.1", - "@storybook/core-events": "7.5.1", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/types": "7.5.1", - "@types/qs": "^6.9.5", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "synchronous-promise": "^2.0.15", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "node_modules/@storybook/addon-themes/node_modules/@storybook/router": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.5.1.tgz", - "integrity": "sha512-BvKo+IxWwo3dfIG1+vLtZLT4qqkNHL5GTIozTyX04uqt9ByYZL6SJEzxEa1Xn6Qq/fbdQwzCanNHbTlwiTMf7Q==", + "node_modules/@react-native/community-cli-plugin": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.84.tgz", + "integrity": "sha512-GBKE+1sUh86fS2XXV46gMCNHMc1KetshMbYJ0AhDhldpaILZHqRBX50mdVsiYVvkzp4QjM0nmYqefuJ9NVwicQ==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.5.1", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@react-native-community/cli-server-api": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "@react-native/dev-middleware": "0.74.84", + "@react-native/metro-babel-transformer": "0.74.84", + "chalk": "^4.0.0", + "execa": "^5.1.1", + "metro": "^0.80.3", + "metro-config": "^0.80.3", + "metro-core": "^0.80.3", + "node-fetch": "^2.2.0", + "querystring": "^0.2.1", + "readline": "^1.3.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=18" } }, - "node_modules/@storybook/addon-themes/node_modules/@storybook/theming": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.5.1.tgz", - "integrity": "sha512-ETLAOn10hI4Mkmjsr0HGcM6HbzaURrrPBYmfXOrdbrzEVN+AHW4FlvP9d8fYyP1gdjPE1F39XvF0jYgt1zXiHQ==", + "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.5.1", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "color-convert": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=8" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/addon-themes/node_modules/@storybook/types": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.5.1.tgz", - "integrity": "sha512-ZcMSaqFNx1E+G00nRDUi8kKL7gxJVlnCvbKLNj3V85guy4DkIYAZr31yDqze07gDWbjvKoHIp3tKpgE+2i8upQ==", + "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@storybook/channels": "7.5.1", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/addon-themes/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@react-native/community-cli-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "yallist": "^4.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.84.tgz", + "integrity": "sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/@storybook/addon-themes/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@react-native/dev-middleware": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz", + "integrity": "sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ==", "dev": true, + "peer": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.74.84", + "@rnx-kit/chromium-edge-launcher": "^1.0.0", + "chrome-launcher": "^0.15.2", + "connect": "^3.6.5", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "selfsigned": "^2.4.1", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0", + "ws": "^6.2.2" }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/@storybook/addon-themes/node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "peer": true, "dependencies": { - "memoizerific": "^1.11.3" + "ms": "2.0.0" } }, - "node_modules/@storybook/addon-themes/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "peer": true + }, + "node_modules/@react-native/dev-middleware/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, + "peer": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, "engines": { - "node": ">=12.20" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/addon-themes/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@storybook/addon-toolbars": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.4.6.tgz", - "integrity": "sha512-L9m2FBcKeteGq7qIYsMJr0LEfiH7Wdrv5IDcldZTn68eZUJTh1p4GdJZcOmzX1P5IFRr76hpu03iWsNlWQjpbQ==", + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "async-limiter": "~1.0.0" } }, - "node_modules/@storybook/addon-toolbars/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-native/gradle-plugin": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.84.tgz", + "integrity": "sha512-wYWC5WWXqzCCe4PDogz9pNc4xH5ZamahW5XGSbrrYJ5V3walZ+7z43V6iEBJkZbLjj9YBcSttkXYGr1Xh4veAg==", "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.84.tgz", + "integrity": "sha512-+PgxuUjBw9JVlz6m4ECsIJMLbDopnr4rpLmsG32hQaJrg0wMuvHtsgAY/J/aVCSG2GNUXexfjrnhc+O9yGOZXQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/@storybook/addon-toolbars/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@react-native/metro-babel-transformer": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.84.tgz", + "integrity": "sha512-YtVGq7jkgyUECv5yt4BOFbOXyW4ddUn8+dnwGGpJKdfhXYL5o5++AxNdE+2x+SZdkj3JUVekGKPwRabFECABaw==", "dev": true, + "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "@babel/core": "^7.20.0", + "@react-native/babel-preset": "0.74.84", + "hermes-parser": "0.19.1", + "nullthrows": "^1.1.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=18" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@babel/core": "*" } }, - "node_modules/@storybook/addon-viewport": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.4.6.tgz", - "integrity": "sha512-INDtk54j7bi7NgxMfd2ATmbA0J7nAd6X8itMkLIyPuPJtx8bYHPDORyemDOd0AojgmAdTOAyUtDYdI/PFeo4Cw==", + "node_modules/@react-native/normalize-colors": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz", + "integrity": "sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A==", + "dev": true, + "peer": true + }, + "node_modules/@react-spring/animated": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.3.tgz", + "integrity": "sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "memoizerific": "^1.11.3", - "prop-types": "^15.7.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/addon-viewport/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-spring/core": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.3.tgz", + "integrity": "sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0" + "@react-spring/animated": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/addon-viewport/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-spring/shared": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.3.tgz", + "integrity": "sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==", "dev": true, "dependencies": { - "ts-dedent": "^2.0.0" + "@react-spring/types": "~9.7.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/addon-viewport/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@react-spring/types": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.3.tgz", + "integrity": "sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==", + "dev": true + }, + "node_modules/@react-spring/web": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.3.tgz", + "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==", "dev": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/addons": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.16.tgz", - "integrity": "sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==", + "node_modules/@react-spring/zdog": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/zdog/-/zdog-9.7.3.tgz", + "integrity": "sha512-L+yK/1PvNi9n8cldiJ309k4LdxcPkeWE0W18l1zrP1IBIyd5NB5EPA8DMsGr9gtNnnIujtEzZk+4JIOjT8u/tw==", "dev": true, "dependencies": { - "@storybook/api": "6.5.16", - "@storybook/channels": "6.5.16", - "@storybook/client-logger": "6.5.16", - "@storybook/core-events": "6.5.16", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.16", - "@storybook/theming": "6.5.16", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-zdog": ">=1.0", + "zdog": ">=1.0" } }, - "node_modules/@storybook/api": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.16.tgz", - "integrity": "sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==", + "node_modules/@react-theming/flatten": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@react-theming/flatten/-/flatten-0.1.1.tgz", + "integrity": "sha512-cieWCbO4xTgl8/LAUTEgiafEiFIcheARteyxXddnUHm/+7POCmRvSE/woHGXlVH7dFBlCbI4y/e5ikMzwBA3CA==", "dev": true, "dependencies": { - "@storybook/channels": "6.5.16", - "@storybook/client-logger": "6.5.16", - "@storybook/core-events": "6.5.16", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.16", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.16", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "telejson": "^6.0.8", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" + "color": "^3.1.2", + "color-convert": "^2.0.1", + "color-parse": "^1.3.8", + "color-rgba": "^2.1.1", + "color-string": "^1.5.3", + "color-stringify": "^1.2.1", + "flat": "^5.0.0", + "is-color-stop": "^1.1.0", + "rgb-hex": "^3.0.0" + } + }, + "node_modules/@react-theming/storybook-addon": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@react-theming/storybook-addon/-/storybook-addon-1.1.10.tgz", + "integrity": "sha512-7DHwzPIY4nerTqkUgyQ70IqPSHMycnYgJsYQMAVkT8dsQPuQUUKz2UVjqD0HkPMw3JA+wQuSvY9BpJap5z7fqQ==", + "dev": true, + "dependencies": { + "@codemirror/theme-one-dark": "0.19.0", + "@focus-reactive/react-yaml": "^1.1.2", + "@react-theming/flatten": "^0.1.1", + "@react-theming/theme-name": "^1.0.3", + "@react-theming/theme-swatch": "^1.0.0", + "@storybook/addon-devkit": "^1.4.2", + "@usulpro/react-json-view": "^2.0.1", + "color-string": "^1.9.1", + "react-color": "^2.18.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "@storybook/react": "*", + "@storybook/theming": "*", + "react": "*" + } + }, + "node_modules/@react-theming/storybook-addon/node_modules/@storybook/addon-devkit": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@storybook/addon-devkit/-/addon-devkit-1.4.2.tgz", + "integrity": "sha512-ggy34eCzmiKOwgV7xYNjlPClGpmtnYODPJv0vkCKiDyPeVLHocq2UZ7ZkOhQ5GO7TM7aLeeC1JBS00tZId9oLA==", + "dev": true, + "dependencies": { + "@reach/rect": "^0.2.1", + "@storybook/addons": "^6.1.18", + "@storybook/core-events": "^6.1.18", + "@storybook/theming": "^6.1.18", + "deep-equal": "^2.0.2", + "prop-types": "^15.6.2" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@storybook/addons": "*", + "@storybook/react": "*", + "react": "*", + "react-dom": "*" } }, - "node_modules/@storybook/blocks": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.4.6.tgz", - "integrity": "sha512-HxBSAeOiTZW2jbHQlo1upRWFgoMsaAyKijUFf5MwwMNIesXCuuTGZDJ3xTABwAVLK2qC9Ektfbo0CZCiPVuDRQ==", + "node_modules/@react-theming/storybook-addon/node_modules/@storybook/addon-devkit/node_modules/@reach/rect": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.2.1.tgz", + "integrity": "sha512-aZ9RsNHDMQ3zETonikqu9/85iXxj+LPqZ9Gr9UAncj3AufYmGeWG3XG6b37B+7ORH+mkhVpLU2ZlIWxmOe9Cqg==", "dev": true, "dependencies": { - "@storybook/channels": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/csf": "^0.1.0", - "@storybook/docs-tools": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "@types/lodash": "^4.14.167", - "color-convert": "^2.0.1", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "markdown-to-jsx": "^7.1.8", + "@reach/component-component": "^0.1.3", + "@reach/observe-rect": "^1.0.3" + }, + "peerDependencies": { + "prop-types": "^15.6.2", + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@react-theming/storybook-addon/node_modules/@storybook/addon-devkit/node_modules/@reach/rect/node_modules/@reach/component-component": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@reach/component-component/-/component-component-0.1.3.tgz", + "integrity": "sha512-a1USH7L3bEfDdPN4iNZGvMEFuBfkdG+QNybeyDv8RloVFgZYRoM+KGXyy2KOfEnTUM8QWDRSROwaL3+ts5Angg==", + "dev": true, + "peerDependencies": { + "prop-types": "^15.6.2", + "react": "^16.4.0", + "react-dom": "^16.4.0" + } + }, + "node_modules/@react-theming/storybook-addon/node_modules/@storybook/addon-devkit/node_modules/@storybook/theming": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", + "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "6.5.16", + "core-js": "^3.8.2", "memoizerific": "^1.11.3", - "polished": "^4.2.2", - "react-colorful": "^5.1.2", - "telejson": "^7.2.0", - "tocbot": "^4.20.1", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" + "regenerator-runtime": "^0.13.7" }, "funding": { "type": "opencollective", @@ -6935,249 +7652,393 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/blocks/node_modules/@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", + "node_modules/@react-theming/storybook-addon/node_modules/@storybook/client-logger": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz", + "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" + "core-js": "^3.8.2", + "global": "^4.4.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/blocks/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@react-theming/storybook-addon/node_modules/@storybook/core-events": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.16.tgz", + "integrity": "sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0" + "core-js": "^3.8.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/blocks/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@react-theming/storybook-addon/node_modules/@usulpro/react-json-view": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@usulpro/react-json-view/-/react-json-view-2.0.1.tgz", + "integrity": "sha512-X8Ik4JmZF2Cu7vZTJQwHIbDqNaJEUEGZmdAPxKe4Ed+Xa3dyVTAeA9ea/nTNCzKRTZBIxvJFXvibpglpJ136BA==", "dev": true, "dependencies": { - "ts-dedent": "^2.0.0" + "color-string": "^1.5.3", + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^6.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "react": "^16.0.0 || ^15.5.4", + "react-dom": "^16.0.0 || ^15.5.4" } }, - "node_modules/@storybook/blocks/node_modules/@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", + "node_modules/@react-theming/storybook-addon/node_modules/@usulpro/react-json-view/node_modules/react-textarea-autosize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", + "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", "dev": true, "dependencies": { - "type-fest": "^2.19.0" + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": ">=0.14.0 <17.0.0" } }, - "node_modules/@storybook/blocks/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@react-theming/storybook-addon/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", "dev": true, + "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.14.0" } }, - "node_modules/@storybook/blocks/node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", + "node_modules/@react-theming/storybook-addon/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/@react-theming/storybook-addon/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "dev": true, + "peer": true, "dependencies": { - "memoizerific": "^1.11.3" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "node_modules/@storybook/blocks/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/@react-theming/theme-name": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@react-theming/theme-name/-/theme-name-1.0.3.tgz", + "integrity": "sha512-5tYnKIG3wUJ3GTX50ldeU+nxLTEU8WXEGsHk8mWeG9XGC4VxKIp2gSqS6B/opCGmfuIFm459Dtru8PSuEXiJJg==", + "dev": true, + "dependencies": { + "color-name-list": "^4.7.1", + "nearest-color": "^0.4.4" + } + }, + "node_modules/@react-theming/theme-swatch": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-theming/theme-swatch/-/theme-swatch-1.0.0.tgz", + "integrity": "sha512-tOzDTUbFB5uQLMVHJ4fXWYZ4i7JIKjyrS7SlHDoscRZqM69lmT+s9fSZoD1/InTdX0M7Jh8thXF0SzeoxnD1/Q==", + "dev": true, + "peerDependencies": { + "react": "^16.8.6 || ^17.0.0" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "^18.0.0", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=14.15" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", + "dev": true, + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "peer": true, "engines": { - "node": ">=12.20" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/builder-manager": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.4.6.tgz", - "integrity": "sha512-zylZCD2rmyLOOFBFmUgtJg6UNUKmRNgXiig1XApzS2TkIbTZP827DsVEUl0ey/lskCe0uArkrEBR6ICba8p/Rw==", + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.8", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", + "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", "dev": true, "dependencies": { - "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.4.6", - "@storybook/manager": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@types/ejs": "^3.1.1", - "@types/find-cache-dir": "^3.2.1", - "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", - "browser-assert": "^1.2.1", - "ejs": "^3.1.8", - "esbuild": "^0.18.0", - "esbuild-plugin-alias": "^0.2.1", - "express": "^4.17.3", - "find-cache-dir": "^3.0.0", - "fs-extra": "^11.1.0", - "process": "^0.11.10", - "util": "^0.12.4" + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@storybook/builder-webpack5": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.4.6.tgz", - "integrity": "sha512-j7AyDPlUuO2GiH6riB8iGbT7blQpyVGB+rMHXPSm7v6/U7IITbNzxFwe+sSMLoFr8K1e2VXpgqQ9p3rHFey+nw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.22.9", - "@storybook/addons": "7.4.6", - "@storybook/channels": "7.4.6", - "@storybook/client-api": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/core-webpack": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/preview": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/router": "7.4.6", - "@storybook/store": "7.4.6", - "@storybook/theming": "7.4.6", - "@swc/core": "^1.3.49", - "@types/node": "^16.0.0", - "@types/semver": "^7.3.4", - "babel-loader": "^9.0.0", - "babel-plugin-named-exports-order": "^0.0.2", - "browser-assert": "^1.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "constants-browserify": "^1.0.0", - "css-loader": "^6.7.1", - "express": "^4.17.3", - "fork-ts-checker-webpack-plugin": "^8.0.0", - "fs-extra": "^11.1.0", - "html-webpack-plugin": "^5.5.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "semver": "^7.3.7", - "style-loader": "^3.3.1", - "swc-loader": "^0.2.3", - "terser-webpack-plugin": "^5.3.1", - "ts-dedent": "^2.0.0", - "url": "^0.11.0", - "util": "^0.12.4", - "util-deprecate": "^1.0.2", - "webpack": "5", - "webpack-dev-middleware": "^6.1.1", - "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.5.0" + "node_modules/@rollup/plugin-image": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-image/-/plugin-image-3.0.3.tgz", + "integrity": "sha512-qXWQwsXpvD4trSb8PeFPFajp8JLpRtqqOeNYRUKnEQNHm7e5UP7fuSRcbjQAJ7wDZBbnJvSdY5ujNBQd9B1iFg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "mini-svg-data-uri": "^1.4.4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { - "typescript": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { "optional": true } } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/addons": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.4.6.tgz", - "integrity": "sha512-c+4awrtwNlJayFdgLkEXa5H2Gj+KNlxuN+Z5oDAdZBLqXI8g0gn7eYO2F/eCSIDWdd/+zcU2uq57XPFKc8veHQ==", + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true, + "peer": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true, + "peer": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@storybook/addon-a11y": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-7.6.19.tgz", + "integrity": "sha512-92SOapbXukkO0RlrA0+8qa61NlCGSUFM7n5DfAA6tobIfhBAhfsEi7I9Q/0F95SCAgJoVVQdeIGKdvHjxO8DAg==", "dev": true, "dependencies": { - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/types": "7.4.6" + "@storybook/addon-highlight": "7.6.19", + "axe-core": "^4.2.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", + "node_modules/@storybook/addon-actions": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.19.tgz", + "integrity": "sha512-ATLrA5QKFJt7tIAScRHz5T3eBQ+RG3jaZk08L7gChvyQZhei8knWwePElZ7GaWbCr9BgznQp1lQUUXq/UUblAQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", + "@storybook/core-events": "7.6.19", "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" + "@types/uuid": "^9.0.1", + "dequal": "^2.0.2", + "polished": "^4.2.2", + "uuid": "^9.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@storybook/addon-backgrounds": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.19.tgz", + "integrity": "sha512-Nu3LAZODRSV2e5bOroKm/Jp6BIFzwu/nJxD5OvLWkkwNCh+vDXUFbbaVrZf5xRL+fHd9iLFPtWbJQpF/w7UsCw==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0" + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@storybook/addon-controls": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.19.tgz", + "integrity": "sha512-cl6PCNEwihDjuWIUsKTyDNKk+/IE4J3oMbSY5AZV/9Z0jJbpMV2shVm5DMZm5LhCCVcu5obWcxCIa4FMIMJAMQ==", "dev": true, "dependencies": { + "@storybook/blocks": "7.6.19", + "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, "funding": { @@ -7185,15 +8046,31 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/router": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.4.6.tgz", - "integrity": "sha512-Vl1esrHkcHxDKqc+HY7+6JQpBPW3zYvGk0cQ2rxVMhWdLZTAz1hss9DqzN9tFnPyfn0a1Q77EpMySkUrvWKKNQ==", + "node_modules/@storybook/addon-docs": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.19.tgz", + "integrity": "sha512-nv+9SR/NOtM8Od2esOXHcg0NQT8Pk8BMUyGwZu5Q3MLI4JxNVEG65dY0IP2j6Knc4UtlvQTpM0f7m5xp4seHjQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" + "@jest/transform": "^29.3.1", + "@mdx-js/react": "^2.1.5", + "@storybook/blocks": "7.6.19", + "@storybook/client-logger": "7.6.19", + "@storybook/components": "7.6.19", + "@storybook/csf-plugin": "7.6.19", + "@storybook/csf-tools": "7.6.19", + "@storybook/global": "^5.0.0", + "@storybook/mdx2-csf": "^1.0.0", + "@storybook/node-logger": "7.6.19", + "@storybook/postinstall": "7.6.19", + "@storybook/preview-api": "7.6.19", + "@storybook/react-dom-shim": "7.6.19", + "@storybook/theming": "7.6.19", + "@storybook/types": "7.6.19", + "fs-extra": "^11.1.0", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", @@ -7204,14 +8081,14 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@storybook/addon-docs/node_modules/@storybook/theming": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.19.tgz", + "integrity": "sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", + "@storybook/client-logger": "7.6.19", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -7224,331 +8101,196 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true + "node_modules/@storybook/addon-essentials": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.19.tgz", + "integrity": "sha512-SC33ZEQ5YaOt9wDkrdZmwQgqPWo9om/gqnyif06eug3SwrTe9JjO5iq1PIBfQodLD9MAxr9cwBvO0NG505oszQ==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "7.6.19", + "@storybook/addon-backgrounds": "7.6.19", + "@storybook/addon-controls": "7.6.19", + "@storybook/addon-docs": "7.6.19", + "@storybook/addon-highlight": "7.6.19", + "@storybook/addon-measure": "7.6.19", + "@storybook/addon-outline": "7.6.19", + "@storybook/addon-toolbars": "7.6.19", + "@storybook/addon-viewport": "7.6.19", + "@storybook/core-common": "7.6.19", + "@storybook/manager-api": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/preview-api": "7.6.19", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } }, - "node_modules/@storybook/builder-webpack5/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/@storybook/addon-highlight": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.19.tgz", + "integrity": "sha512-/pApl0oiVU1CQ8xETRNDLDthMBjeTmvFnTRq8RJ9m0JYTrSsoyHDmj9zS4K1k9gReqijE7brslhP8d2tblBpNw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@storybook/global": "^5.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/@storybook/addon-interactions": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.6.19.tgz", + "integrity": "sha512-lMQDu6JT2LXDWcRnIGvrKRk/W+67zOtUNpDKwoVuvM5eHVJcza5SPV6v8yXDLCHLOt7RZ15h6LT2uXabfKpcww==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3" + "@storybook/global": "^5.0.0", + "@storybook/types": "7.6.19", + "jest-mock": "^27.0.6", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" }, - "peerDependencies": { - "ajv": "^8.8.2" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "node_modules/@storybook/addon-links": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.19.tgz", + "integrity": "sha512-qMIFfcsMf4olxhYUHUV2ZJhxphh6Xpf1DMd0lxKqAibfxl/sX1m0rJkyiqWSBxbCmAy/pwdgqEOJ1lpDUsJ33w==", "dev": true, "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">= 14.15.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } } }, - "node_modules/@storybook/builder-webpack5/node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "node_modules/@storybook/addon-measure": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.19.tgz", + "integrity": "sha512-n+cfhVXXouBv9oQr3a77vvip5dTznaNoBDWMafP2ohauc8jBlAxeBwCjk5r3pyThMRIFCTG/ypZrhiJcSJT3bw==", "dev": true, "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" + "@storybook/global": "^5.0.0", + "tiny-invariant": "^1.3.1" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/@storybook/builder-webpack5/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "node_modules/@storybook/addon-outline": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.19.tgz", + "integrity": "sha512-Tt4MrfjK5j/Mdh8nJ8ccVyh78Dy7aiEPxO31YVvr5XUkge0pDi1PX328mHRDPur0i56NM8ssVbekWBZr+9MxlA==", "dev": true, "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "node_modules/@storybook/addon-storysource": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-storysource/-/addon-storysource-7.6.19.tgz", + "integrity": "sha512-wQw2vIdiRgreYwsIRyUrCzZiRGON5v0Y9JfQN6uBUYM70/PebUPfC+dptOfKa9U8kf2eidtYeLo5rC71pFxOSw==", "dev": true, "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@storybook/source-loader": "7.6.19", + "estraverse": "^5.2.0", + "tiny-invariant": "^1.3.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "node_modules/@storybook/addon-themes": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-7.6.19.tgz", + "integrity": "sha512-0IjnAhA/uvUnjfCIwN8hgYgqe49lT5HfiXHkMZUF+8NtLNO3Dne8WGZiVoulMaNzFm1E3dIC2aJTg+DMFh/8Fg==", "dev": true, "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/@storybook/builder-webpack5/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "node_modules/@storybook/addon-toolbars": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.19.tgz", + "integrity": "sha512-+qGbPP2Vo/HoPiS4EJopZ127HGculCV74Hkz6ot7ob6AkYdA1yLMPzWns/ZXNIWm6ab3jV+iq+mQCM/i1qJzvA==", "dev": true, - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "node_modules/@storybook/addon-viewport": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.19.tgz", + "integrity": "sha512-OQQtJ2kYwImbvE9QiC3I3yR0O0EBgNjq+XSaSS4ixJrvUyesfuB7Lm7RkubhEEiP4yANi9OlbzsqZelmPOnk6w==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" + "memoizerific": "^1.11.3" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@storybook/addons": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.16.tgz", + "integrity": "sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/style-loader": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" + "@storybook/api": "6.5.16", + "@storybook/channels": "6.5.16", + "@storybook/client-logger": "6.5.16", + "@storybook/core-events": "6.5.16", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.16", + "@storybook/theming": "6.5.16", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "dependencies": { - "memoizerific": "^1.11.3" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@storybook/builder-webpack5/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/channels": { + "node_modules/@storybook/addons/node_modules/@storybook/channels": { "version": "6.5.16", "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.16.tgz", "integrity": "sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==", @@ -7563,207 +8305,138 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.4.6.tgz", - "integrity": "sha512-rRwaH8pOL+FHz/pJMEkNpMH2xvZvWsrl7obBYw26NQiHmiVSAkfHJicndSN1mwc+p5w+9iXthrgzbLtSAOSvkA==", + "node_modules/@storybook/addons/node_modules/@storybook/client-logger": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz", + "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==", "dev": true, "dependencies": { - "@babel/core": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "@babel/types": "^7.22.5", - "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/core-server": "7.4.6", - "@storybook/csf-tools": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/telemetry": "7.4.6", - "@storybook/types": "7.4.6", - "@types/semver": "^7.3.4", - "@yarnpkg/fslib": "2.10.3", - "@yarnpkg/libzip": "2.3.0", - "chalk": "^4.1.0", - "commander": "^6.2.1", - "cross-spawn": "^7.0.3", - "detect-indent": "^6.1.0", - "envinfo": "^7.7.3", - "execa": "^5.0.0", - "express": "^4.17.3", - "find-up": "^5.0.0", - "fs-extra": "^11.1.0", - "get-npm-tarball-url": "^2.0.3", - "get-port": "^5.1.1", - "giget": "^1.0.0", - "globby": "^11.0.2", - "jscodeshift": "^0.14.0", - "leven": "^3.1.0", - "ora": "^5.4.1", - "prettier": "^2.8.0", - "prompts": "^2.4.0", - "puppeteer-core": "^2.1.1", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "simple-update-notifier": "^2.0.0", - "strip-json-comments": "^3.0.1", - "tempy": "^1.0.1", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "bin": { - "getstorybook": "bin/index.js", - "sb": "bin/index.js" + "core-js": "^3.8.2", + "global": "^4.4.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@storybook/addons/node_modules/@storybook/core-events": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.16.tgz", + "integrity": "sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==", "dev": true, "dependencies": { - "ts-dedent": "^2.0.0" + "core-js": "^3.8.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@storybook/addons/node_modules/@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", + "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "lodash": "^4.17.15" } }, - "node_modules/@storybook/cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/addons/node_modules/@storybook/router": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.16.tgz", + "integrity": "sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@storybook/client-logger": "6.5.16", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/cli/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@storybook/cli/node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/cli/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/cli/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@storybook/addons/node_modules/@storybook/theming": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", + "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@storybook/client-logger": "6.5.16", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/cli/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/@storybook/addons/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, - "node_modules/@storybook/client-api": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-7.4.6.tgz", - "integrity": "sha512-O8yA/xEzPW9Oe3s5VJAFor2d2KwXHjUZ1gvou3o14zu/TJLgXwol0qBBr+YLRO2rcNNJ51pAIGwAT5bgmpUaeg==", + "node_modules/@storybook/api": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.16.tgz", + "integrity": "sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/preview-api": "7.4.6" + "@storybook/channels": "6.5.16", + "@storybook/client-logger": "6.5.16", + "@storybook/core-events": "6.5.16", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.16", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.16", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/client-api/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@storybook/api/node_modules/@storybook/channels": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.16.tgz", + "integrity": "sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0" + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/client-logger": { + "node_modules/@storybook/api/node_modules/@storybook/client-logger": { "version": "6.5.16", "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz", "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==", @@ -7777,69 +8450,59 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.4.6.tgz", - "integrity": "sha512-lxmwEpwksCaAq96APN2YlooSDfKjJ1vKzN5Ni2EqQzf2TEXl7XQjLacHd7OOaII1kfsy+D5gNG4N5wBo7Ub30g==", - "dev": true, - "dependencies": { - "@babel/core": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "@babel/types": "^7.22.5", - "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/types": "7.4.6", - "@types/cross-spawn": "^6.0.2", - "cross-spawn": "^7.0.3", - "globby": "^11.0.2", - "jscodeshift": "^0.14.0", - "lodash": "^4.17.21", - "prettier": "^2.8.0", - "recast": "^0.23.1" + "node_modules/@storybook/api/node_modules/@storybook/core-events": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.16.tgz", + "integrity": "sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", + "node_modules/@storybook/api/node_modules/@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", + "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", "dev": true, "dependencies": { - "type-fest": "^2.19.0" + "lodash": "^4.17.15" } }, - "node_modules/@storybook/codemod/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/@storybook/api/node_modules/@storybook/router": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.16.tgz", + "integrity": "sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==", "dev": true, - "engines": { - "node": ">=12.20" + "dependencies": { + "@storybook/client-logger": "6.5.16", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/components": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.4.6.tgz", - "integrity": "sha512-nIRBhewAgrJJVafyCzuaLx1l+YOfvvD5dOZ0JxZsxJsefOdw1jFpUqUZ5fIpQ2moyvrR0mAUFw378rBfMdHz5Q==", + "node_modules/@storybook/api/node_modules/@storybook/theming": { + "version": "6.5.16", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", + "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", "dev": true, "dependencies": { - "@radix-ui/react-select": "^1.2.2", - "@radix-ui/react-toolbar": "^1.0.4", - "@storybook/client-logger": "7.4.6", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", + "@storybook/client-logger": "6.5.16", + "core-js": "^3.8.2", "memoizerific": "^1.11.3", - "use-resize-observer": "^9.1.0", - "util-deprecate": "^1.0.2" + "regenerator-runtime": "^0.13.7" }, "funding": { "type": "opencollective", @@ -7850,36 +8513,75 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/components/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@storybook/api/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/@storybook/api/node_modules/telejson": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", + "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@types/is-function": "^1.0.0", + "global": "^4.4.0", + "is-function": "^1.0.2", + "is-regex": "^1.1.2", + "is-symbol": "^1.0.3", + "isobject": "^4.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3" } }, - "node_modules/@storybook/components/node_modules/@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", + "node_modules/@storybook/blocks": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.19.tgz", + "integrity": "sha512-/c/bVQRmyRPoviJhPrFdLfubRcrnZWTwkjxsCvrOTJ/UDOyEl0t/H8yY1mGq7KWWTdbIznnZWhAIofHnH4/Esw==", "dev": true, "dependencies": { - "type-fest": "^2.19.0" + "@storybook/channels": "7.6.19", + "@storybook/client-logger": "7.6.19", + "@storybook/components": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/csf": "^0.1.2", + "@storybook/docs-tools": "7.6.19", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.6.19", + "@storybook/preview-api": "7.6.19", + "@storybook/theming": "7.6.19", + "@storybook/types": "7.6.19", + "@types/lodash": "^4.14.167", + "color-convert": "^2.0.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.8", + "memoizerific": "^1.11.3", + "polished": "^4.2.2", + "react-colorful": "^5.1.2", + "telejson": "^7.2.0", + "tocbot": "^4.20.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/components/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "node_modules/@storybook/blocks/node_modules/@storybook/theming": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.19.tgz", + "integrity": "sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", + "@storybook/client-logger": "7.6.19", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -7892,10 +8594,283 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/components/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/@storybook/builder-manager": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.19.tgz", + "integrity": "sha512-Dt5OLh97xeWh4h2mk9uG0SbCxBKHPhIiHLHAKEIDzIZBdwUhuyncVNDPHW2NlXM+S7U0/iKs2tw05waqh2lHvg==", + "dev": true, + "dependencies": { + "@fal-works/esbuild-plugin-global-externals": "^2.1.2", + "@storybook/core-common": "7.6.19", + "@storybook/manager": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@types/ejs": "^3.1.1", + "@types/find-cache-dir": "^3.2.1", + "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", + "browser-assert": "^1.2.1", + "ejs": "^3.1.8", + "esbuild": "^0.18.0", + "esbuild-plugin-alias": "^0.2.1", + "express": "^4.17.3", + "find-cache-dir": "^3.0.0", + "fs-extra": "^11.1.0", + "process": "^0.11.10", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/builder-webpack5": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.19.tgz", + "integrity": "sha512-PeP66orYG0tWoWeOGNcCDKtk/kpDBFfosViCkd0Pxb6c2MtvjOuHSGWGB/9AI3hjodsoe5p9xo/SqGf7lDzpoA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.2", + "@storybook/channels": "7.6.19", + "@storybook/client-logger": "7.6.19", + "@storybook/core-common": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/core-webpack": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/preview": "7.6.19", + "@storybook/preview-api": "7.6.19", + "@swc/core": "^1.3.82", + "@types/node": "^18.0.0", + "@types/semver": "^7.3.4", + "babel-loader": "^9.0.0", + "browser-assert": "^1.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "cjs-module-lexer": "^1.2.3", + "constants-browserify": "^1.0.0", + "css-loader": "^6.7.1", + "es-module-lexer": "^1.4.1", + "express": "^4.17.3", + "fork-ts-checker-webpack-plugin": "^8.0.0", + "fs-extra": "^11.1.0", + "html-webpack-plugin": "^5.5.0", + "magic-string": "^0.30.5", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "semver": "^7.3.7", + "style-loader": "^3.3.1", + "swc-loader": "^0.2.3", + "terser-webpack-plugin": "^5.3.1", + "ts-dedent": "^2.0.0", + "url": "^0.11.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "webpack": "5", + "webpack-dev-middleware": "^6.1.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, "engines": { "node": ">=12.20" @@ -7904,24 +8879,157 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/core-client": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.4.6.tgz", - "integrity": "sha512-tfgxAHeCvMcs6DsVgtb4hQSDaCHeAPJOsoyhb47eDQfk4OmxzriM0qWucJV5DePSMi+KutX/rN2u0JxfOuN68g==", + "node_modules/@storybook/channels": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.19.tgz", + "integrity": "sha512-2JGh+i95GwjtjqWqhtEh15jM5ifwbRGmXeFqkY7dpdHH50EEWafYHr2mg3opK3heVDwg0rJ/VBptkmshloXuvA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.19.tgz", + "integrity": "sha512-7OVy7nPgkLfgivv6/dmvoyU6pKl9EzWFk+g9izyQHiM/jS8jOiEyn6akG8Ebj6k5pWslo5lgiXUSW+cEEZUnqQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/preview-api": "7.4.6" + "@babel/core": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/types": "^7.23.0", + "@ndelangen/get-tarball": "^3.0.7", + "@storybook/codemod": "7.6.19", + "@storybook/core-common": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/core-server": "7.6.19", + "@storybook/csf-tools": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/telemetry": "7.6.19", + "@storybook/types": "7.6.19", + "@types/semver": "^7.3.4", + "@yarnpkg/fslib": "2.10.3", + "@yarnpkg/libzip": "2.3.0", + "chalk": "^4.1.0", + "commander": "^6.2.1", + "cross-spawn": "^7.0.3", + "detect-indent": "^6.1.0", + "envinfo": "^7.7.3", + "execa": "^5.0.0", + "express": "^4.17.3", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "get-npm-tarball-url": "^2.0.3", + "get-port": "^5.1.1", + "giget": "^1.0.0", + "globby": "^11.0.2", + "jscodeshift": "^0.15.1", + "leven": "^3.1.0", + "ora": "^5.4.1", + "prettier": "^2.8.0", + "prompts": "^2.4.0", + "puppeteer-core": "^2.1.1", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "strip-json-comments": "^3.0.1", + "tempy": "^1.0.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "bin": { + "getstorybook": "bin/index.js", + "sb": "bin/index.js" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-client/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@storybook/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/client-logger": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.19.tgz", + "integrity": "sha512-oGzOxbmLmciSIfd5gsxDzPmX8DttWhoYdPKxjMuCuWLTO2TWpkCWp1FTUMWO72mm/6V/FswT/aqpJJBBvdZ3RQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -7931,22 +9039,108 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/codemod": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.19.tgz", + "integrity": "sha512-bmHE0iEEgWZ65dXCmasd+GreChjPiWkXu2FEa0cJmNz/PqY12GsXGls4ke1TkNTj4gdSZnbtJxbclPZZnib2tQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/csf-tools": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/types": "7.6.19", + "@types/cross-spawn": "^6.0.2", + "cross-spawn": "^7.0.3", + "globby": "^11.0.2", + "jscodeshift": "^0.15.1", + "lodash": "^4.17.21", + "prettier": "^2.8.0", + "recast": "^0.23.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/components": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.19.tgz", + "integrity": "sha512-8Zw/RQ4crzKkUR7ojxvRIj8vktKiBBO8Nq93qv4JfDqDWrcR7cro0hOlZgmZmrzbFunBBt6WlsNNO6nVP7R4Xw==", + "dev": true, + "dependencies": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.6.19", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.6.19", + "@storybook/types": "7.6.19", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/components/node_modules/@storybook/theming": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.19.tgz", + "integrity": "sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg==", + "dev": true, + "dependencies": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.6.19", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/core-client": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.19.tgz", + "integrity": "sha512-F0V9nzcEnj6DIpnw2ilrxsV4d9ibyyQS+Wi2uQtXy+wCQQm9PeBVqrOywjXAY2F9pcoftXOaepfhp8jrxX4MXw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.19", + "@storybook/preview-api": "7.6.19" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/core-common": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.4.6.tgz", - "integrity": "sha512-05MJFmOM86qvTLtgDskokIFz9txe0Lbhq4L3by1FtF0GwgH+p+W6I94KI7c6ANER+kVZkXQZhiRzwBFnVTW+Cg==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.19.tgz", + "integrity": "sha512-njwpGzFJrfbJr/AFxGP8KMrfPfxN85KOfSlxYnQwRm5Z0H1D/lT33LhEBf5m37gaGawHeG7KryxO6RvaioMt2Q==", "dev": true, "dependencies": { - "@storybook/core-events": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/types": "7.4.6", + "@storybook/core-events": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/types": "7.6.19", "@types/find-cache-dir": "^3.2.1", - "@types/node": "^16.0.0", + "@types/node": "^18.0.0", "@types/node-fetch": "^2.6.4", "@types/pretty-hrtime": "^1.0.0", "chalk": "^4.1.0", "esbuild": "^0.18.0", - "esbuild-register": "^3.4.0", + "esbuild-register": "^3.5.0", "file-system-cache": "2.3.0", "find-cache-dir": "^3.0.0", "find-up": "^5.0.0", @@ -7966,25 +9160,15 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-common/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@storybook/core-common/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "undici-types": "~5.26.4" } }, - "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - }, "node_modules/@storybook/core-common/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -8026,22 +9210,22 @@ } }, "node_modules/@storybook/core-common/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -8057,9 +9241,9 @@ } }, "node_modules/@storybook/core-common/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -8071,6 +9255,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@storybook/core-common/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@storybook/core-common/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8084,12 +9277,12 @@ } }, "node_modules/@storybook/core-events": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.16.tgz", - "integrity": "sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.19.tgz", + "integrity": "sha512-K/W6Uvum0ocZSgjbi8hiotpe+wDEHDZlvN+KlPqdh9ae9xDK8aBNBq9IelCoqM+uKO1Zj+dDfSQds7CD781DJg==", "dev": true, "dependencies": { - "core-js": "^3.8.2" + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", @@ -8097,28 +9290,28 @@ } }, "node_modules/@storybook/core-server": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.4.6.tgz", - "integrity": "sha512-jqmRTGCJ1W0WReImivkisPVaLFT5sjtLnFoAk0feHp6QS5j7EYOPN7CYzliyQmARWTLUEXOVaFf3VD6nJZQhJQ==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.19.tgz", + "integrity": "sha512-7mKL73Wv5R2bEl0kJ6QJ9bOu5YY53Idu24QgvTnUdNsQazp2yUONBNwHIrNDnNEXm8SfCi4Mc9o0mmNRMIoiRA==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.4.6", - "@storybook/channels": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.4.6", + "@storybook/builder-manager": "7.6.19", + "@storybook/channels": "7.6.19", + "@storybook/core-common": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/csf": "^0.1.2", + "@storybook/csf-tools": "7.6.19", "@storybook/docs-mdx": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/telemetry": "7.4.6", - "@storybook/types": "7.4.6", + "@storybook/manager": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/preview-api": "7.6.19", + "@storybook/telemetry": "7.6.19", + "@storybook/types": "7.6.19", "@types/detect-port": "^1.3.0", - "@types/node": "^16.0.0", + "@types/node": "^18.0.0", "@types/pretty-hrtime": "^1.0.0", "@types/semver": "^7.3.4", "better-opn": "^3.0.2", @@ -8129,7 +9322,7 @@ "express": "^4.17.3", "fs-extra": "^11.1.0", "globby": "^11.0.2", - "ip": "^2.0.0", + "ip": "^2.0.1", "lodash": "^4.17.21", "open": "^8.4.0", "pretty-hrtime": "^1.0.3", @@ -8149,65 +9342,15 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/node_modules/@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-server/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-server/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-server/node_modules/@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", + "node_modules/@storybook/core-server/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, "dependencies": { - "type-fest": "^2.19.0" + "undici-types": "~5.26.4" } }, - "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - }, "node_modules/@storybook/core-server/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -8248,26 +9391,11 @@ "node": ">=8" } }, - "node_modules/@storybook/core-server/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@storybook/core-server/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -8287,72 +9415,69 @@ "node": ">=8" } }, - "node_modules/@storybook/core-server/node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", + "node_modules/@storybook/core-server/node_modules/ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "dev": true, - "dependencies": { - "memoizerific": "^1.11.3" + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/@storybook/core-server/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/@storybook/core-webpack": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.19.tgz", + "integrity": "sha512-Ezvn54hFN99qwP8kDOQa7/IEk2V3NyJys2eg0Afqz1cy9Uc3SkL7U7hQorKOHr5+66dsryNDfJdPzM1YMKFMBQ==", "dev": true, - "engines": { - "node": ">=12.20" + "dependencies": { + "@storybook/core-common": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/types": "7.6.19", + "@types/node": "^18.0.0", + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@storybook/core-webpack": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.4.6.tgz", - "integrity": "sha512-EqQDmd+vKAWOAjoe539LsfP8WvQG9V9i1priMA53u1FOEged8o0NBtRiRy2+JDdUSiGUdpe/X5+V/TyyQw/KWw==", + "node_modules/@storybook/core-webpack/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, "dependencies": { - "@storybook/core-common": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/types": "7.4.6", - "@types/node": "^16.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "undici-types": "~5.26.4" } }, - "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - }, "node_modules/@storybook/csf": { - "version": "0.0.2--canary.4566f4d.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", - "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.8.tgz", + "integrity": "sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==", "dev": true, "dependencies": { - "lodash": "^4.17.15" + "type-fest": "^2.19.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.4.6.tgz", - "integrity": "sha512-yi7Qa4NSqKOyiJTWCxlB0ih2ijXq6oY5qZKW6MuMMBP14xJNRGLbH5KabpfXgN2T7YECcOWG1uWaGj2veJb1KA==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.19.tgz", + "integrity": "sha512-yUP0xfJyR8e6fmCgKoEt4c1EvslF8dZ8wtwVLE5hnC3kfs7xt8RVDiKLB/9NhYjY3mD/oOesX60HqRXDgJQHwA==", "dev": true, "dependencies": { - "@storybook/csf-tools": "7.4.6", + "@storybook/csf-tools": "7.6.19", "unplugin": "^1.3.1" }, "funding": { @@ -8361,17 +9486,17 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.4.6.tgz", - "integrity": "sha512-ocKpcIUtTBy6hlLY34RUFQyX403cWpB2gGfqvkHbpGe2BQj7EyV0zpWnjsfVxvw+M9OWlCdxHWDOPUgXM33ELw==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.19.tgz", + "integrity": "sha512-8Vzia3cHhDdGHuS3XKXJReCRxmfRq3vmTm/Te9yKZnPSAsC58CCKcMh8FNEFJ44vxYF9itKTkRutjGs+DprKLQ==", "dev": true, "dependencies": { - "@babel/generator": "^7.22.9", - "@babel/parser": "^7.22.7", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "@storybook/csf": "^0.1.0", - "@storybook/types": "7.4.6", + "@babel/generator": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/types": "7.6.19", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" @@ -8381,27 +9506,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/csf-tools/node_modules/@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "dependencies": { - "type-fest": "^2.19.0" - } - }, - "node_modules/@storybook/csf-tools/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@storybook/docs-mdx": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz", @@ -8409,15 +9513,16 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.4.6.tgz", - "integrity": "sha512-nZj1L/8WwKWWJ41FW4MaKGajZUtrhnr9UwflRCkQJaWhAKmDfOb5M5TqI93uCOULpFPOm5wpoMBz2IHInQ2Lrg==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.19.tgz", + "integrity": "sha512-JuwV6wtm7Hb7Kb5ValChfxy4J7XngfrSQNpvwsDCSBNVcQUv2y843hvclpa26Ptfr/c7zpUX8r9FGSaMDy+2aQ==", "dev": true, "dependencies": { - "@storybook/core-common": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/types": "7.4.6", + "@storybook/core-common": "7.6.19", + "@storybook/preview-api": "7.6.19", + "@storybook/types": "7.6.19", "@types/doctrine": "^0.0.3", + "assert": "^2.1.0", "doctrine": "^3.0.0", "lodash": "^4.17.21" }, @@ -8432,80 +9537,10 @@ "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", "dev": true }, - "node_modules/@storybook/instrumenter": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.4.6.tgz", - "integrity": "sha512-K5atRoVFCl6HEgkSxIbwygpzgE/iROc7BrtJ3z3a7E70sanFr6Jxt6Egu6fz2QkL3ef4EWpXMnle2vhEfG29pA==", - "dev": true, - "dependencies": { - "@storybook/channels": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.4.6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/instrumenter/node_modules/@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/instrumenter/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/instrumenter/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/instrumenter/node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "dependencies": { - "memoizerific": "^1.11.3" - } - }, "node_modules/@storybook/manager": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.4.6.tgz", - "integrity": "sha512-kA1hUDxpn1i2SO9OinvLvVXDeL4xgJkModp+pbE8IXv4NJWReNq1ecMeQCzPLS3Sil2gnrullQ9uYXsnZ9bxxA==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.19.tgz", + "integrity": "sha512-fZWQcf59x4P0iiBhrL74PZrqKJAPuk9sWjP8BIkGbf8wTZtUunbY5Sv4225fOL4NLJbuX9/RYLUPoxQ3nucGHA==", "dev": true, "funding": { "type": "opencollective", @@ -8513,23 +9548,22 @@ } }, "node_modules/@storybook/manager-api": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.4.6.tgz", - "integrity": "sha512-inrm3DIbCp8wjXSN/wK6e6i2ysQ/IEmtC7IN0OJ7vdrp+USCooPT448SQTUmVctUGCFmOU3fxXByq8g77oIi7w==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.19.tgz", + "integrity": "sha512-dVCx1Q+HZEA4U08XqYljiG88BeS3I3ahnPAQLZAeWQXQRkoc9G2jMgLNPKYPIqEtq7Xrn6SRlFMIofhwWrwZpg==", "dev": true, "dependencies": { - "@storybook/channels": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/csf": "^0.1.0", + "@storybook/channels": "7.6.19", + "@storybook/client-logger": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/router": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", + "@storybook/router": "7.6.19", + "@storybook/theming": "7.6.19", + "@storybook/types": "7.6.19", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", - "semver": "^7.3.7", "store2": "^2.14.2", "telejson": "^7.2.0", "ts-dedent": "^2.0.0" @@ -8537,92 +9571,16 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/manager-api/node_modules/@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/manager-api/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/manager-api/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/manager-api/node_modules/@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "dependencies": { - "type-fest": "^2.19.0" - } - }, - "node_modules/@storybook/manager-api/node_modules/@storybook/router": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.4.6.tgz", - "integrity": "sha512-Vl1esrHkcHxDKqc+HY7+6JQpBPW3zYvGk0cQ2rxVMhWdLZTAz1hss9DqzN9tFnPyfn0a1Q77EpMySkUrvWKKNQ==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.4.6", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/@storybook/manager-api/node_modules/@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.19.tgz", + "integrity": "sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", + "@storybook/client-logger": "7.6.19", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -8635,60 +9593,6 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/manager-api/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/manager-api/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/manager-api/node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "dependencies": { - "memoizerific": "^1.11.3" - } - }, - "node_modules/@storybook/manager-api/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/manager-api/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@storybook/mdx2-csf": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz", @@ -8696,9 +9600,9 @@ "dev": true }, "node_modules/@storybook/node-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.4.6.tgz", - "integrity": "sha512-djZb310Q27GviDug1XBv0jOEDLCiwr4hhDE0aifCEKZpfNCi/EaP31nbWimFzZwxu4hE/YAPWExzScruR1zw9Q==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.19.tgz", + "integrity": "sha512-2g29QC44Zl1jKY37DmQ0/dO7+VSKnGgPI/x0mwVwQffypSapxH3rwLLT5Q5XLHeFyD+fhRu5w9Cj4vTGynJgpA==", "dev": true, "funding": { "type": "opencollective", @@ -8706,9 +9610,9 @@ } }, "node_modules/@storybook/postinstall": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.4.6.tgz", - "integrity": "sha512-TqI5BucPAGRWrkh55BYiG2/gHLFtC0In4cuu0GsUzB/1jc4i51npLRorCwhmT7r7YliGl5F7JaP0Bni/qHN3Lg==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.19.tgz", + "integrity": "sha512-s6p1vpgMfn+QGDfCK2YNdyyWKidUgb3nGicB81FANRyzYqGB//QlJlghEc2LKCIQbGIZQiwP3l8PdZQmczEJRw==", "dev": true, "funding": { "type": "opencollective", @@ -8716,25 +9620,26 @@ } }, "node_modules/@storybook/preset-react-webpack": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.4.6.tgz", - "integrity": "sha512-FfJvlk3bJfg66t06YLiyu+1o/DZN3uNfFP37zv5cJux7TpdmJRV/4m9LKQPJOvcnWBQYem8xX8k5cRS29vdW5g==", - "dev": true, - "dependencies": { - "@babel/preset-flow": "^7.22.5", - "@babel/preset-react": "^7.22.5", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5", - "@storybook/core-webpack": "7.4.6", - "@storybook/docs-tools": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/react": "7.4.6", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.6.19.tgz", + "integrity": "sha512-WvfDE4upH7jmisx5XOn4E07p9Fm8YJn4Aywc9vYM1jqQ8A1lEH8VSC1KR6dPfdmGr94jRscQkD6fjs9sUNTdrw==", + "dev": true, + "dependencies": { + "@babel/preset-flow": "^7.22.15", + "@babel/preset-react": "^7.22.15", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", + "@storybook/core-webpack": "7.6.19", + "@storybook/docs-tools": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/react": "7.6.19", "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", - "@types/node": "^16.0.0", + "@types/node": "^18.0.0", "@types/semver": "^7.3.4", "babel-plugin-add-react-displayname": "^0.0.5", - "babel-plugin-react-docgen": "^4.2.1", "fs-extra": "^11.1.0", - "react-refresh": "^0.11.0", + "magic-string": "^0.30.5", + "react-docgen": "^7.0.0", + "react-refresh": "^0.14.0", "semver": "^7.3.7", "webpack": "5" }, @@ -8760,31 +9665,19 @@ } }, "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - }, - "node_modules/@storybook/preset-react-webpack/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "undici-types": "~5.26.4" } }, "node_modules/@storybook/preset-react-webpack/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -8792,16 +9685,10 @@ "node": ">=10" } }, - "node_modules/@storybook/preset-react-webpack/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@storybook/preview": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.4.6.tgz", - "integrity": "sha512-2RPXusJ4CTDrIipIKKvbotD7fP0+8VzoFjImunflIrzN9rni+2rq5eMjqlXAaB+77w064zIR4uDUzI9fxsMDeQ==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.19.tgz", + "integrity": "sha512-VqRPua2koOQTOteB+VvuKNXFYQ7IDEopaPpj9Nx+3kom+bqp0hWdAysWcm6CtKN2GGzBQm+5PvGibMNdawsaVg==", "dev": true, "funding": { "type": "opencollective", @@ -8809,17 +9696,17 @@ } }, "node_modules/@storybook/preview-api": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.6.tgz", - "integrity": "sha512-byUS/Opt3ytWD4cWz3sNEKw5Yks8MkQgRN+GDSyIomaEAQkLAM0rchPC0MYjwCeUSecV7IIQweNX5RbV4a34BA==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.19.tgz", + "integrity": "sha512-04hdMSQucroJT4dBjQzRd7ZwH2hij8yx2nm5qd4HYGkd1ORkvlH6GOLph4XewNJl5Um3xfzFQzBhvkqvG0WaCQ==", "dev": true, "dependencies": { - "@storybook/channels": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/csf": "^0.1.0", + "@storybook/channels": "7.6.19", + "@storybook/client-logger": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.4.6", + "@storybook/types": "7.6.19", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -8834,96 +9721,22 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/preview-api/node_modules/@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/preview-api/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/preview-api/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/preview-api/node_modules/@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "dependencies": { - "type-fest": "^2.19.0" - } - }, - "node_modules/@storybook/preview-api/node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "dependencies": { - "memoizerific": "^1.11.3" - } - }, - "node_modules/@storybook/preview-api/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@storybook/react": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.4.6.tgz", - "integrity": "sha512-w0dVo64baFFPTGpUOWFqkKsu6pQincoymegSNgqaBd5DxEyMDRiRoTWSJHMKE9BwgE8SyWhRkP1ak1mkccSOhQ==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.19.tgz", + "integrity": "sha512-uKShAAp1/pRki1YnRjBveH/jAD3f8V0W2WP1LxTQqnKVFkl01mTbDZ/9ZIK6rVTSILUlmsk3fwsNyRbOKVgBGQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-client": "7.4.6", - "@storybook/docs-tools": "7.4.6", + "@storybook/client-logger": "7.6.19", + "@storybook/core-client": "7.6.19", + "@storybook/docs-tools": "7.6.19", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.4.6", - "@storybook/react-dom-shim": "7.4.6", - "@storybook/types": "7.4.6", + "@storybook/preview-api": "7.6.19", + "@storybook/react-dom-shim": "7.6.19", + "@storybook/types": "7.6.19", "@types/escodegen": "^0.0.6", "@types/estree": "^0.0.51", - "@types/node": "^16.0.0", + "@types/node": "^18.0.0", "acorn": "^7.4.1", "acorn-jsx": "^5.3.1", "acorn-walk": "^7.2.0", @@ -8974,9 +9787,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.4.6.tgz", - "integrity": "sha512-DSq8l9FDocUF1ooVI+TF83pddj1LynE/Hv0/y8XZhc3IgJ/HkuOQuUmfz29ezgfAi9gFYUR8raTIBi3/xdoRmw==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.19.tgz", + "integrity": "sha512-tpt2AC1428d1gF4fetMkpkeFZ1WdDr1CLKoLbSInWQZ7i96nbnIMIA9raR/W8ai1bo55KSz9Bq5ytC/1Pac2qQ==", "dev": true, "funding": { "type": "opencollective", @@ -8988,15 +9801,15 @@ } }, "node_modules/@storybook/react-webpack5": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.4.6.tgz", - "integrity": "sha512-OSwf+E2tRcfBmzCH+WwM7JlfEYjg5Womi1yrtotfcjVXAU6ubHOk2G87zsrKLp/TeCOFM2aHohHBTyWUCejQKQ==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.6.19.tgz", + "integrity": "sha512-QPnDv5eimvgc0zBIvc1H49iBUfZhs0hhrs9eO0+rAC6sIo5BiDcX9nQJZEuamRPVuLjqoRByj6vUpqGI25zASg==", "dev": true, "dependencies": { - "@storybook/builder-webpack5": "7.4.6", - "@storybook/preset-react-webpack": "7.4.6", - "@storybook/react": "7.4.6", - "@types/node": "^16.0.0" + "@storybook/builder-webpack5": "7.6.19", + "@storybook/preset-react-webpack": "7.6.19", + "@storybook/react": "7.6.19", + "@types/node": "^18.0.0" }, "engines": { "node": ">=16.0.0" @@ -9021,22 +9834,12 @@ } }, "node_modules/@storybook/react-webpack5/node_modules/@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - }, - "node_modules/@storybook/react/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "undici-types": "~5.26.4" } }, "node_modules/@storybook/react/node_modules/@types/estree": { @@ -9046,42 +9849,27 @@ "dev": true }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "16.18.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.23.tgz", - "integrity": "sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g==", - "dev": true - }, - "node_modules/@storybook/react/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "undici-types": "~5.26.4" } }, "node_modules/@storybook/router": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.16.tgz", - "integrity": "sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.19.tgz", + "integrity": "sha512-q2/AvY8rG0znFEfbg50OIhkS5yQ6OmyzdCdztoEsDDdsbq87YPmsDj7k8Op1EkTa2T5CB8XhBOCQDtcj7gUUtg==", "dev": true, "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", + "@storybook/client-logger": "7.6.19", "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7" + "qs": "^6.10.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/@storybook/semver": { @@ -9153,13 +9941,13 @@ } }, "node_modules/@storybook/source-loader": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-7.6.4.tgz", - "integrity": "sha512-1wb/3bVpJZ/3r3qUrLK8jb0kLuvwjNi5T1kci5huREdc1TrIxZXoPw9EiyjcMCZzCURkoj7euNLrLHGyzdBTLg==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-7.6.19.tgz", + "integrity": "sha512-Pbbq2RrS0Ct7e1MXVKW62a61Wh4iZQ66LWwksZKqW0bMM4Ohdw8v+OZI00y7Wk4+/u1gbUDplQk2k0JlueOrMw==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.2", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.19", "estraverse": "^5.2.0", "lodash": "^4.17.21", "prettier": "^2.8.0" @@ -9169,132 +9957,15 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/source-loader/node_modules/@storybook/channels": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.4.tgz", - "integrity": "sha512-Z4PY09/Czl70ap4ObmZ4bgin+EQhPaA3HdrEDNwpnH7A9ttfEO5u5KThytIjMq6kApCCihmEPDaYltoVrfYJJA==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/source-loader/node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/source-loader/node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/source-loader/node_modules/@storybook/csf": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.2.tgz", - "integrity": "sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==", - "dev": true, - "dependencies": { - "type-fest": "^2.19.0" - } - }, - "node_modules/@storybook/source-loader/node_modules/@storybook/types": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.4.tgz", - "integrity": "sha512-qyiiXPCvol5uVgfubcIMzJBA0awAyFPU+TyUP1mkPYyiTHnsHYel/mKlSdPjc8a97N3SlJXHOCx41Hde4IyJgg==", - "dev": true, - "dependencies": { - "@storybook/channels": "7.6.4", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/source-loader/node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "dependencies": { - "memoizerific": "^1.11.3" - } - }, - "node_modules/@storybook/source-loader/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/store": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/store/-/store-7.4.6.tgz", - "integrity": "sha512-tlm9rQ+djkYjEyCuEjaUv+c+jVgwnMEF9mZxnOoA6zrzU2g0S/1oE9/MdVLByGbH67U0NuuP0FcvsWLhAOQzjQ==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/preview-api": "7.4.6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/store/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/telemetry": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.4.6.tgz", - "integrity": "sha512-c8p/C1NIH8EMBviZkBCx8MMDk6rrITJ+b29DEp5MaWSRlklIVyhGiC4RPIRv6sxJwlD41PnqWVFtfu2j2eXLdQ==", + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.19.tgz", + "integrity": "sha512-rA5xum4I36M57iiD3uzmW0MOdpl0vEpHWBSAa5hK0a0ALPeY9TgAsQlI/0dSyNYJ/K7aczEEN6d4qm1NC4u10A==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/csf-tools": "7.4.6", + "@storybook/client-logger": "7.6.19", + "@storybook/core-common": "7.6.19", + "@storybook/csf-tools": "7.6.19", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -9306,19 +9977,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/telemetry/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/telemetry/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -9375,6 +10033,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.2.2.tgz", "integrity": "sha512-L8sXFJUHmrlyU2BsWWZGuAjv39Jl1uAqUHdxmN42JY15M4+XCMjGlArdCCjDe1wpTSW6USYISA9axjZojgtvnw==", + "deprecated": "In Storybook 8, this package functionality has been integrated to a new package called @storybook/test, which uses Vitest APIs for an improved experience. When upgrading to Storybook 8 with 'npx storybook@latest upgrade', you will get prompted and will get an automigration for the new package. Please migrate when you can.", "dev": true, "dependencies": { "@testing-library/dom": "^9.0.0", @@ -9382,136 +10041,41 @@ "ts-dedent": "^2.2.0" } }, - "node_modules/@storybook/testing-library/node_modules/@testing-library/dom": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", - "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@storybook/testing-library/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/testing-library/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/testing-library/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/testing-library/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/theming": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", - "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.6.tgz", + "integrity": "sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==", "dev": true, + "peer": true, "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@storybook/client-logger": "8.1.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/types": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.6.tgz", - "integrity": "sha512-6QLXtMVsFZFpzPkdGWsu/iuc8na9dnS67AMOBKm5qCLPwtUJOYkwhMdFRSSeJthLRpzV7JLAL8Kwvl7MFP3QSw==", - "dev": true, - "dependencies": { - "@storybook/channels": "7.4.6", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/types/node_modules/@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@storybook/types/node_modules/@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", + "node_modules/@storybook/theming/node_modules/@storybook/client-logger": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", + "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", "dev": true, + "peer": true, "dependencies": { "@storybook/global": "^5.0.0" }, @@ -9520,37 +10084,31 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/types/node_modules/@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", + "node_modules/@storybook/types": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.19.tgz", + "integrity": "sha512-DeGYrRPRMGTVfT7o2rEZtRzyLT2yKTI2exgpnxbwPWEFAduZCSfzBrcBXZ/nb5B0pjA9tUNWls1YzGkJGlkhpg==", "dev": true, "dependencies": { - "ts-dedent": "^2.0.0" + "@storybook/channels": "7.6.19", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/types/node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "dependencies": { - "memoizerific": "^1.11.3" - } - }, "node_modules/@swc/core": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.93.tgz", - "integrity": "sha512-690GRr1wUGmGYZHk7fUduX/JUwViMF2o74mnZYIWEcJaCcd9MQfkhsxPBtjeg6tF+h266/Cf3RPYhsFBzzxXcA==", + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.25.tgz", + "integrity": "sha512-qdGEIdLVoTjEQ7w72UyyQ0wLFY4XbHfZiidmPHKJQsvSXzdpHXxPdlTCea/mY4AhMqo/M+pvkJSXJAxZnFl7qw==", "dev": true, "hasInstallScript": true, "dependencies": { - "@swc/counter": "^0.1.1", - "@swc/types": "^0.1.5" + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.7" }, "engines": { "node": ">=10" @@ -9560,19 +10118,19 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.93", - "@swc/core-darwin-x64": "1.3.93", - "@swc/core-linux-arm-gnueabihf": "1.3.93", - "@swc/core-linux-arm64-gnu": "1.3.93", - "@swc/core-linux-arm64-musl": "1.3.93", - "@swc/core-linux-x64-gnu": "1.3.93", - "@swc/core-linux-x64-musl": "1.3.93", - "@swc/core-win32-arm64-msvc": "1.3.93", - "@swc/core-win32-ia32-msvc": "1.3.93", - "@swc/core-win32-x64-msvc": "1.3.93" + "@swc/core-darwin-arm64": "1.5.25", + "@swc/core-darwin-x64": "1.5.25", + "@swc/core-linux-arm-gnueabihf": "1.5.25", + "@swc/core-linux-arm64-gnu": "1.5.25", + "@swc/core-linux-arm64-musl": "1.5.25", + "@swc/core-linux-x64-gnu": "1.5.25", + "@swc/core-linux-x64-musl": "1.5.25", + "@swc/core-win32-arm64-msvc": "1.5.25", + "@swc/core-win32-ia32-msvc": "1.5.25", + "@swc/core-win32-x64-msvc": "1.5.25" }, "peerDependencies": { - "@swc/helpers": "^0.5.0" + "@swc/helpers": "*" }, "peerDependenciesMeta": { "@swc/helpers": { @@ -9581,9 +10139,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.93.tgz", - "integrity": "sha512-gEKgk7FVIgltnIfDO6GntyuQBBlAYg5imHpRgLxB1zSI27ijVVkksc6QwISzFZAhKYaBWIsFSVeL9AYSziAF7A==", + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.25.tgz", + "integrity": "sha512-YbD0SBgVJS2DM0vwJTU5m7+wOyCjHPBDMf3nCBJQzFZzOLzK11eRW7SzU2jhJHr9HI9sKcNFfN4lIC2Sj+4inA==", "cpu": [ "arm64" ], @@ -9596,35 +10154,182 @@ "node": ">=10" } }, - "node_modules/@swc/counter": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", - "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", - "dev": true - }, - "node_modules/@swc/types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", - "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", - "dev": true - }, - "node_modules/@testing-library/dom": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz", - "integrity": "sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==", + "node_modules/@swc/core-darwin-x64": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.25.tgz", + "integrity": "sha512-OhP4TROT6gQuozn+ah0Y4UidSdgDmxwtQq3lgCUIAxJYErJAQ82/Y0kve2UaNmkSGjOHU+/b4siHPrYTkXOk0Q==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "^5.0.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.25.tgz", + "integrity": "sha512-tNmUfrAHxN2gvYPyYNnHx2CYlPO7DGAUuK/bZrqawu++djcg+atAV3eI3XYJgmHId7/sYAlDQ9wjkrOLofFjVg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.25.tgz", + "integrity": "sha512-stzpke+bRaNFM/HrZPRjX0aQZ86S/2DChVCwb8NAV1n5lu9mz1CS750y7WbbtX/KZjk92FsCeRy2qwkvjI0gWw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.25.tgz", + "integrity": "sha512-UckUfDYedish/bj2V1jgQDGgouLhyRpG7jgF3mp8jHir11V2K6JiTyjFoz99eOiclS3+hNdr4QLJ+ifrQMJNZw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.25.tgz", + "integrity": "sha512-LwbJEgNT3lXbvz4WFzVNXNvs8DvxpoXjMZk9K9Hig8tmZQJKHC2qZTGomcyK5EFzfj2HBuBXZnAEW8ZT9PcEaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.25.tgz", + "integrity": "sha512-rsepMTgml0EkswWkBpg3Wrjj5eqjwTzZN5omAn1klzXSZnClTrfeHvBuoIJYVr1yx+jmBkqySgME2p7+magUAw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.25.tgz", + "integrity": "sha512-DJDsLBsRBV3uQBShRK2x6fqzABp9RLNVxDUpTTvUjc7qywJ8vS/yn+POK/zCyVEqLagf1z/8D5CEQ+RAIJq1NA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.25.tgz", + "integrity": "sha512-BARL1ulHol53MEKC1ZVWM3A3FP757UUgG5Q8v97za+4a1SaIgbwvAQyHDxMYWi9+ij+OapK8YnWjJcFa17g8dw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.25.tgz", + "integrity": "sha512-o+MHUWrQI9iR6EusEV8eNU2Ezi3KtlhUR4gfptQN5MbVzlgjTvQbhiKpE1GYOxp+0BLBbKRwITKOcdhxfEJ2Uw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.7.tgz", + "integrity": "sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==", + "dev": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", + "lz-string": "^1.5.0", "pretty-format": "^27.0.2" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/@testing-library/dom/node_modules/ansi-styles": { @@ -9680,9 +10385,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "5.16.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", - "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", "dev": true, "dependencies": { "@adobe/css-tools": "^4.0.1", @@ -9768,10 +10473,81 @@ "react-dom": "<18.0.0" } }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/react/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/react/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/react/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@testing-library/user-event": { - "version": "14.5.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.1.tgz", - "integrity": "sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", "dev": true, "engines": { "node": ">=12", @@ -9809,15 +10585,15 @@ } }, "node_modules/@types/aria-query": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", - "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true }, "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -9828,18 +10604,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -9847,55 +10623,64 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", - "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "dependencies": { "@types/connect": "*", "@types/node": "*" } }, + "node_modules/@types/concat-stream": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.3.tgz", + "integrity": "sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/connect": { - "version": "3.4.36", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", - "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/cross-spawn": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.3.tgz", - "integrity": "sha512-BDAkU7WHHRHnvBf5z89lcvACsvkz/n7Tv+HyD/uW76O29HoH1Tk/W6iQrepaZVbisvlEek4ygwT8IW7ow9XLAA==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, "dependencies": { "@types/ms": "*" } }, "node_modules/@types/detect-port": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.3.tgz", - "integrity": "sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz", + "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==", "dev": true }, "node_modules/@types/doctrine": { @@ -9905,15 +10690,15 @@ "dev": true }, "node_modules/@types/ejs": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.3.tgz", - "integrity": "sha512-mv5T/JI/bu+pbfz1o+TLl1NF0NIBbjS0Vl6Ppz1YY9DkXfzZT0lelXpfS5i3ZS3U/p90it7uERQpBvLYoK8e4A==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", "dev": true }, "node_modules/@types/emscripten": { - "version": "1.39.8", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.8.tgz", - "integrity": "sha512-Rk0HKcMXFUuqT32k1kXHZWgxiMvsyYsmlnjp0rLKa0MMoqXLE3T9dogDBTRfuc3SAsXu97KD3k4SKR1lHqd57w==", + "version": "1.39.13", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz", + "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==", "dev": true }, "node_modules/@types/escodegen": { @@ -9923,9 +10708,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.44.4", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.4.tgz", - "integrity": "sha512-lOzjyfY/D9QR4hY9oblZ76B90MYTB3RrQ4z2vBIJKj9ROCRqdkYl2gSUx1x1a4IWPjKJZLL4Aw1Zfay7eMnmnA==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, "dependencies": { "@types/estree": "*", @@ -9933,9 +10718,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", - "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -9949,18 +10734,18 @@ "dev": true }, "node_modules/@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "dev": true, "dependencies": { "@types/estree": "*" } }, "node_modules/@types/express": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.19.tgz", - "integrity": "sha512-UtOfBtzN9OvpZPPbnnYunfjM7XCI4jyk1NvnFhTVz5krYAnW4o5DCoIekvms+8ApqhB4+9wSge1kBijdfTSmfg==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -9970,9 +10755,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.37", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", - "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz", + "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==", "dev": true, "dependencies": { "@types/node": "*", @@ -9988,27 +10773,27 @@ "dev": true }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", "dev": true, "dependencies": { - "@types/unist": "*" + "@types/unist": "^2" } }, "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", "dev": true, "dependencies": { "@types/react": "*", @@ -10022,36 +10807,42 @@ "dev": true }, "node_modules/@types/http-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", - "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/is-empty": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.3.tgz", + "integrity": "sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==", "dev": true }, "node_modules/@types/is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.3.tgz", + "integrity": "sha512-/CLhCW79JUeLKznI6mbVieGbl4QU5Hfn+6udw1YHZoofASjbQ5zaP5LzAUZYDpRYEjS4/P+DhEgyJ/PQmGGTWw==", "dev": true }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" @@ -10068,151 +10859,160 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.194", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz", - "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", "dev": true }, "node_modules/@types/lodash.clonedeep": { - "version": "4.5.7", - "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.7.tgz", - "integrity": "sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw==", + "version": "4.5.9", + "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz", + "integrity": "sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==", "dev": true, "dependencies": { "@types/lodash": "*" } }, "node_modules/@types/mdast": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz", - "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dev": true, "dependencies": { - "@types/unist": "*" + "@types/unist": "^2" } }, "node_modules/@types/mdx": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.8.tgz", - "integrity": "sha512-r7/zWe+f9x+zjXqGxf821qz++ld8tp6Z4jUS6qmPZUXH6tfh4riXOhAqb12tWGWAevCFtMt1goLWkQMqIJKpsA==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", "dev": true }, "node_modules/@types/mime": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", - "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "node_modules/@types/mime-types": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.2.tgz", - "integrity": "sha512-q9QGHMGCiBJCHEvd4ZLdasdqXv570agPsUW0CeIm/B8DzhxsYMerD0l3IlI+EQ1A2RWHY2mmM9x1YIuuWxisCg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", "dev": true }, "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "dev": true }, "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", "dev": true, "dependencies": { "@types/node": "*", "form-data": "^4.0.0" } }, - "node_modules/@types/node-fetch/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, + "peer": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "@types/node": "*" } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true }, "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, "node_modules/@types/pretty-hrtime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", - "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==", "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", "dev": true }, "node_modules/@types/qs": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", - "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, "node_modules/@types/range-parser": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", - "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, "node_modules/@types/react": { - "version": "17.0.58", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", - "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", + "version": "17.0.80", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", + "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", "dev": true, "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", + "@types/scheduler": "^0.16", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", - "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", + "version": "17.0.25", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.25.tgz", + "integrity": "sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA==", "dev": true, "dependencies": { "@types/react": "^17" } }, + "node_modules/@types/react-reconciler": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz", + "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-slider": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.6.tgz", @@ -10229,21 +11029,21 @@ "dev": true }, "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", "dev": true }, "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", - "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "dependencies": { "@types/mime": "^1", @@ -10251,26 +11051,26 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", - "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "dependencies": { "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "@types/node": "*", + "@types/send": "*" } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, "node_modules/@types/styled-components": { - "version": "5.1.26", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.26.tgz", - "integrity": "sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw==", + "version": "5.1.34", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz", + "integrity": "sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==", "dev": true, "dependencies": { "@types/hoist-non-react-statics": "*", @@ -10278,54 +11078,73 @@ "csstype": "^3.0.2" } }, + "node_modules/@types/supports-color": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.3.tgz", + "integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==", + "dev": true + }, "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", - "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", "dev": true, "dependencies": { "@types/jest": "*" } }, "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", "dev": true }, "node_modules/@types/webpack-env": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz", - "integrity": "sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.5.tgz", + "integrity": "sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==", "dev": true }, + "node_modules/@types/webxr": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.16.tgz", + "integrity": "sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA==", + "dev": true, + "peer": true + }, "node_modules/@types/yargs": { - "version": "17.0.28", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.28.tgz", - "integrity": "sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz", - "integrity": "sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.0", - "@typescript-eslint/type-utils": "5.59.0", - "@typescript-eslint/utils": "5.59.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "semver": "^7.3.7", @@ -10348,26 +11167,11 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -10375,21 +11179,15 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", - "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.59.0", - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/typescript-estree": "5.59.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "engines": { @@ -10409,13 +11207,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz", - "integrity": "sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/visitor-keys": "5.59.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -10426,13 +11224,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.0.tgz", - "integrity": "sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.0", - "@typescript-eslint/utils": "5.59.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -10453,9 +11251,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.0.tgz", - "integrity": "sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -10466,13 +11264,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz", - "integrity": "sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/visitor-keys": "5.59.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -10492,26 +11290,11 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -10519,24 +11302,18 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.0.tgz", - "integrity": "sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.0", - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/typescript-estree": "5.59.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -10551,26 +11328,11 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -10578,19 +11340,13 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz", - "integrity": "sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -10601,27 +11357,16 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@usulpro/react-json-view": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@usulpro/react-json-view/-/react-json-view-2.0.1.tgz", - "integrity": "sha512-X8Ik4JmZF2Cu7vZTJQwHIbDqNaJEUEGZmdAPxKe4Ed+Xa3dyVTAeA9ea/nTNCzKRTZBIxvJFXvibpglpJ136BA==", - "dev": true, - "dependencies": { - "color-string": "^1.5.3", - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^6.1.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^15.5.4", - "react-dom": "^16.0.0 || ^15.5.4" - } + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -10641,9 +11386,9 @@ "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -10664,15 +11409,15 @@ "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -10700,28 +11445,28 @@ "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -10729,24 +11474,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -10755,12 +11500,12 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -10833,13 +11578,30 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", "dev": true }, "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "peer": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } }, "node_modules/accepts": { "version": "1.3.8", @@ -10962,15 +11724,15 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -10992,6 +11754,13 @@ "ajv": "^6.9.1" } }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "dev": true, + "peer": true + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -11019,6 +11788,95 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "dev": true, + "peer": true, + "dependencies": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "node_modules/ansi-fragments/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-fragments/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-fragments/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "peer": true + }, + "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-fragments/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-fragments/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -11086,6 +11944,13 @@ "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", "dev": true }, + "node_modules/appdirsjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", + "dev": true, + "peer": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -11093,9 +11958,9 @@ "dev": true }, "node_modules/aria-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", - "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", "dev": true, "dependencies": { "tslib": "^2.0.0" @@ -11114,27 +11979,21 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -11142,15 +12001,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -11169,15 +12029,53 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -11187,26 +12085,54 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/asap": { @@ -11215,6 +12141,19 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, "node_modules/ast-types": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", @@ -11237,9 +12176,9 @@ } }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, "node_modules/async-limiter": { @@ -11264,10 +12203,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -11276,9 +12218,9 @@ } }, "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", "dev": true, "engines": { "node": ">=4" @@ -11358,9 +12300,9 @@ } }, "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -11397,6 +12339,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/babel-jest/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/babel-jest/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11441,19 +12389,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/babel-jest/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/babel-jest/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -11471,6 +12406,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/babel-jest/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/babel-jest/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11483,6 +12427,18 @@ "node": ">=8" } }, + "node_modules/babel-jest/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -11502,21 +12458,6 @@ "webpack": ">=2" } }, - "node_modules/babel-loader/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/babel-loader/node_modules/schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -11572,20 +12513,14 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/babel-plugin-named-exports-order": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz", - "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==", - "dev": true - }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", - "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", + "@babel/helper-define-polyfill-provider": "^0.6.2", "semver": "^6.3.1" }, "peerDependencies": { @@ -11593,74 +12528,55 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz", - "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3", - "core-js-compat": "^3.32.2" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", - "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-plugin-react-docgen": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", - "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", - "dev": true, - "dependencies": { - "ast-types": "^0.14.2", - "lodash": "^4.17.15", - "react-docgen": "^5.0.0" - } - }, - "node_modules/babel-plugin-react-docgen/node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/babel-plugin-styled-components": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.1.tgz", - "integrity": "sha512-c8lJlszObVQPguHkI+akXv8+Jgb9Ccujx0EetL7oIvwU100LxO6XAGe45qry37wUL40a5U9f23SYrivro2XKhA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", + "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", "lodash": "^4.17.21", - "picomatch": "^2.3.0" + "picomatch": "^2.3.1" }, "peerDependencies": { "styled-components": ">= 2" } }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", - "dev": true + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" + } }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", @@ -11756,9 +12672,9 @@ } }, "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", "dev": true, "engines": { "node": ">=0.6" @@ -11774,12 +12690,15 @@ } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { @@ -11794,13 +12713,13 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -11808,7 +12727,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -11876,12 +12795,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -11909,9 +12828,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -11928,9 +12847,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, "bin": { @@ -12009,76 +12928,59 @@ "node": ">= 0.8" } }, - "node_modules/c8": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz", - "integrity": "sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==", + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "bin": { - "c8": "bin/c8.js" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { - "node": ">=10.12.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/c8/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/c8/node_modules/foreground-child": { + "node_modules/caller-callsite": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", "dev": true, + "peer": true, "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "callsites": "^2.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/c8/node_modules/v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, + "peer": true, "engines": { - "node": ">=10.12.0" + "node": ">=4" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", "dev": true, + "peer": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "caller-callsite": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, "node_modules/callsites": { @@ -12131,9 +13033,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001549", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz", - "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==", + "version": "1.0.30001628", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001628.tgz", + "integrity": "sha512-S3BnR4Kh26TBxbi5t5kpbcUlLJb9lhtDXISDPwOfI+JoC+ik0QksvkZtUVyikw3hjnkgkMPSJ8oIM9yMm9vflA==", "dev": true, "funding": [ { @@ -12233,16 +13135,10 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -12255,6 +13151,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -12280,19 +13179,51 @@ "node": ">=10" } }, + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -12304,16 +13235,25 @@ "node": ">=8" } }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", "dev": true }, "node_modules/clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, "dependencies": { "source-map": "~0.6.0" @@ -12322,6 +13262,15 @@ "node": ">= 10.0" } }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -12344,9 +13293,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "engines": { "node": ">=6" @@ -12356,9 +13305,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, "dependencies": { "string-width": "^4.2.0" @@ -12370,6 +13319,35 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-truncate": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", @@ -12386,65 +13364,44 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "node": ">=8" } }, "node_modules/clone": { @@ -12470,6 +13427,36 @@ "node": ">=6" } }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-deep/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-deep/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -12481,9 +13468,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "node_modules/color": { @@ -12525,9 +13512,9 @@ } }, "node_modules/color-parse": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", - "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", + "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", "dev": true, "dependencies": { "color-name": "^1.0.0" @@ -12544,9 +13531,9 @@ } }, "node_modules/color-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.0.tgz", - "integrity": "sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.1.tgz", + "integrity": "sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==", "dev": true }, "node_modules/color-string": { @@ -12607,6 +13594,13 @@ "node": ">= 0.8" } }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, + "peer": true + }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -12754,6 +13748,15 @@ "source-map": "^0.6.1" } }, + "node_modules/concat-with-sourcemaps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/condense-newlines": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", @@ -12768,32 +13771,98 @@ "node": ">=0.10.0" } }, - "node_modules/condense-newlines/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } }, - "node_modules/condense-newlines/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, + "peer": true, "dependencies": { - "is-buffer": "^1.1.5" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10.0" } }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "peer": true, "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "peer": true + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.10.0" } }, "node_modules/constants-browserify": { @@ -12824,15 +13893,15 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -12845,9 +13914,9 @@ "dev": true }, "node_modules/core-js": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz", - "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", "dev": true, "hasInstallScript": true, "funding": { @@ -12856,12 +13925,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", - "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", "dev": true, "dependencies": { - "browserslist": "^4.22.1" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -12869,9 +13938,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.33.0.tgz", - "integrity": "sha512-FKSIDtJnds/YFIEaZ4HszRX7hkxGpNKM7FC9aJ9WLJbSd3lD4vOltFuVIBLR8asSx9frkTSqL0dw90SKQxgKrg==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", + "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", "dev": true, "hasInstallScript": true, "funding": { @@ -12902,60 +13971,18 @@ } }, "node_modules/crelt": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz", - "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", "dev": true }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/cross-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/cross-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/cross-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dev": true, "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { @@ -13000,9 +14027,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", - "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "dev": true, "engines": { "node": "^10 || ^12 || >=14" @@ -13039,60 +14066,29 @@ "webpack": "^4.27.0 || ^5.0.0" } }, - "node_modules/css-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/css-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/css-loader/node_modules/postcss": { - "version": "8.4.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.22.tgz", - "integrity": "sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "node": ">= 10.13.0" }, - "engines": { - "node": "^10 || ^12 || >=14" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/css-loader/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -13100,12 +14096,6 @@ "node": ">=10" } }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/css-mediaquery": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", @@ -13152,6 +14142,15 @@ "node": ">=8.0.0" } }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -13301,9 +14300,9 @@ "dev": true }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true }, "node_modules/data-urls": { @@ -13320,16 +14319,74 @@ "node": ">=10" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dayjs": { - "version": "1.11.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", - "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", "dev": true }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true, + "peer": true + }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -13343,6 +14400,16 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", @@ -13379,16 +14446,17 @@ "dev": true }, "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", + "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", @@ -13396,11 +14464,14 @@ "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13449,6 +14520,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -13459,11 +14547,12 @@ } }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -13475,9 +14564,9 @@ } }, "node_modules/defu": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.2.tgz", - "integrity": "sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", "dev": true }, "node_modules/del": { @@ -13511,6 +14600,13 @@ "node": ">=0.4.0" } }, + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", + "dev": true, + "peer": true + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -13540,12 +14636,12 @@ } }, "node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/detect-newline": { @@ -13576,9 +14672,9 @@ } }, "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", "dev": true, "dependencies": { "address": "^1.0.1", @@ -13587,12 +14683,15 @@ "bin": { "detect": "bin/detect-port.js", "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, "engines": { "node": ">=0.3.1" @@ -13660,6 +14759,15 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/dom-walk": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", @@ -13682,6 +14790,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "dependencies": { "webidl-conversions": "^5.0.0" @@ -13715,9 +14824,9 @@ } }, "node_modules/dompurify": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.5.tgz", - "integrity": "sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.5.tgz", + "integrity": "sha512-FgbqnEPiv5Vdtwt6Mxl7XSylttCC03cqP5ldNT2z+Kj0nLxPHJH4+1Cyf5Jasxhw93Rl4Oo11qRoUV72fmya2Q==", "dev": true }, "node_modules/domutils": { @@ -13745,15 +14854,15 @@ } }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { @@ -13820,51 +14929,68 @@ "dev": true }, "node_modules/editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", - "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", "dev": true, "dependencies": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" }, "bin": { "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/editorconfig/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } }, - "node_modules/editorconfig/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/editorconfig/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/editorconfig/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -13872,9 +14998,9 @@ "dev": true }, "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "dependencies": { "jake": "^10.8.5" @@ -13887,9 +15013,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.554", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz", - "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==", + "version": "1.4.790", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.790.tgz", + "integrity": "sha512-eVGeQxpaBYbomDBa/Mehrs28MdvCXfJmEFzaMFsv8jH/MJDLIylJN81eTJ5kvx7B7p18OiPK0BkC06lydEy63A==", "dev": true }, "node_modules/emittery": { @@ -13905,9 +15031,9 @@ } }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "node_modules/emojis-list": { @@ -13949,9 +15075,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -13962,18 +15088,21 @@ } }, "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true, + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -14000,46 +15129,72 @@ "stackframe": "^1.3.4" } }, - "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", "dev": true, + "peer": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -14048,6 +15203,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -14068,33 +15244,70 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", - "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", + "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", "dev": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -14170,9 +15383,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -14214,28 +15427,39 @@ "source-map": "~0.6.1" } }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", - "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.38.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -14243,22 +15467,19 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -14272,9 +15493,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -14284,25 +15505,25 @@ } }, "node_modules/eslint-mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-2.0.5.tgz", - "integrity": "sha512-1ZzcJwJNfladtuK+uuG/MdC0idc1e3d1vCI2STOq/pLcJBGuao2biWh90vEh2M93zDiNoHJGUIU7UAxupiiHFw==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-2.3.4.tgz", + "integrity": "sha512-u4NszEUyoGtR7Q0A4qs0OymsEQdCO6yqWlTzDa9vGWsK7aMotdnW0hqifHTkf6lEtA2vHk2xlkWHTCrhYLyRbw==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.10.0", "acorn-jsx": "^5.3.2", - "cosmiconfig": "^7.0.1", - "espree": "^9.4.0", - "estree-util-visit": "^1.2.0", - "remark-mdx": "^2.1.3", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "synckit": "^0.8.4", - "tslib": "^2.4.0", + "espree": "^9.6.1", + "estree-util-visit": "^1.2.1", + "remark-mdx": "^2.3.0", + "remark-parse": "^10.0.2", + "remark-stringify": "^10.0.3", + "synckit": "^0.9.0", + "tslib": "^2.6.1", "unified": "^10.1.2", - "unist-util-visit": "^4.1.1", + "unified-engine": "^10.1.0", + "unist-util-visit": "^4.1.2", "uvu": "^0.5.6", - "vfile": "^5.3.4" + "vfile": "^5.3.7" }, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" @@ -14316,9 +15537,9 @@ } }, "node_modules/eslint-mdx/node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -14327,166 +15548,10 @@ "node": ">=0.4.0" } }, - "node_modules/eslint-mdx/node_modules/mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-mdx/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-mdx/node_modules/micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/eslint-mdx/node_modules/remark-mdx": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", - "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", - "dev": true, - "dependencies": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-mdx/node_modules/remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-mdx/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-mdx/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-mdx/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-mdx/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/eslint-plugin-markdown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.0.tgz", - "integrity": "sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.1.tgz", + "integrity": "sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==", "dev": true, "dependencies": { "mdast-util-from-markdown": "^0.8.5" @@ -14499,19 +15564,19 @@ } }, "node_modules/eslint-plugin-mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-2.0.5.tgz", - "integrity": "sha512-j2xN97jSlc5IoH94rJTHqYMztl46+hHzyC8Zqjx+OI1Rvv33isyf8xSSBHN6f0z8IJmgPgGsb/fH90JbvKplXg==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-2.3.4.tgz", + "integrity": "sha512-kr6tgaifKL+AVGYMtdYc2VCsIjfYQXuUCKz4rK58d2DpnPFHrmgXIOC7NcMvaEld+VOEpxBSCCnjnsf4IVCQGg==", "dev": true, "dependencies": { - "eslint-mdx": "^2.0.5", - "eslint-plugin-markdown": "^3.0.0", - "remark-mdx": "^2.1.3", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "tslib": "^2.4.0", + "eslint-mdx": "^2.3.4", + "eslint-plugin-markdown": "^3.0.1", + "remark-mdx": "^2.3.0", + "remark-parse": "^10.0.2", + "remark-stringify": "^10.0.3", + "tslib": "^2.6.1", "unified": "^10.1.2", - "vfile": "^5.3.4" + "vfile": "^5.3.7" }, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" @@ -14524,141 +15589,30 @@ "eslint": ">=8.0.0" } }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/remark-mdx": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", - "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", - "dev": true, - "dependencies": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11" }, "engines": { "node": ">=4" @@ -14667,6 +15621,18 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -14680,12 +15646,12 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -14719,9 +15685,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -14774,9 +15740,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -14790,9 +15756,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -14813,23 +15779,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14842,15 +15791,27 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -14860,9 +15821,9 @@ } }, "node_modules/espree/node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -14917,20 +15878,6 @@ "node": ">=4.0" } }, - "node_modules/estree-to-babel": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", - "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.2.0", - "c8": "^7.6.0" - }, - "engines": { - "node": ">=8.3.0" - } - }, "node_modules/estree-util-is-identifier-name": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", @@ -14979,6 +15926,16 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -15058,9 +16015,9 @@ } }, "node_modules/expect/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -15119,17 +16076,17 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -15257,9 +16214,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -15302,15 +16259,51 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-xml-parser": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz", + "integrity": "sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "peer": true, + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "dev": true, + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -15330,9 +16323,9 @@ } }, "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", "dev": true, "dependencies": { "cross-fetch": "^3.1.5", @@ -15341,7 +16334,7 @@ "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" + "ua-parser-js": "^1.0.35" } }, "node_modules/fbjs-css-vars": { @@ -15399,6 +16392,20 @@ "ramda": "0.29.0" } }, + "node_modules/file-system-cache/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -15430,9 +16437,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -15516,21 +16523,6 @@ "node": ">=8" } }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/find-cache-dir/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -15596,12 +16588,13 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -15609,15 +16602,22 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", + "dev": true, + "peer": true + }, "node_modules/flow-parser": { - "version": "0.218.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.218.1.tgz", - "integrity": "sha512-46xpXyI4Bh3K2ej+NF3V5+pAsDlB5P0DWpgIIy/0/R7ujK0syfI/xfKDCOlq2sxtfUyPrr4rxfS2Da7yWdTdwg==", + "version": "0.237.2", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.237.2.tgz", + "integrity": "sha512-mvI/kdfr3l1waaPbThPA8dJa77nHXrfZIun+SWvFwSwDjmeByU7mGJGRmv1+7guU6ccyLV8e1lqZA1lD4iMGnQ==", "dev": true, "engines": { "node": ">=0.4.0" @@ -15755,26 +16755,29 @@ "node": ">=8" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=10" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -15794,16 +16797,10 @@ "node": ">=8" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { "asynckit": "^0.4.0", @@ -15814,6 +16811,15 @@ "node": ">= 6" } }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -15839,9 +16845,9 @@ "dev": true }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -15883,9 +16889,9 @@ "dev": true }, "node_modules/fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", "dev": true }, "node_modules/fs.realpath": { @@ -15895,9 +16901,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -15909,21 +16915,24 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -15951,9 +16960,9 @@ } }, "node_modules/generic-names/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", "dev": true, "engines": { "node": ">= 12.13.0" @@ -15978,14 +16987,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16001,9 +17015,9 @@ } }, "node_modules/get-npm-tarball-url": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.0.3.tgz", - "integrity": "sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz", + "integrity": "sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==", "dev": true, "engines": { "node": ">=12.17" @@ -16043,13 +17057,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -16059,48 +17074,24 @@ } }, "node_modules/giget": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.3.tgz", - "integrity": "sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", + "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", "dev": true, "dependencies": { - "colorette": "^2.0.20", - "defu": "^6.1.2", - "https-proxy-agent": "^7.0.2", - "mri": "^1.2.0", - "node-fetch-native": "^1.4.0", - "pathe": "^1.1.1", + "citty": "^0.1.6", + "consola": "^3.2.3", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.3", + "nypm": "^0.3.8", + "ohash": "^1.1.3", + "pathe": "^1.1.2", "tar": "^6.2.0" }, "bin": { "giget": "dist/cli.mjs" } }, - "node_modules/giget/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/giget/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/github-slugger": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", @@ -16108,20 +17099,20 @@ "dev": true }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -16145,6 +17136,27 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/global": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", @@ -16165,12 +17177,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -16179,12 +17192,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -16205,12 +17212,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -16229,10 +17230,10 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/gunzip-maybe": { @@ -16273,24 +17274,21 @@ "uglify-js": "^3.1.4" } }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/harmony-reflect": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -16310,21 +17308,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -16346,12 +17344,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -16360,6 +17358,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -16369,6 +17379,36 @@ "he": "bin/he" } }, + "node_modules/hermes-estree": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz", + "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==", + "dev": true, + "peer": true + }, + "node_modules/hermes-parser": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz", + "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==", + "dev": true, + "peer": true, + "dependencies": { + "hermes-estree": "0.19.1" + } + }, + "node_modules/hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "dev": true, + "peer": true, + "dependencies": { + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", @@ -16384,6 +17424,12 @@ "react-is": "^16.7.0" } }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -16425,9 +17471,9 @@ } }, "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true, "funding": [ { @@ -16495,9 +17541,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", - "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", "dev": true, "dependencies": { "@types/html-minifier-terser": "^6.0.0", @@ -16514,7 +17560,16 @@ "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/htmlparser2": { @@ -16536,18 +17591,6 @@ "entities": "^3.0.1" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -16616,9 +17659,9 @@ } }, "node_modules/hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.5.tgz", + "integrity": "sha512-fedL7PRwmeVkgyhu9hLeTBaI6wcGk7JGJswdaRsa5aUbkXI1kr1xZwTPBtaYPpwf56878iDek6VbVnuWMebJmw==", "dev": true }, "node_modules/iconv-lite": { @@ -16684,18 +17727,34 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" } }, + "node_modules/image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "dev": true, + "peer": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, "node_modules/immer": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", - "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", + "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -16833,6 +17892,16 @@ "node": ">=8" } }, + "node_modules/import-meta-resolve": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", + "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -16855,6 +17924,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "dependencies": { "once": "^1.3.0", @@ -16880,13 +17950,13 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -16903,9 +17973,9 @@ } }, "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "dev": true }, "node_modules/ipaddr.js": { @@ -16967,14 +18037,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16986,6 +18058,21 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -17027,27 +18114,10 @@ } }, "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/is-builtin-module": { "version": "3.2.1", @@ -17091,12 +18161,27 @@ } }, "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17133,6 +18218,16 @@ "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", "dev": true }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -17148,6 +18243,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-empty": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", + "integrity": "sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==", + "dev": true + }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -17166,6 +18267,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", @@ -17249,10 +18362,13 @@ } }, "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17280,9 +18396,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -17346,13 +18462,10 @@ } }, "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, "engines": { "node": ">=0.10.0" } @@ -17389,21 +18502,27 @@ } }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17452,16 +18571,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -17489,10 +18604,13 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17510,13 +18628,16 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17556,18 +18677,18 @@ "dev": true }, "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" @@ -17590,17 +18711,17 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/has-flag": { @@ -17613,20 +18734,32 @@ } }, "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -17653,10 +18786,19 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -17666,10 +18808,23 @@ "node": ">=8" } }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -17685,9 +18840,9 @@ } }, "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", + "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", "dev": true, "dependencies": { "async": "^3.2.3", @@ -17780,9 +18935,9 @@ } }, "node_modules/jest-canvas-mock": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.5.0.tgz", - "integrity": "sha512-s2bmY2f22WPMzhB2YA93kiyf7CAfWAnV/sFfY9s48IVOrGmwui1eSFluDPesq1M+7tSC1hJAit6mzO0ZNXvVBA==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.5.2.tgz", + "integrity": "sha512-vgnpPupjOL6+L5oJXzxTxFrlGEIbHdZqFU+LFNdtLxZ3lRDCl17FlTMM7IatoRQkrcyOTMlDinjUguqmQ6bR2A==", "dev": true, "dependencies": { "cssfontparser": "^1.2.1", @@ -17820,9 +18975,9 @@ } }, "node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -17927,9 +19082,9 @@ } }, "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -18055,9 +19210,9 @@ } }, "node_modules/jest-cli/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -18192,9 +19347,9 @@ } }, "node_modules/jest-config/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -18231,6 +19386,27 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/jest-config/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -18390,9 +19566,9 @@ } }, "node_modules/jest-each/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -18502,9 +19678,9 @@ } }, "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -18613,9 +19789,9 @@ } }, "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -18808,9 +19984,9 @@ } }, "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -18900,6 +20076,15 @@ "node": ">=10.12.0" } }, + "node_modules/jest-junit/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/jest-leak-detector": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", @@ -19017,9 +20202,9 @@ } }, "node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -19107,9 +20292,9 @@ } }, "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -19245,9 +20430,9 @@ } }, "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -19331,9 +20516,9 @@ } }, "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -19414,19 +20599,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-resolve/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-resolve/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -19531,9 +20703,9 @@ } }, "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -19570,6 +20742,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-runner/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/jest-runner/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -19614,19 +20792,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-runner/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-runner/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -19644,6 +20809,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -19656,6 +20830,18 @@ "node": ">=8" } }, + "node_modules/jest-runner/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/jest-runtime": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", @@ -19732,9 +20918,9 @@ } }, "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -19771,6 +20957,33 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-runtime/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/jest-runtime/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -19815,19 +21028,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-runtime/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-runtime/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -19845,6 +21045,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-runtime/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jest-runtime/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -19857,6 +21066,31 @@ "node": ">=8" } }, + "node_modules/jest-runtime/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-snapshot": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", @@ -19933,9 +21167,9 @@ } }, "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -19972,6 +21206,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-snapshot/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/jest-snapshot/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -20016,19 +21256,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-snapshot/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-snapshot/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -20046,31 +21273,25 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "node_modules/jest-snapshot/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, "node_modules/jest-snapshot/node_modules/supports-color": { @@ -20085,16 +21306,22 @@ "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/jest-snapshot/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } }, "node_modules/jest-styled-components": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/jest-styled-components/-/jest-styled-components-7.1.1.tgz", - "integrity": "sha512-OUq31R5CivBF8oy81dnegNQrRW13TugMol/Dz6ZnFfEyo03exLASod7YGwyHGuayYlKmCstPtz0RQ1+NrAbIIA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/jest-styled-components/-/jest-styled-components-7.2.0.tgz", + "integrity": "sha512-gwyyveNjvuRA0pyhbQoydXZllLZESs2VuL5fXCabzh0buHPAOUfANtW7n5YMPmdC0sH3VB7h2eUGZ23+tjvaBA==", "dev": true, "dependencies": { "@adobe/css-tools": "^4.0.1" @@ -20209,9 +21436,9 @@ } }, "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -20316,9 +21543,9 @@ } }, "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -20431,16 +21658,31 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/joi": { + "version": "17.13.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz", + "integrity": "sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==", + "dev": true, + "peer": true, + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, "node_modules/js-beautify": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.7.tgz", - "integrity": "sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", "dev": true, "dependencies": { "config-chain": "^1.1.13", - "editorconfig": "^0.15.3", - "glob": "^8.0.3", - "nopt": "^6.0.0" + "editorconfig": "^1.0.4", + "glob": "^10.3.3", + "js-cookie": "^3.0.5", + "nopt": "^7.2.0" }, "bin": { "css-beautify": "js/bin/css-beautify.js", @@ -20448,7 +21690,7 @@ "js-beautify": "js/bin/js-beautify.js" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/js-beautify/node_modules/brace-expansion": { @@ -20461,44 +21703,58 @@ } }, "node_modules/js-beautify/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/js-beautify/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "node_modules/js-beautify/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "dev": true, + "engines": { + "node": ">=14" } }, "node_modules/js-tokens": { @@ -20518,21 +21774,36 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsc-android": { + "version": "250231.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", + "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==", + "dev": true, + "peer": true + }, + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", + "dev": true, + "peer": true + }, "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz", + "integrity": "sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==", "dev": true, "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", + "@babel/core": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.23.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/preset-flow": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@babel/register": "^7.22.15", "babel-core": "^7.0.0-bridge.0", "chalk": "^4.1.2", "flow-parser": "0.*", @@ -20540,7 +21811,7 @@ "micromatch": "^4.0.4", "neo-async": "^2.5.0", "node-dir": "^0.1.17", - "recast": "^0.21.0", + "recast": "^0.23.3", "temp": "^0.8.4", "write-file-atomic": "^2.3.0" }, @@ -20549,6 +21820,11 @@ }, "peerDependencies": { "@babel/preset-env": "^7.1.6" + }, + "peerDependenciesMeta": { + "@babel/preset-env": { + "optional": true + } } }, "node_modules/jscodeshift/node_modules/ansi-styles": { @@ -20566,18 +21842,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jscodeshift/node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/jscodeshift/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -20603,21 +21867,6 @@ "node": ">=8" } }, - "node_modules/jscodeshift/node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "dev": true, - "dependencies": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, "node_modules/jscodeshift/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -20688,9 +21937,9 @@ } }, "node_modules/jsdom/node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -20699,25 +21948,18 @@ "node": ">=0.4.0" } }, - "node_modules/jsdom/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">= 6" } }, "node_modules/jsesc": { @@ -20732,6 +21974,19 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "peer": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -20775,23 +22030,37 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { "node": ">=0.10.0" } @@ -20814,6 +22083,27 @@ "node": ">= 8" } }, + "node_modules/konva": { + "version": "9.3.11", + "resolved": "https://registry.npmjs.org/konva/-/konva-9.3.11.tgz", + "integrity": "sha512-ZkFF4CXKZCDd2+6sBPA0y3hQ+X4uTqIS6JxTl3BEOFJzKr1tId+rxxJgtsk1FQIH3auuvnMj/rkbatUcf9C2Wg==", + "dev": true, + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/lavrton" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/konva" + }, + { + "type": "github", + "url": "https://github.com/sponsors/lavrton" + } + ], + "peer": true + }, "node_modules/lazy-universal-dotenv": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz", @@ -20850,6 +22140,34 @@ "node": ">= 0.8.0" } }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "peer": true + }, "node_modules/lilconfig": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", @@ -20906,9 +22224,9 @@ } }, "node_modules/lint-staged/node_modules/supports-color": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.3.1.tgz", - "integrity": "sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true, "engines": { "node": ">=12" @@ -20975,6 +22293,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/listr2/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -20998,6 +22322,34 @@ "node": ">=8" } }, + "node_modules/listr2/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-plugin": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-5.1.0.tgz", + "integrity": "sha512-Lg1CZa1CFj2CbNaxijTL6PCbzd4qGTlZov+iH2p5Xwy/ApcZJh+i6jMN2cYePouTfjJfrNu3nXFdEw8LvbjPFQ==", + "dev": true, + "dependencies": { + "@npmcli/config": "^6.0.0", + "import-meta-resolve": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -21090,6 +22442,13 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "dev": true, + "peer": true + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -21197,6 +22556,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -21223,6 +22588,20 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/log-update/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -21237,6 +22616,196 @@ "node": ">=8" } }, + "node_modules/logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" + }, + "bin": { + "logkitty": "bin/logkitty.js" + } + }, + "node_modules/logkitty/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/logkitty/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/logkitty/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, + "node_modules/logkitty/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/logkitty/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "peer": true + }, + "node_modules/logkitty/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "peer": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "peer": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -21282,9 +22851,9 @@ } }, "node_modules/lottie-web": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.11.0.tgz", - "integrity": "sha512-9vSt0AtdOH98GKDXwD5LPfFg9Pcmxt5+1BllAbudKM5iqPxpJnJUfuGaP45OyudDrESCOBgsjnntVUTygBNlzw==", + "version": "5.12.2", + "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz", + "integrity": "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==", "dev": true }, "node_modules/lower-case": { @@ -21315,37 +22884,27 @@ } }, "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" } }, "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/makeerror": { @@ -21374,9 +22933,9 @@ } }, "node_modules/markdown-to-jsx": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz", - "integrity": "sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==", + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz", + "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==", "dev": true, "engines": { "node": ">= 10" @@ -21385,6 +22944,13 @@ "react": ">= 0.14.0" } }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true, + "peer": true + }, "node_modules/matchmediaquery": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz", @@ -21413,6 +22979,45 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-definitions/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-find-and-replace": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", @@ -21441,33 +23046,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-from-markdown": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", @@ -21784,9 +23362,9 @@ } }, "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", "dev": true, "dependencies": { "@types/mdast": "^3.0.0", @@ -21821,9 +23399,9 @@ } }, "node_modules/mdast-util-mdx-expression/node_modules/micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", "dev": true, "funding": [ { @@ -21869,9 +23447,9 @@ } }, "node_modules/mdast-util-mdx-jsx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.2.tgz", - "integrity": "sha512-o9vBCYQK5ZLGEj3tCGISJGjvafyHRVJlZmfJzSE7xjiogSzIeph/Z4zMY65q4WGRMezQBeAwPlrdymDYYYx0tA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz", + "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==", "dev": true, "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -21967,9 +23545,9 @@ } }, "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", "dev": true, "dependencies": { "@types/mdast": "^3.0.0", @@ -22004,9 +23582,9 @@ } }, "node_modules/mdast-util-mdx-jsx/node_modules/micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", "dev": true, "funding": [ { @@ -22058,33 +23636,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-remove-position": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", - "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", @@ -22098,39 +23649,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-mdx/node_modules/mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", "dev": true, "dependencies": { "@types/mdast": "^3.0.0", @@ -22165,9 +23687,9 @@ } }, "node_modules/mdast-util-mdx/node_modules/micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", "dev": true, "funding": [ { @@ -22230,9 +23752,9 @@ } }, "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", "dev": true, "dependencies": { "@types/mdast": "^3.0.0", @@ -22267,9 +23789,9 @@ } }, "node_modules/mdast-util-mdxjs-esm/node_modules/micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", "dev": true, "funding": [ { @@ -22328,19 +23850,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-phrasing/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-to-markdown": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", @@ -22374,58 +23883,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown/node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/mdast-util-to-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", @@ -22463,6 +23920,13 @@ "node": ">= 4.0.0" } }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "dev": true, + "peer": true + }, "node_modules/memoizerific": { "version": "1.11.3", "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", @@ -22502,26287 +23966,6045 @@ "node": ">= 0.6" } }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "node_modules/metro": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.9.tgz", + "integrity": "sha512-Bc57Xf3GO2Xe4UWQsBj/oW6YfLPABEu8jfDVDiNmJvoQW4CO34oDPuYKe4KlXzXhcuNsqOtSxpbjCRRVjhhREg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/parser": "^7.20.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.20.1", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.80.9", + "metro-cache": "0.80.9", + "metro-cache-key": "0.80.9", + "metro-config": "0.80.9", + "metro-core": "0.80.9", + "metro-file-map": "0.80.9", + "metro-resolver": "0.80.9", + "metro-runtime": "0.80.9", + "metro-source-map": "0.80.9", + "metro-symbolicate": "0.80.9", + "metro-transform-plugins": "0.80.9", + "metro-transform-worker": "0.80.9", + "mime-types": "^2.1.27", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "rimraf": "^3.0.2", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "throat": "^5.0.0", + "ws": "^7.5.1", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", + "node_modules/metro-babel-transformer": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.9.tgz", + "integrity": "sha512-d76BSm64KZam1nifRZlNJmtwIgAeZhZG3fi3K+EmPOlrR8rDtBxQHDSN3fSGeNB9CirdTyabTMQCkCup6BXFSQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "@babel/core": "^7.20.0", + "hermes-parser": "0.20.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-extension-gfm": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", - "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==", "dev": true, + "peer": true + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "dev": true, + "peer": true, "dependencies": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-footnote": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "hermes-estree": "0.20.1" } }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", - "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", + "node_modules/metro-cache": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.9.tgz", + "integrity": "sha512-ujEdSI43QwI+Dj2xuNax8LMo8UgKuXJEdxJkzGPU6iIx42nYa1byQ+aADv/iPh5sh5a//h5FopraW5voXSgm2w==", "dev": true, + "peer": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "metro-core": "0.80.9", + "rimraf": "^3.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" } }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", - "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", + "node_modules/metro-cache-key": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.9.tgz", + "integrity": "sha512-hRcYGhEiWIdM87hU0fBlcGr+tHDEAT+7LYNCW89p5JhErFt/QaAkVx4fb5bW3YtXGv5BTV7AspWPERoIb99CXg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-config": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.9.tgz", + "integrity": "sha512-28wW7CqS3eJrunRGnsibWldqgwRP9ywBEf7kg+uzUHkSFJNKPM1K3UNSngHmH0EZjomizqQA2Zi6/y6VdZMolg==", "dev": true, + "peer": true, "dependencies": { - "micromark-core-commonmark": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "connect": "^3.6.5", + "cosmiconfig": "^5.0.5", + "jest-validate": "^29.6.3", + "metro": "0.80.9", + "metro-cache": "0.80.9", + "metro-core": "0.80.9", + "metro-runtime": "0.80.9" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" } }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", - "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", + "node_modules/metro-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/micromark-extension-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", - "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", + "node_modules/metro-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "peer": true, "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "sprintf-js": "~1.0.2" + } + }, + "node_modules/metro-config/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", - "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", + "node_modules/metro-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "micromark-util-types": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", - "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", + "node_modules/metro-config/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, + "peer": true, "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/micromark-extension-mdx-expression": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.4.tgz", - "integrity": "sha512-TCgLxqW6ReQ3AJgtj1P0P+8ZThBTloLbeb7jNaqr6mCOLDpxUiBFE/9STgooMZttEwOQu5iEcCCa3ZSDhY9FGw==", + "node_modules/metro-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-config/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "peer": true, "dependencies": { - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", - "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", + "node_modules/metro-config/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/metro-config/node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "peer": true, "dependencies": { - "@types/acorn": "^4.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/micromark-extension-mdx-md": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", - "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", + "node_modules/metro-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "peer": true, "dependencies": { - "micromark-util-types": "^1.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/micromark-extension-mdxjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", - "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", + "node_modules/metro-config/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "peer": true, "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^1.0.0", - "micromark-extension-mdx-jsx": "^1.0.0", - "micromark-extension-mdx-md": "^1.0.0", - "micromark-extension-mdxjs-esm": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", - "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", + "node_modules/metro-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "peer": true, "dependencies": { - "micromark-core-commonmark": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.1.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/metro-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/micromark-extension-mdxjs/node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "node_modules/metro-config/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "node_modules/metro-core": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.9.tgz", + "integrity": "sha512-tbltWQn+XTdULkGdzHIxlxk4SdnKxttvQQV3wpqqFbHDteR4gwCyTR2RyYJvxgU7HELfHtrVbqgqAdlPByUSbg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.80.9" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", + "node_modules/metro-file-map": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.9.tgz", + "integrity": "sha512-sBUjVtQMHagItJH/wGU9sn3k2u0nrCl0CdR4SFMO1tksXLKbkigyQx4cbpcyPVOAmGTVuy3jyvBlELaGCAhplQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "anymatch": "^3.0.3", + "debug": "^2.2.0", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "micromatch": "^4.0.4", + "node-abort-controller": "^3.1.1", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/micromark-factory-mdx-expression": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.7.tgz", - "integrity": "sha512-QAdFbkQagTZ/eKb8zDGqmjvgevgJH3+aQpvvKrXWxNJp3o8/l2cAbbrBd0E04r0Gx6nssPpqWIjnbHFvZu5qsQ==", + "node_modules/metro-file-map/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" + "ms": "2.0.0" } }, - "node_modules/micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "node_modules/metro-file-map/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", + "node_modules/metro-file-map/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "node_modules/metro-file-map/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true + }, + "node_modules/metro-file-map/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "node_modules/metro-minify-terser": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.9.tgz", + "integrity": "sha512-FEeCeFbkvvPuhjixZ1FYrXtO0araTpV6UbcnGgDUpH7s7eR5FG/PiJz3TsuuPP/HwCK19cZtQydcA2QrCw446A==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "terser": "^5.15.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "node_modules/metro-resolver": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.9.tgz", + "integrity": "sha512-wAPIjkN59BQN6gocVsAvvpZ1+LQkkqUaswlT++cJafE/e54GoVkMNCmrR4BsgQHr9DknZ5Um/nKueeN7kaEz9w==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "node_modules/metro-runtime": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.9.tgz", + "integrity": "sha512-8PTVIgrVcyU+X/rVCy/9yxNlvXsBCk5JwwkbAm/Dm+Abo6NBGtNjWF0M1Xo/NWCb4phamNWcD7cHdR91HhbJvg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@babel/runtime": "^7.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "node_modules/metro-source-map": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.9.tgz", + "integrity": "sha512-RMn+XS4VTJIwMPOUSj61xlxgBvPeY4G6s5uIn6kt6HB6A/k9ekhr65UkkDD7WzHYs3a9o869qU8tvOZvqeQzgw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.80.9", + "nullthrows": "^1.1.1", + "ob1": "0.80.9", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "node_modules/metro-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", + "node_modules/metro-symbolicate": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.9.tgz", + "integrity": "sha512-Ykae12rdqSs98hg41RKEToojuIW85wNdmSe/eHUgMkzbvCFNVgcC0w3dKZEhSsqQOXapXRlLtHkaHLil0UD/EA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "invariant": "^2.2.4", + "metro-source-map": "0.80.9", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", + "node_modules/metro-symbolicate/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/micromark-util-events-to-acorn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.1.tgz", - "integrity": "sha512-mkg3BaWlw6ZTkQORrKVBW4o9ICXPxLtGz51vml5mQpKFdo9vqIX68CAx5JhTOdjQyAHH7JFmm4rh8toSPQZUmg==", + "node_modules/metro-transform-plugins": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.9.tgz", + "integrity": "sha512-UlDk/uc8UdfLNJhPbF3tvwajyuuygBcyp+yBuS/q0z3QSuN/EbLllY3rK8OTD9n4h00qZ/qgxGv/lMFJkwP4vg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "estree-util-visit": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-location": "^4.0.0", - "vfile-message": "^3.0.0" + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.20.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-util-events-to-acorn/node_modules/vfile-location": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", - "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", + "node_modules/metro-transform-worker": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.9.tgz", + "integrity": "sha512-c/IrzMUVnI0hSVVit4TXzt3A1GiUltGVlzCmLJWxNrBGHGrJhvgePj38+GXl1Xf4Fd4vx6qLUkKMQ3ux73bFLQ==", "dev": true, + "peer": true, "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "metro": "0.80.9", + "metro-babel-transformer": "0.80.9", + "metro-cache": "0.80.9", + "metro-cache-key": "0.80.9", + "metro-minify-terser": "0.80.9", + "metro-source-map": "0.80.9", + "metro-transform-plugins": "0.80.9", + "nullthrows": "^1.1.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" } }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", - "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "node_modules/metro/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "micromark-util-symbol": "^1.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "node_modules/metro/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "micromark-util-types": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz", - "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==", + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true + }, + "node_modules/metro/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "peer": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", + "node_modules/metro/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "peer": true, "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "ms": "2.0.0" } }, - "node_modules/micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", + "node_modules/metro/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "peer": true }, - "node_modules/micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", + "node_modules/metro/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "peer": true, + "engines": { + "node": ">=8" + } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==", + "dev": true, + "peer": true + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", "dev": true, + "peer": true, "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" + "hermes-estree": "0.20.1" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/metro/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "bin": { - "mime": "cli.js" - }, + "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/metro/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/metro/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "dependencies": { - "mime-db": "1.52.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/metro/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, + "peer": true + }, + "node_modules/metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "peer": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "node_modules/metro/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "peer": true, "dependencies": { - "dom-walk": "^0.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "node_modules/metro/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "node_modules/metro/node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "dev": true, - "bin": { - "mini-svg-data-uri": "cli.js" - } + "peer": true }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/metro/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/moo-color": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz", - "integrity": "sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==", - "dev": true, - "dependencies": { - "color-name": "^1.1.4" + "node": ">=12" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/metro/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "peer": true, "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" + "debug": "^4.0.0", + "parse-entities": "^2.0.0" } }, - "node_modules/multimatch/node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/nearest-color": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/nearest-color/-/nearest-color-0.4.4.tgz", - "integrity": "sha512-orhcaIORC10tf41Ld2wwlcC+FaAavHG87JHWB3eHH5p7v2k9Tzym2XNEZzLAm5YJwGv6Q38WWc7SOb+Qfu/4NQ==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" } }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "node_modules/micromark-extension-gfm": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", + "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", "dev": true, "dependencies": { - "minimatch": "^3.0.2" + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" }, - "engines": { - "node": ">= 0.10.5" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", + "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", "dev": true, "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch-native": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.4.0.tgz", - "integrity": "sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==", - "dev": true - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "node_modules/micromark-extension-gfm-footnote": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", + "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", "dev": true, "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", + "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", "dev": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/micromark-extension-gfm-table": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", + "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", + "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", "dev": true, "dependencies": { - "boolbase": "^1.0.0" + "micromark-util-types": "^1.0.0" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz", - "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", + "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/micromark-extension-mdx-expression": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz", + "integrity": "sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==", "dev": true, - "engines": { - "node": ">= 0.4" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/estree": "^1.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "node_modules/micromark-extension-mdx-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz", + "integrity": "sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "node_modules/micromark-extension-mdx-md": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz", + "integrity": "sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "micromark-util-types": "^1.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "node_modules/micromark-extension-mdxjs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz", + "integrity": "sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "node_modules/micromark-extension-mdxjs-esm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz", + "integrity": "sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==", "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@types/estree": "^1.0.0", + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "node_modules/micromark-extension-mdxjs/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.4.0" } }, - "node_modules/objectorarray": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", - "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "wrappy": "1" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/micromark-factory-mdx-expression": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz", + "integrity": "sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/estree": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", "dev": true, - "engines": { - "node": ">=4" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", "dev": true, - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "node_modules/micromark-util-events-to-acorn": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz", + "integrity": "sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^2.0.0", + "estree-util-visit": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" + "micromark-util-types": "^1.0.0" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">=8" + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dev": true, "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "dom-walk": "^0.1.0" } }, - "node_modules/path-browserify": { + "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 8" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": "14 || >=16.14" + "node": ">=8" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "node_modules/peek-stream": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", - "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", + "node_modules/moo-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz", + "integrity": "sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "duplexify": "^3.5.0", - "through2": "^2.0.3" + "color-name": "^1.1.4" } }, - "node_modules/pend": { + "node_modules/mri": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=4" } }, - "node_modules/pidtree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { - "pidtree": "bin/pidtree.js" + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=0.10" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/nearest-color": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/nearest-color/-/nearest-color-0.4.4.tgz", + "integrity": "sha512-orhcaIORC10tf41Ld2wwlcC+FaAavHG87JHWB3eHH5p7v2k9Tzym2XNEZzLAm5YJwGv6Q38WWc7SOb+Qfu/4NQ==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "engines": { - "node": ">= 6" + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "node_modules/nocache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", + "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, + "peer": true, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, - "node_modules/polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.8" + "minimatch": "^3.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.10.5" } }, - "node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=6.0.0" + "node": "4.x || >=6.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "node_modules/node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", + "dev": true + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, + "peer": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.12.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" } }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" + "abbrev": "^2.0.0" }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "bin": { + "nopt": "bin/nopt.js" }, - "peerDependencies": { - "postcss": "^8.2.15" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.10.0" } }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "path-key": "^3.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/postcss-import/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" + "boolbase": "^1.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/postcss-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", - "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true, + "peer": true + }, + "node_modules/nwsapi": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", + "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", + "dev": true + }, + "node_modules/nypm": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz", + "integrity": "sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==", "dev": true, "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" + "citty": "^0.1.6", + "consola": "^3.2.3", + "execa": "^8.0.1", + "pathe": "^1.1.2", + "ufo": "^1.4.0" }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "bin": { + "nypm": "dist/cli.mjs" }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^4.0.0 || ^5.0.0" + "engines": { + "node": "^14.16.0 || >=16.10.0" } }, - "node_modules/postcss-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/nypm/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "node_modules/nypm/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, "engines": { - "node": ">=10" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "node_modules/nypm/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=16.17.0" } }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "node_modules/nypm/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "node_modules/nypm/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=12" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "node_modules/nypm/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "path-key": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "node_modules/nypm/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=12" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "node_modules/nypm/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=12" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-modules": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", - "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "node_modules/nypm/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "dependencies": { - "generic-names": "^4.0.0", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" + "engines": { + "node": ">=14" }, - "peerDependencies": { - "postcss": "^8.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/postcss-modules-extract-imports": { + "node_modules/nypm/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=12" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "node_modules/ob1": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.9.tgz", + "integrity": "sha512-v9yOxowkZbxWhKOaaTyLjIm1aLy4ebMNcSn4NYJKOAI/Qv+SkfEfszpLr2GIxsccmb2Y2HA9qtsqiIJ80ucpVA==", "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, + "peer": true, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=18" } }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, "dependencies": { - "icss-utils": "^5.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.4" } }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.4" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "node_modules/objectorarray": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", + "dev": true + }, + "node_modules/ohash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", + "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" + "ee-first": "1.1.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8" } }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "wrappy": "1" } }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=12" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8.0" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.5" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", - "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==", + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "condense-newlines": "^0.2.1", - "extend-shallow": "^2.0.1", - "js-beautify": "^1.6.12" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "yocto-queue": "^0.1.0" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true, - "engines": { - "node": ">= 0.8" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-quick": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz", - "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "chalk": "^3.0.0", - "execa": "^4.0.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.5", - "multimatch": "^4.0.0" - }, - "bin": { - "pretty-quick": "bin/pretty-quick.js" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=10.13" + "node": ">=10" }, - "peerDependencies": { - "prettier": ">=2.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-quick/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-quick/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" }, "engines": { "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-quick/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "p-finally": "^1.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/pretty-quick/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/pretty-quick/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true }, - "node_modules/pretty-quick/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, - "engines": { - "node": ">=8.12.0" + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/pretty-quick/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "callsites": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/pretty-quick/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/pretty-quick/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-quick/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, - "engines": { - "node": ">= 0.6.0" + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "dependencies": { - "asap": "~2.0.3" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/promise.series": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", - "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { - "node": ">=0.12" + "node": ">=8" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">= 6" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" } }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/peek-stream": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", + "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "buffer-from": "^1.0.0", + "duplexify": "^3.5.0", + "through2": "^2.0.3" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "node_modules/pidtree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", + "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/punycode": { + "node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/puppeteer-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz", - "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==", + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, - "dependencies": { - "@types/mime-types": "^2.1.0", - "debug": "^4.1.0", - "extract-zip": "^1.6.6", - "https-proxy-agent": "^4.0.0", - "mime": "^2.0.3", - "mime-types": "^2.1.25", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^6.1.0" - }, "engines": { - "node": ">=8.16.0" + "node": ">= 6" } }, - "node_modules/puppeteer-core/node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, "engines": { - "node": ">= 6.0.0" + "node": ">=10" } }, - "node_modules/puppeteer-core/node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "node_modules/polished": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", "dev": true, "dependencies": { - "agent-base": "5", - "debug": "4" + "@babel/runtime": "^7.17.8" }, "engines": { - "node": ">= 6.0.0" + "node": ">=10" } }, - "node_modules/puppeteer-core/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, - "bin": { - "mime": "cli.js" - }, "engines": { - "node": ">=4.0.0" + "node": ">= 0.4" } }, - "node_modules/puppeteer-core/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "glob": "^7.1.3" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": "^10 || ^12 || >=14" } }, - "node_modules/puppeteer-core/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "dependencies": { - "async-limiter": "~1.0.0" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==", - "dev": true - }, - "node_modules/qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.6" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ramda": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", - "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react-color": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", - "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "dev": true, - "dependencies": { - "@icons/material": "^0.2.4", - "lodash": "^4.17.15", - "lodash-es": "^4.17.15", - "material-colors": "^1.2.1", - "prop-types": "^15.5.10", - "reactcss": "^1.2.0", - "tinycolor2": "^1.4.1" + "engines": { + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "react": "*" + "postcss": "^8.2.15" } }, - "node_modules/react-colorful": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", - "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "postcss": "^8.2.15" } }, - "node_modules/react-docgen": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", - "integrity": "sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==", + "node_modules/postcss-import": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", "dev": true, "dependencies": { - "@babel/core": "^7.7.5", - "@babel/generator": "^7.12.11", - "@babel/runtime": "^7.7.6", - "ast-types": "^0.14.2", - "commander": "^2.19.0", - "doctrine": "^3.0.0", - "estree-to-babel": "^3.1.0", - "neo-async": "^2.6.1", - "node-dir": "^0.1.10", - "strip-indent": "^3.0.0" - }, - "bin": { - "react-docgen": "bin/react-docgen.js" + "postcss": "^7.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "engines": { - "node": ">=8.10.0" + "node": ">=6.0.0" } }, - "node_modules/react-docgen-typescript": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", - "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true, - "peerDependencies": { - "typescript": ">= 4.3.x" - } + "node_modules/postcss-import/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, - "node_modules/react-docgen/node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "node_modules/postcss-import/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "dependencies": { - "tslib": "^2.0.1" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/react-docgen/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "node_modules/postcss-import/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "node_modules/postcss-import/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-dropzone": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", - "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", "dev": true, "dependencies": { - "attr-accept": "^2.2.2", - "file-selector": "^0.6.0", - "prop-types": "^15.8.1" + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" }, "engines": { - "node": ">= 10.13" + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "react": ">= 16.8 || 18.0.0" + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/react-element-to-jsx-string": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", - "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", + "node_modules/postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", "dev": true, "dependencies": { - "@base2/pretty-print-object": "1.0.1", - "is-plain-object": "5.0.0", - "react-is": "18.1.0" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", - "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/react-element-to-jsx-string/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/react-element-to-jsx-string/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, - "node_modules/react-inspector": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", - "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0 || ^18.0.0" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/react-intersection-observer": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.2.tgz", - "integrity": "sha512-EmoV66/yvksJcGa1rdW0nDNc4I1RifDWkT50gXSFnPLYQ4xUptuDD4V7k+Rj1OgVAlww628KLGcxPXFlOkkU/Q==", + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + "postcss": "^8.2.15" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, - "node_modules/react-property": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", - "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==", - "dev": true - }, - "node_modules/react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dev": true, "dependencies": { - "react-remove-scroll-bar": "^2.3.3", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "postcss": "^8.2.15" } }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", - "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dev": true, "dependencies": { - "react-style-singleton": "^2.2.1", - "tslib": "^2.0.0" + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "postcss": "^8.2.15" } }, - "node_modules/react-resize-detector": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-7.1.2.tgz", - "integrity": "sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw==", + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, "dependencies": { - "lodash": "^4.17.21" + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + "postcss": "^8.2.15" } }, - "node_modules/react-responsive": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", - "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dev": true, "dependencies": { - "hyphenate-style-name": "^1.0.0", - "matchmediaquery": "^0.3.0", - "prop-types": "^15.6.1", - "shallow-equal": "^1.2.1" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=0.10" + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "react": ">=16.8.0" + "postcss": "^8.2.15" } }, - "node_modules/react-slider": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/react-slider/-/react-slider-2.0.6.tgz", - "integrity": "sha512-gJxG1HwmuMTJ+oWIRCmVWvgwotNCbByTwRkFZC6U4MBsHqJBmxwbYRJUmxy4Tke1ef8r9jfXjgkmY/uHOCEvbA==", + "node_modules/postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "dev": true, "dependencies": { - "prop-types": "^15.8.1" + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" }, "peerDependencies": { - "react": "^16 || ^17 || ^18" + "postcss": "^8.0.0" } }, - "node_modules/react-spring": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-9.7.3.tgz", - "integrity": "sha512-oTxDpFV5gzq7jQX6+bU0SVq+vX8VnuuT5c8Zwn6CpDErOPvCmV+DRkPiEBtaL3Ozgzwiy5yFx83N0h303j/r3A==", + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, - "dependencies": { - "@react-spring/core": "~9.7.3", - "@react-spring/konva": "~9.7.3", - "@react-spring/native": "~9.7.3", - "@react-spring/three": "~9.7.3", - "@react-spring/web": "~9.7.3", - "@react-spring/zdog": "~9.7.3" + "engines": { + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "postcss": "^8.1.0" } }, - "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, "dependencies": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-textarea-autosize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", - "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", - "dev": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "react": ">=0.14.0 <17.0.0" - } - }, - "node_modules/react-zoom-pan-pinch": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.3.0.tgz", - "integrity": "sha512-vy1h8aenDzXye+HRqANZaSA8IPHoqOiuDPFBkswoyPUH8uMfsmbeH6gFI4r4BhEJa0xIlcA+FbvhidRWKGUrOg==", - "engines": { - "node": ">=8", - "npm": ">=5" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/reactcss": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", - "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", - "dev": true, - "dependencies": { - "lodash": "^4.0.1" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-cache/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recast": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.4.tgz", - "integrity": "sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==", - "dev": true, - "dependencies": { - "assert": "^2.0.0", - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recast/node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-external-links": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", - "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "is-absolute-url": "^3.0.0", - "mdast-util-definitions": "^4.0.0", - "space-separated-tokens": "^1.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", - "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^2.0.0", - "micromark-extension-gfm": "^2.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-slug": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", - "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", - "dev": true, - "dependencies": { - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^1.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-slug/node_modules/mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", - "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rgb-hex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-3.0.0.tgz", - "integrity": "sha512-8h7ZcwxCBDKvchSWbWngJuSCqJGQ6nDuLLg+QcRyQDbX9jMWt+PpPeXAhSla0GOooEomk3lCprUpGkMdsLjKyg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", - "dev": true - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-generate-package-json": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-generate-package-json/-/rollup-plugin-generate-package-json-3.2.0.tgz", - "integrity": "sha512-+Kq1kFVr+maxW/mZB+E+XuaieCXVZqjl2tNU9k3TtAMs3NOaeREa5sRHy67qKDmcnFtZZukIQ3dFCcnV+r0xyw==", - "dev": true, - "dependencies": { - "read-pkg": "^5.2.0", - "write-pkg": "^4.0.0" - }, - "engines": { - "node": ">=8.3" - }, - "peerDependencies": { - "rollup": ">=1.0.0" - } - }, - "node_modules/rollup-plugin-peer-deps-external": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.4.tgz", - "integrity": "sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==", - "dev": true, - "peerDependencies": { - "rollup": "*" - } - }, - "node_modules/rollup-plugin-postcss": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", - "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "concat-with-sourcemaps": "^1.1.0", - "cssnano": "^5.0.1", - "import-cwd": "^3.0.0", - "p-queue": "^6.6.2", - "pify": "^5.0.0", - "postcss-load-config": "^3.0.0", - "postcss-modules": "^4.0.0", - "promise.series": "^0.2.0", - "resolve": "^1.19.0", - "rollup-pluginutils": "^2.8.2", - "safe-identifier": "^0.4.2", - "style-inject": "^0.3.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "8.x" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-typescript2": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", - "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.1.2", - "find-cache-dir": "^3.3.2", - "fs-extra": "^10.0.0", - "semver": "^7.5.4", - "tslib": "^2.6.2" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-identifier": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", - "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", - "dev": true - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallow-equal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", - "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==", - "dev": true - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-update-notifier/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-update-notifier/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sort-keys/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/store2": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", - "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", - "dev": true - }, - "node_modules/storybook": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.4.6.tgz", - "integrity": "sha512-YkFSpnR47j5zz7yElA+2axLjXN7K7TxDGJRHHlqXmG5iQ0PXzmjrj2RxMDKFz4Ybp/QjEUoJ4rx//ESEY0Nb5A==", - "dev": true, - "dependencies": { - "@storybook/cli": "7.4.6" - }, - "bin": { - "sb": "index.js", - "storybook": "index.js" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", - "dev": true - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", - "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", - "dev": true, - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-entities/node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-inject": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", - "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", - "dev": true - }, - "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/style-mod": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.3.tgz", - "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==", - "dev": true - }, - "node_modules/style-to-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.1.tgz", - "integrity": "sha512-RJ18Z9t2B02sYhZtfWKQq5uplVctgvjTfLWT7+Eb1zjUjIrWzX5SdlkwLGQozrqarTmEzJJ/YmdNJCUNI47elg==", - "dev": true, - "dependencies": { - "style-to-object": "0.3.0" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dev": true, - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/styled-components": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.9.tgz", - "integrity": "sha512-Aj3kb13B75DQBo2oRwRa/APdB5rSmwUfN5exyarpX+x/tlM/rwZA2vVk2vQgVSP6WKaZJHWwiFrzgHt+CLtB4A==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^1.1.0", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0", - "react-is": ">= 16.8.0" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/swc-loader": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.3.tgz", - "integrity": "sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==", - "dev": true, - "peerDependencies": { - "@swc/core": "^1.2.147", - "webpack": ">=2" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/synchronous-promise": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", - "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", - "dev": true - }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dev": true, - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/telejson": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", - "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==", - "dev": true, - "dependencies": { - "@types/is-function": "^1.0.0", - "global": "^4.4.0", - "is-function": "^1.0.2", - "is-regex": "^1.1.2", - "is-symbol": "^1.0.3", - "isobject": "^4.0.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3" - } - }, - "node_modules/telejson/node_modules/isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dev": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/tempy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", - "dev": true, - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", - "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", - "dev": true - }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tocbot": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.21.2.tgz", - "integrity": "sha512-R5Muhi/TUu4i4snWVrMgNoXyJm2f8sJfdgIkQvqb+cuIXQEIMAiWGWgCgYXHqX4+XiS/Bnm7IYZ9Zy6NVe6lhw==", - "dev": true - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "dev": true, - "engines": { - "node": ">=6.10" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", - "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unplugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.0.tgz", - "integrity": "sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==", - "dev": true, - "dependencies": { - "acorn": "^8.10.0", - "chokidar": "^3.5.3", - "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.5.0" - } - }, - "node_modules/unplugin/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-browserslist-db/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, - "node_modules/use-callback-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", - "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", - "dev": true, - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", - "dev": true, - "dependencies": { - "@juggle/resize-observer": "^3.3.1" - }, - "peerDependencies": { - "react": "16.8.0 - 18", - "react-dom": "16.8.0 - 18" - } - }, - "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "dev": true, - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dev": true, - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-keyname": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", - "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==", - "dev": true - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", - "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-hot-middleware": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.4.tgz", - "integrity": "sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w==", - "dev": true, - "dependencies": { - "ansi-html-community": "0.0.8", - "html-entities": "^2.1.0", - "strip-ansi": "^6.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", - "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", - "dev": true - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@adobe/css-tools": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz", - "integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@aw-web-design/x-default-browser": { - "version": "1.4.126", - "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz", - "integrity": "sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==", - "dev": true, - "requires": { - "default-browser-id": "3.0.0" - } - }, - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - } - }, - "@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", - "dev": true - }, - "@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dev": true, - "requires": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.15" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", - "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dev": true, - "requires": { - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.15" - } - }, - "@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - } - }, - "@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" - } - }, - "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "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.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", - "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", - "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", - "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", - "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", - "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.15" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.22.5" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", - "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", - "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz", - "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.23.2", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.23.2", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.23.0", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.23.0", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.23.0", - "@babel/plugin-transform-modules-commonjs": "^7.23.0", - "@babel/plugin-transform-modules-systemjs": "^7.23.0", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.23.0", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.23.0", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - } - }, - "@babel/preset-flow": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", - "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - } - }, - "@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.15.tgz", - "integrity": "sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.22.5", - "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.22.5" - } - }, - "@babel/preset-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz", - "integrity": "sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/plugin-transform-modules-commonjs": "^7.21.2", - "@babel/plugin-transform-typescript": "^7.21.3" - } - }, - "@babel/register": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", - "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.14.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true - } - } - }, - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - }, - "@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@base2/pretty-print-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", - "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", - "dev": true - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@codemirror/autocomplete": { - "version": "0.19.15", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-0.19.15.tgz", - "integrity": "sha512-GQWzvvuXxNUyaEk+5gawbAD8s51/v2Chb++nx0e2eGWrphWk42isBtzOMdc3DxrxrZtPZ55q2ldNp+6G8KJLIQ==", - "dev": true, - "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.4", - "@codemirror/text": "^0.19.2", - "@codemirror/tooltip": "^0.19.12", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.0" - } - }, - "@codemirror/basic-setup": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@codemirror/basic-setup/-/basic-setup-0.19.3.tgz", - "integrity": "sha512-2hfO+QDk/HTpQzeYk1NyL1G9D5L7Sj78dtaQP8xBU42DKU9+OBPF5MdjLYnxP0jKzm6IfQfsLd89fnqW3rBVfQ==", - "dev": true, - "requires": { - "@codemirror/autocomplete": "^0.19.0", - "@codemirror/closebrackets": "^0.19.0", - "@codemirror/commands": "^0.19.0", - "@codemirror/comment": "^0.19.0", - "@codemirror/fold": "^0.19.0", - "@codemirror/gutter": "^0.19.0", - "@codemirror/highlight": "^0.19.0", - "@codemirror/history": "^0.19.0", - "@codemirror/language": "^0.19.0", - "@codemirror/lint": "^0.19.0", - "@codemirror/matchbrackets": "^0.19.0", - "@codemirror/rectangular-selection": "^0.19.2", - "@codemirror/search": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.31" - } - }, - "@codemirror/closebrackets": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/closebrackets/-/closebrackets-0.19.2.tgz", - "integrity": "sha512-ClMPzPcPP0eQiDcVjtVPl6OLxgdtZSYDazsvT0AKl70V1OJva0eHgl4/6kCW3RZ0pb2n34i9nJz4eXCmK+TYDA==", - "dev": true, - "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.2", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.44" - } - }, - "@codemirror/commands": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-0.19.8.tgz", - "integrity": "sha512-65LIMSGUGGpY3oH6mzV46YWRrgao6NmfJ+AuC7jNz3K5NPnH6GCV1H5I6SwOFyVbkiygGyd0EFwrWqywTBD1aw==", - "dev": true, - "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/matchbrackets": "^0.19.0", - "@codemirror/state": "^0.19.2", - "@codemirror/text": "^0.19.6", - "@codemirror/view": "^0.19.22", - "@lezer/common": "^0.15.0" - } - }, - "@codemirror/comment": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/comment/-/comment-0.19.1.tgz", - "integrity": "sha512-uGKteBuVWAC6fW+Yt8u27DOnXMT/xV4Ekk2Z5mRsiADCZDqYvryrJd6PLL5+8t64BVyocwQwNfz1UswYS2CtFQ==", - "dev": true, - "requires": { - "@codemirror/state": "^0.19.9", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "@codemirror/fold": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@codemirror/fold/-/fold-0.19.4.tgz", - "integrity": "sha512-0SNSkRSOa6gymD6GauHa3sxiysjPhUC0SRVyTlvL52o0gz9GHdc8kNqNQskm3fBtGGOiSriGwF/kAsajRiGhVw==", - "dev": true, - "requires": { - "@codemirror/gutter": "^0.19.0", - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.22" - } - }, - "@codemirror/gutter": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/gutter/-/gutter-0.19.9.tgz", - "integrity": "sha512-PFrtmilahin1g6uL27aG5tM/rqR9DZzZYZsIrCXA5Uc2OFTFqx4owuhoU9hqfYxHp5ovfvBwQ+txFzqS4vog6Q==", - "dev": true, - "requires": { - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.23" - } - }, - "@codemirror/highlight": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@codemirror/highlight/-/highlight-0.19.8.tgz", - "integrity": "sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A==", - "dev": true, - "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.3", - "@codemirror/view": "^0.19.39", - "@lezer/common": "^0.15.0", - "style-mod": "^4.0.0" - } - }, - "@codemirror/history": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/history/-/history-0.19.2.tgz", - "integrity": "sha512-unhP4t3N2smzmHoo/Yio6ueWi+il8gm9VKrvi6wlcdGH5fOfVDNkmjHQ495SiR+EdOG35+3iNebSPYww0vN7ow==", - "dev": true, - "requires": { - "@codemirror/state": "^0.19.2", - "@codemirror/view": "^0.19.0" - } - }, - "@codemirror/lang-javascript": { - "version": "0.19.7", - "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-0.19.7.tgz", - "integrity": "sha512-DL9f3JLqOEHH9cIwEqqjnP5bkjdVXeECksLtV+/MbPm+l4H+AG+PkwZaJQ2oR1GfPZKh8MVSIE94aGWNkJP8WQ==", - "dev": true, - "requires": { - "@codemirror/autocomplete": "^0.19.0", - "@codemirror/highlight": "^0.19.7", - "@codemirror/language": "^0.19.0", - "@codemirror/lint": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/javascript": "^0.15.1" - } - }, - "@codemirror/language": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-0.19.10.tgz", - "integrity": "sha512-yA0DZ3RYn2CqAAGW62VrU8c4YxscMQn45y/I9sjBlqB1e2OTQLg4CCkMBuMSLXk4xaqjlsgazeOQWaJQOKfV8Q==", - "dev": true, - "requires": { - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.5", - "@lezer/lr": "^0.15.0" - } - }, - "@codemirror/legacy-modes": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-0.19.1.tgz", - "integrity": "sha512-vYPLsD/ON+3SXhlGj9Qb3fpFNNU3Ya/AtDiv/g3OyqVzhh5vs5rAnOvk8xopGWRwppdhlNPD9VyXjiOmZUQtmQ==", - "dev": true, - "requires": { - "@codemirror/stream-parser": "^0.19.0" - } - }, - "@codemirror/lint": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-0.19.6.tgz", - "integrity": "sha512-Pbw1Y5kHVs2J+itQ0uez3dI4qY9ApYVap7eNfV81x1/3/BXgBkKfadaw0gqJ4h4FDG7OnJwb0VbPsjJQllHjaA==", - "dev": true, - "requires": { - "@codemirror/gutter": "^0.19.4", - "@codemirror/panel": "^0.19.0", - "@codemirror/rangeset": "^0.19.1", - "@codemirror/state": "^0.19.4", - "@codemirror/tooltip": "^0.19.16", - "@codemirror/view": "^0.19.22", - "crelt": "^1.0.5" - } - }, - "@codemirror/matchbrackets": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@codemirror/matchbrackets/-/matchbrackets-0.19.4.tgz", - "integrity": "sha512-VFkaOKPNudAA5sGP1zikRHCEKU0hjYmkKpr04pybUpQvfTvNJXlReCyP0rvH/1iEwAGPL990ZTT+QrLdu4MeEA==", - "dev": true, - "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.0" - } - }, - "@codemirror/panel": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/panel/-/panel-0.19.1.tgz", - "integrity": "sha512-sYeOCMA3KRYxZYJYn5PNlt9yNsjy3zTNTrbYSfVgjgL9QomIVgOJWPO5hZ2sTN8lufO6lw0vTBsIPL9MSidmBg==", - "dev": true, - "requires": { - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "@codemirror/rangeset": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/rangeset/-/rangeset-0.19.9.tgz", - "integrity": "sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==", - "dev": true, - "requires": { - "@codemirror/state": "^0.19.0" - } - }, - "@codemirror/rectangular-selection": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/rectangular-selection/-/rectangular-selection-0.19.2.tgz", - "integrity": "sha512-AXK/p5eGwFJ9GJcLfntqN4dgY+XiIF7eHfXNQJX5HhQLSped2wJE6WuC1rMEaOlcpOqlb9mrNi/ZdUjSIj9mbA==", - "dev": true, - "requires": { - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.4", - "@codemirror/view": "^0.19.48" - } - }, - "@codemirror/search": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-0.19.10.tgz", - "integrity": "sha512-qjubm69HJixPBWzI6HeEghTWOOD8NXiHOTRNvdizqs8xWRuFChq9zkjD3XiAJ7GXSTzCuQJnAP9DBBGCLq4ZIA==", - "dev": true, - "requires": { - "@codemirror/panel": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.3", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.34", - "crelt": "^1.0.5" - } - }, - "@codemirror/state": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-0.19.9.tgz", - "integrity": "sha512-psOzDolKTZkx4CgUqhBQ8T8gBc0xN5z4gzed109aF6x7D7umpDRoimacI/O6d9UGuyl4eYuDCZmDFr2Rq7aGOw==", - "dev": true, - "requires": { - "@codemirror/text": "^0.19.0" - } - }, - "@codemirror/stream-parser": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/stream-parser/-/stream-parser-0.19.9.tgz", - "integrity": "sha512-WTmkEFSRCetpk8xIOvV2yyXdZs3DgYckM0IP7eFi4ewlxWnJO/H4BeJZLs4wQaydWsAqTQoDyIwNH1BCzK5LUQ==", - "dev": true, - "requires": { - "@codemirror/highlight": "^0.19.0", - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.0", - "@lezer/common": "^0.15.0", - "@lezer/lr": "^0.15.0" - } - }, - "@codemirror/text": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@codemirror/text/-/text-0.19.6.tgz", - "integrity": "sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA==", - "dev": true - }, - "@codemirror/theme-one-dark": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-0.19.0.tgz", - "integrity": "sha512-Xlk68ARreanFveE+KvZJY4HxecNr+VKDOR61O8l3kzlQ0qvxNXA0KAp1xu4p32pA9jzJqJi5haIgdfWSZogXZg==", - "dev": true, - "requires": { - "@codemirror/highlight": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "@codemirror/tooltip": { - "version": "0.19.16", - "resolved": "https://registry.npmjs.org/@codemirror/tooltip/-/tooltip-0.19.16.tgz", - "integrity": "sha512-zxKDHryUV5/RS45AQL+wOeN+i7/l81wK56OMnUPoTSzCWNITfxHn7BToDsjtrRKbzHqUxKYmBnn/4hPjpZ4WJQ==", - "dev": true, - "requires": { - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "@codemirror/view": { - "version": "0.19.48", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-0.19.48.tgz", - "integrity": "sha512-0eg7D2Nz4S8/caetCTz61rK0tkHI17V/d15Jy0kLOT8dTLGGNJUponDnW28h2B6bERmPlVHKh8MJIr5OCp1nGw==", - "dev": true, - "requires": { - "@codemirror/rangeset": "^0.19.5", - "@codemirror/state": "^0.19.3", - "@codemirror/text": "^0.19.0", - "style-mod": "^4.0.0", - "w3c-keyname": "^2.2.4" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@dnd-kit/accessibility": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.0.1.tgz", - "integrity": "sha512-HXRrwS9YUYQO9lFRc/49uO/VICbM+O+ZRpFDe9Pd1rwVv2PCNkRiTZRdxrDgng/UkvdC3Re9r2vwPpXXrWeFzg==", - "dev": true, - "requires": { - "tslib": "^2.0.0" - } - }, - "@dnd-kit/core": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.0.8.tgz", - "integrity": "sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==", - "dev": true, - "requires": { - "@dnd-kit/accessibility": "^3.0.0", - "@dnd-kit/utilities": "^3.2.1", - "tslib": "^2.0.0" - } - }, - "@dnd-kit/sortable": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-7.0.2.tgz", - "integrity": "sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==", - "dev": true, - "requires": { - "@dnd-kit/utilities": "^3.2.0", - "tslib": "^2.0.0" - } - }, - "@dnd-kit/utilities": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.1.tgz", - "integrity": "sha512-OOXqISfvBw/1REtkSK2N3Fi2EQiLMlWUlqnOK/UpOISqBZPWpE6TqL+jcPtMOkE8TqYGiURvRdPSI9hltNUjEA==", - "dev": true, - "requires": { - "tslib": "^2.0.0" - } - }, - "@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", - "dev": true, - "requires": { - "@emotion/memoize": "^0.8.0" - } - }, - "@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==", - "dev": true - }, - "@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", - "dev": true - }, - "@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", - "dev": true - }, - "@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", - "dev": true - }, - "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "dev": true, - "optional": true - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.1", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - } - } - }, - "@eslint/js": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", - "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", - "dev": true - }, - "@fal-works/esbuild-plugin-global-externals": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz", - "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==", - "dev": true - }, - "@floating-ui/core": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", - "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", - "requires": { - "@floating-ui/utils": "^0.2.0" - } - }, - "@floating-ui/dom": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", - "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", - "requires": { - "@floating-ui/core": "^1.5.3", - "@floating-ui/utils": "^0.2.0" - } - }, - "@floating-ui/react": { - "version": "0.26.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.6.tgz", - "integrity": "sha512-FFDAuSlRwb8CY4/VvYio/wwk/0339B257yRpKwNOjcHWNYL/fgjl1KUvT3K6ZZ4WDbBWYc7Km4ITMuPZrS8omg==", - "requires": { - "@floating-ui/react-dom": "^2.0.6", - "@floating-ui/utils": "^0.2.1", - "tabbable": "^6.0.1" - } - }, - "@floating-ui/react-dom": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.6.tgz", - "integrity": "sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==", - "requires": { - "@floating-ui/dom": "^1.5.4" - } - }, - "@floating-ui/utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", - "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" - }, - "@focus-reactive/react-yaml": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@focus-reactive/react-yaml/-/react-yaml-1.1.2.tgz", - "integrity": "sha512-X9/rmfuDHR+beDym2206RsD5m/5EfH26vVuGVbLXy7+BunPcVBRqwe2WbvCyoHloMUX7Ccp2xrLwmmPrvZ9hrA==", - "dev": true, - "requires": { - "@codemirror/basic-setup": "^0.19.0", - "@codemirror/commands": "^0.19.3", - "@codemirror/lang-javascript": "^0.19.1", - "@codemirror/legacy-modes": "^0.19.0", - "@codemirror/rangeset": "^0.19.1", - "@codemirror/state": "^0.19.1", - "@codemirror/stream-parser": "^0.19.2", - "@codemirror/theme-one-dark": "^0.19.0", - "@codemirror/tooltip": "^0.19.2", - "@codemirror/view": "^0.19.4", - "js-yaml": "^4.1.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@icons/material": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", - "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", - "dev": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } - } - }, - "@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", - "dev": true - }, - "@lezer/common": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", - "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", - "dev": true - }, - "@lezer/javascript": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-0.15.3.tgz", - "integrity": "sha512-8jA2NpOfpWwSPZxRhd9BxK2ZPvGd7nLE3LFTJ5AbMhXAzMHeMjneV6GEVd7dAIee85dtap0jdb6bgOSO0+lfwA==", - "dev": true, - "requires": { - "@lezer/lr": "^0.15.0" - } - }, - "@lezer/lr": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", - "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", - "dev": true, - "requires": { - "@lezer/common": "^0.15.0" - } - }, - "@lifesg/react-icons": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@lifesg/react-icons/-/react-icons-1.5.0.tgz", - "integrity": "sha512-ixwbGt+hbm4RL+7g2p8r3RfCk4oX8nji42MDYw+3ymhPjqfJttZBEvNqyQsPR2cmhLTcauDJfDdNawO/oQgvUQ==", - "dev": true - }, - "@mdx-js/react": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz", - "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==", - "dev": true, - "requires": { - "@types/mdx": "^2.0.0", - "@types/react": ">=16" - } - }, - "@ndelangen/get-tarball": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz", - "integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==", - "dev": true, - "requires": { - "gunzip-maybe": "^1.4.2", - "pump": "^3.0.0", - "tar-fs": "^2.1.1" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true - }, - "@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - } - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", - "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", - "dev": true, - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@radix-ui/number": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", - "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", - "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-arrow": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", - "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - } - }, - "@radix-ui/react-collection": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", - "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2" - } - }, - "@radix-ui/react-compose-refs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", - "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-direction": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", - "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-dismissable-layer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", - "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" - } - }, - "@radix-ui/react-focus-guards": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", - "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-focus-scope": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz", - "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" - } - }, - "@radix-ui/react-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", - "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" - } - }, - "@radix-ui/react-popper": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", - "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" - } - }, - "@radix-ui/react-portal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", - "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - } - }, - "@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" - } - }, - "@radix-ui/react-roving-focus": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", - "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1" - } - }, - "@radix-ui/react-select": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz", - "integrity": "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/number": "1.0.1", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.4", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.3", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.2", - "@radix-ui/react-portal": "1.0.3", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-previous": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" - } - }, - "@radix-ui/react-separator": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.0.3.tgz", - "integrity": "sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - } - }, - "@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" - } - }, - "@radix-ui/react-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz", - "integrity": "sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1" - } - }, - "@radix-ui/react-toggle-group": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz", - "integrity": "sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-toggle": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1" - } - }, - "@radix-ui/react-toolbar": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz", - "integrity": "sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-separator": "1.0.3", - "@radix-ui/react-toggle-group": "1.0.4" - } - }, - "@radix-ui/react-use-callback-ref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", - "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-controllable-state": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", - "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" - } - }, - "@radix-ui/react-use-escape-keydown": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", - "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" - } - }, - "@radix-ui/react-use-layout-effect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", - "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-previous": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", - "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", - "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.1" - } - }, - "@radix-ui/react-use-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", - "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" - } - }, - "@radix-ui/react-visually-hidden": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", - "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - } - }, - "@radix-ui/rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", - "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@reach/component-component": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@reach/component-component/-/component-component-0.1.3.tgz", - "integrity": "sha512-a1USH7L3bEfDdPN4iNZGvMEFuBfkdG+QNybeyDv8RloVFgZYRoM+KGXyy2KOfEnTUM8QWDRSROwaL3+ts5Angg==", - "dev": true - }, - "@reach/observe-rect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", - "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==", - "dev": true - }, - "@reach/rect": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.2.1.tgz", - "integrity": "sha512-aZ9RsNHDMQ3zETonikqu9/85iXxj+LPqZ9Gr9UAncj3AufYmGeWG3XG6b37B+7ORH+mkhVpLU2ZlIWxmOe9Cqg==", - "dev": true, - "requires": { - "@reach/component-component": "^0.1.3", - "@reach/observe-rect": "^1.0.3" - } - }, - "@react-spring/animated": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.3.tgz", - "integrity": "sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==", - "dev": true, - "requires": { - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - } - }, - "@react-spring/core": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.3.tgz", - "integrity": "sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==", - "dev": true, - "requires": { - "@react-spring/animated": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - } - }, - "@react-spring/konva": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/konva/-/konva-9.7.3.tgz", - "integrity": "sha512-R9sY6SiPGYqz1383P5qppg5z57YfChVknOC1UxxaGxpw+WiZa8fZ4zmZobslrw+os3/+HAXZv8O+EvU/nQpf7g==", - "dev": true, - "requires": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - } - }, - "@react-spring/native": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/native/-/native-9.7.3.tgz", - "integrity": "sha512-4mpxX3FuEBCUT6ae2fjhxcJW6bhr2FBwFf274eXB7n+U30Gdg8Wo2qYwcUnmiAA0S3dvP8vLTazx3+CYWFShnA==", - "dev": true, - "requires": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - } - }, - "@react-spring/shared": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.3.tgz", - "integrity": "sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==", - "dev": true, - "requires": { - "@react-spring/types": "~9.7.3" - } - }, - "@react-spring/three": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.7.3.tgz", - "integrity": "sha512-Q1p512CqUlmMK8UMBF/Rj79qndhOWq4XUTayxMP9S892jiXzWQuj+xC3Xvm59DP/D4JXusXpxxqfgoH+hmOktA==", - "dev": true, - "requires": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - } - }, - "@react-spring/types": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.3.tgz", - "integrity": "sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==", - "dev": true - }, - "@react-spring/web": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.3.tgz", - "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==", - "dev": true, - "requires": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - } - }, - "@react-spring/zdog": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/zdog/-/zdog-9.7.3.tgz", - "integrity": "sha512-L+yK/1PvNi9n8cldiJ309k4LdxcPkeWE0W18l1zrP1IBIyd5NB5EPA8DMsGr9gtNnnIujtEzZk+4JIOjT8u/tw==", - "dev": true, - "requires": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - } - }, - "@react-theming/flatten": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@react-theming/flatten/-/flatten-0.1.1.tgz", - "integrity": "sha512-cieWCbO4xTgl8/LAUTEgiafEiFIcheARteyxXddnUHm/+7POCmRvSE/woHGXlVH7dFBlCbI4y/e5ikMzwBA3CA==", - "dev": true, - "requires": { - "color": "^3.1.2", - "color-convert": "^2.0.1", - "color-parse": "^1.3.8", - "color-rgba": "^2.1.1", - "color-string": "^1.5.3", - "color-stringify": "^1.2.1", - "flat": "^5.0.0", - "is-color-stop": "^1.1.0", - "rgb-hex": "^3.0.0" - } - }, - "@react-theming/storybook-addon": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@react-theming/storybook-addon/-/storybook-addon-1.1.10.tgz", - "integrity": "sha512-7DHwzPIY4nerTqkUgyQ70IqPSHMycnYgJsYQMAVkT8dsQPuQUUKz2UVjqD0HkPMw3JA+wQuSvY9BpJap5z7fqQ==", - "dev": true, - "requires": { - "@codemirror/theme-one-dark": "0.19.0", - "@focus-reactive/react-yaml": "^1.1.2", - "@react-theming/flatten": "^0.1.1", - "@react-theming/theme-name": "^1.0.3", - "@react-theming/theme-swatch": "^1.0.0", - "@storybook/addon-devkit": "^1.4.2", - "@usulpro/react-json-view": "^2.0.1", - "color-string": "^1.9.1", - "react-color": "^2.18.0" - } - }, - "@react-theming/theme-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@react-theming/theme-name/-/theme-name-1.0.3.tgz", - "integrity": "sha512-5tYnKIG3wUJ3GTX50ldeU+nxLTEU8WXEGsHk8mWeG9XGC4VxKIp2gSqS6B/opCGmfuIFm459Dtru8PSuEXiJJg==", - "dev": true, - "requires": { - "color-name-list": "^4.7.1", - "nearest-color": "^0.4.4" - } - }, - "@react-theming/theme-swatch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-theming/theme-swatch/-/theme-swatch-1.0.0.tgz", - "integrity": "sha512-tOzDTUbFB5uQLMVHJ4fXWYZ4i7JIKjyrS7SlHDoscRZqM69lmT+s9fSZoD1/InTdX0M7Jh8thXF0SzeoxnD1/Q==", - "dev": true - }, - "@rollup/plugin-commonjs": { - "version": "25.0.7", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", - "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.30.3" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@rollup/plugin-image": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-image/-/plugin-image-3.0.3.tgz", - "integrity": "sha512-qXWQwsXpvD4trSb8PeFPFajp8JLpRtqqOeNYRUKnEQNHm7e5UP7fuSRcbjQAJ7wDZBbnJvSdY5ujNBQd9B1iFg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "mini-svg-data-uri": "^1.4.4" - } - }, - "@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.1.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - } - }, - "@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@storybook/addon-a11y": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-7.4.6.tgz", - "integrity": "sha512-RE8sXk9KEqgmjsFmG31eObgPMTOvvWnoNZIaZEHs88X30tNHtFwjc0jzvCR/xriKsBtQdYQTUSsB7pSjaJHNzQ==", - "dev": true, - "requires": { - "@storybook/addon-highlight": "7.4.6", - "@storybook/channels": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "axe-core": "^4.2.0", - "lodash": "^4.17.21", - "react-resize-detector": "^7.1.2" - }, - "dependencies": { - "@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - } - } - }, - "@storybook/addon-actions": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.4.6.tgz", - "integrity": "sha512-SsqZr3js5NinKPnC8AeNI7Ij+Q6fIl9tRdRmSulEgjksjOg7E5S1/Wsn5Bb2CCgj7MaX6VxGyC7s3XskQtDiIQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "polished": "^4.2.2", - "prop-types": "^15.7.2", - "react-inspector": "^6.0.0", - "telejson": "^7.2.0", - "ts-dedent": "^2.0.0", - "uuid": "^9.0.0" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - }, - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true - } - } - }, - "@storybook/addon-backgrounds": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.4.6.tgz", - "integrity": "sha512-+LHTZB/ZYMAzkyD5ZxSriBsqmsrvIaW/Nnd/BeuXGbkrVKKqM0qAKiFZAfjc2WchA1piVNy0/1Rsf+kuYCEiJw==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "memoizerific": "^1.11.3", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - } - } - }, - "@storybook/addon-controls": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.4.6.tgz", - "integrity": "sha512-4lq3sycEUIsK8SUWDYc60QgF4vV9FZZ3lDr6M7j2W9bOnvGw49d2fbdlnq+bX1ZprZZ9VgglQpBAorQB3BXZRw==", - "dev": true, - "requires": { - "@storybook/blocks": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/manager-api": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "lodash": "^4.17.21", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - } - } - }, - "@storybook/addon-devkit": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-devkit/-/addon-devkit-1.4.2.tgz", - "integrity": "sha512-ggy34eCzmiKOwgV7xYNjlPClGpmtnYODPJv0vkCKiDyPeVLHocq2UZ7ZkOhQ5GO7TM7aLeeC1JBS00tZId9oLA==", - "dev": true, - "requires": { - "@reach/rect": "^0.2.1", - "@storybook/addons": "^6.1.18", - "@storybook/core-events": "^6.1.18", - "@storybook/theming": "^6.1.18", - "deep-equal": "^2.0.2", - "prop-types": "^15.6.2" - } - }, - "@storybook/addon-docs": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.4.6.tgz", - "integrity": "sha512-dLaub+XWFq4hChw+xfuF9yYg0Txp77FUawKoAigccfjWXx+OOhRV3XTuAcknpXkYq94GWynHgUFXosXT9kbDNA==", - "dev": true, - "requires": { - "@jest/transform": "^29.3.1", - "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/csf-plugin": "7.4.6", - "@storybook/csf-tools": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.4.6", - "@storybook/postinstall": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/react-dom-shim": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "fs-extra": "^11.1.0", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - } - } - }, - "@storybook/addon-essentials": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.4.6.tgz", - "integrity": "sha512-dWodufrt71TK7ELkeIvVae/x4PzECUlbOm57Iqqt4yQCyR291CgvI4PjeB8un2HbpcXCGZ+N/Oj3YkytvzBi4A==", - "dev": true, - "requires": { - "@storybook/addon-actions": "7.4.6", - "@storybook/addon-backgrounds": "7.4.6", - "@storybook/addon-controls": "7.4.6", - "@storybook/addon-docs": "7.4.6", - "@storybook/addon-highlight": "7.4.6", - "@storybook/addon-measure": "7.4.6", - "@storybook/addon-outline": "7.4.6", - "@storybook/addon-toolbars": "7.4.6", - "@storybook/addon-viewport": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/manager-api": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/preview-api": "7.4.6", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-highlight": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.4.6.tgz", - "integrity": "sha512-zCufxxD2KS5VwczxfkcBxe1oR/juTTn2H1Qm8kYvWCJQx3UxzX0+G9cwafbpV7eivqaufLweEwROkH+0KjAtkQ==", - "dev": true, - "requires": { - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.4.6" - }, - "dependencies": { - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - } - } - }, - "@storybook/addon-interactions": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.4.6.tgz", - "integrity": "sha512-zVZYrEPZPhNrXBuPqM7HbQvr6jwsje1sbCYj3wnp83U5wjciuqrngqHIlaSZ30zOWSfRVyzbyqL+JQZKA58BNA==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "7.4.6", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "jest-mock": "^27.0.6", - "polished": "^4.2.2", - "ts-dedent": "^2.2.0" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - } - } - }, - "@storybook/addon-links": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.4.6.tgz", - "integrity": "sha512-BPygElZKX+CPI9Se6GJNk1dYc5oxuhA+vHigO1tBqhiM6VkHyFP3cvezJNQvpNYhkUnu3cxnZXb3UJnlRbPY3g==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/router": "7.4.6", - "@storybook/types": "7.4.6", - "prop-types": "^15.7.2", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "requires": { - "type-fest": "^2.19.0" - } - }, - "@storybook/router": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.4.6.tgz", - "integrity": "sha512-Vl1esrHkcHxDKqc+HY7+6JQpBPW3zYvGk0cQ2rxVMhWdLZTAz1hss9DqzN9tFnPyfn0a1Q77EpMySkUrvWKKNQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } - } - }, - "@storybook/addon-measure": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.4.6.tgz", - "integrity": "sha512-nCymMLaHnxv8TE3yEM1A9Tulb1NuRXRNmtsdHTkjv7P1aWCxZo8A/GZaottKe/GLT8jSRjZ+dnpYWrbAhw6wTQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/types": "7.4.6", - "tiny-invariant": "^1.3.1" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - } - } - }, - "@storybook/addon-outline": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.4.6.tgz", - "integrity": "sha512-errNUblRVDLpuEaHQPr/nsrnsUkD2ARmXawkRvizgDWLIDMDJYjTON3MUCaVx3x+hlZ3I6X//G5TVcma8tCc8A==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/types": "7.4.6", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - } - } - }, - "@storybook/addon-storysource": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-storysource/-/addon-storysource-7.6.4.tgz", - "integrity": "sha512-D63IB8bkqn5ZDq4yjvkcLVfGz3OcAQUohlxSFR1e7COo8jMSTiQWjN7xaVPNOnVJRCj6GrlRlto/hqGl+F+WiQ==", - "dev": true, - "requires": { - "@storybook/source-loader": "7.6.4", - "estraverse": "^5.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/addon-themes": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-7.5.1.tgz", - "integrity": "sha512-rWq6xr+Yvy9xrucy/7aiSuovEx5fDTgx6RGQcWhKBurHDAr2gbWX+HrYHyQsmG8zZ1x5SRKJiqj9vgS1g9cxfQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.5.1", - "@storybook/components": "7.5.1", - "@storybook/core-events": "7.5.1", - "@storybook/manager-api": "7.5.1", - "@storybook/preview-api": "7.5.1", - "@storybook/theming": "7.5.1", - "@storybook/types": "7.5.1", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@storybook/channels": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.5.1.tgz", - "integrity": "sha512-7hTGHqvtdFTqRx8LuCznOpqPBYfUeMUt/0IIp7SFuZT585yMPxrYoaK//QmLEWnPb80B8HVTSQi7caUkJb32LA==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.5.1", - "@storybook/core-events": "7.5.1", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/client-logger": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.5.1.tgz", - "integrity": "sha512-XxbLvg0aQRoBrzxYLcVYCbjDkGbkU8Rfb74XbV2CLiO2bIbFPmA1l1Nwbp+wkCGA+O6Z1zwzSl6wcKKqZ6XZCg==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/components": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.5.1.tgz", - "integrity": "sha512-fdzzxGBV/Fj9pYwfYL3RZsVUHeBqlfLMBP/L6mPmjaZSwHFqkaRZZUajZc57lCtI+TOy2gY6WH3cPavEtqtgLw==", - "dev": true, - "requires": { - "@radix-ui/react-select": "^1.2.2", - "@radix-ui/react-toolbar": "^1.0.4", - "@storybook/client-logger": "7.5.1", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/theming": "7.5.1", - "@storybook/types": "7.5.1", - "memoizerific": "^1.11.3", - "use-resize-observer": "^9.1.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/core-events": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.5.1.tgz", - "integrity": "sha512-2eyaUhTfmEEqOEZVoCXVITCBn6N7QuZCG2UNxv0l//ED+7MuMiFhVw7kS7H3WOVk65R7gb8qbKFTNX8HFTgBHg==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "requires": { - "type-fest": "^2.19.0" - } - }, - "@storybook/manager-api": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.5.1.tgz", - "integrity": "sha512-ygwJywluhhE1dpA0jC2D/3NFhMXzFCt+iW4m3cOwexYTuiDWF66AbGOFBx9peE7Wk/Z9doKkf9E3v11enwaidA==", - "dev": true, - "requires": { - "@storybook/channels": "7.5.1", - "@storybook/client-logger": "7.5.1", - "@storybook/core-events": "7.5.1", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/router": "7.5.1", - "@storybook/theming": "7.5.1", - "@storybook/types": "7.5.1", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "semver": "^7.3.7", - "store2": "^2.14.2", - "telejson": "^7.2.0", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/preview-api": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.5.1.tgz", - "integrity": "sha512-8xjUbuGmHLmw8tfTUCjXSvMM9r96JaexPFmHdwW6XLe71KKdWp8u96vRDRE5648cd+/of15OjaRtakRKqluA/A==", - "dev": true, - "requires": { - "@storybook/channels": "7.5.1", - "@storybook/client-logger": "7.5.1", - "@storybook/core-events": "7.5.1", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/types": "7.5.1", - "@types/qs": "^6.9.5", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "synchronous-promise": "^2.0.15", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/router": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.5.1.tgz", - "integrity": "sha512-BvKo+IxWwo3dfIG1+vLtZLT4qqkNHL5GTIozTyX04uqt9ByYZL6SJEzxEa1Xn6Qq/fbdQwzCanNHbTlwiTMf7Q==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.5.1", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - } - }, - "@storybook/theming": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.5.1.tgz", - "integrity": "sha512-ETLAOn10hI4Mkmjsr0HGcM6HbzaURrrPBYmfXOrdbrzEVN+AHW4FlvP9d8fYyP1gdjPE1F39XvF0jYgt1zXiHQ==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.5.1", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - }, - "@storybook/types": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.5.1.tgz", - "integrity": "sha512-ZcMSaqFNx1E+G00nRDUi8kKL7gxJVlnCvbKLNj3V85guy4DkIYAZr31yDqze07gDWbjvKoHIp3tKpgE+2i8upQ==", - "dev": true, - "requires": { - "@storybook/channels": "7.5.1", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@storybook/addon-toolbars": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.4.6.tgz", - "integrity": "sha512-L9m2FBcKeteGq7qIYsMJr0LEfiH7Wdrv5IDcldZTn68eZUJTh1p4GdJZcOmzX1P5IFRr76hpu03iWsNlWQjpbQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - } - } - }, - "@storybook/addon-viewport": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.4.6.tgz", - "integrity": "sha512-INDtk54j7bi7NgxMfd2ATmbA0J7nAd6X8itMkLIyPuPJtx8bYHPDORyemDOd0AojgmAdTOAyUtDYdI/PFeo4Cw==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "memoizerific": "^1.11.3", - "prop-types": "^15.7.2" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - } - } - }, - "@storybook/addons": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.16.tgz", - "integrity": "sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==", - "dev": true, - "requires": { - "@storybook/api": "6.5.16", - "@storybook/channels": "6.5.16", - "@storybook/client-logger": "6.5.16", - "@storybook/core-events": "6.5.16", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.16", - "@storybook/theming": "6.5.16", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/api": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.16.tgz", - "integrity": "sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==", - "dev": true, - "requires": { - "@storybook/channels": "6.5.16", - "@storybook/client-logger": "6.5.16", - "@storybook/core-events": "6.5.16", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.16", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.16", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "telejson": "^6.0.8", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/blocks": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.4.6.tgz", - "integrity": "sha512-HxBSAeOiTZW2jbHQlo1upRWFgoMsaAyKijUFf5MwwMNIesXCuuTGZDJ3xTABwAVLK2qC9Ektfbo0CZCiPVuDRQ==", - "dev": true, - "requires": { - "@storybook/channels": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/csf": "^0.1.0", - "@storybook/docs-tools": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "@types/lodash": "^4.14.167", - "color-convert": "^2.0.1", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "markdown-to-jsx": "^7.1.8", - "memoizerific": "^1.11.3", - "polished": "^4.2.2", - "react-colorful": "^5.1.2", - "telejson": "^7.2.0", - "tocbot": "^4.20.1", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "requires": { - "type-fest": "^2.19.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } - } - }, - "@storybook/builder-manager": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.4.6.tgz", - "integrity": "sha512-zylZCD2rmyLOOFBFmUgtJg6UNUKmRNgXiig1XApzS2TkIbTZP827DsVEUl0ey/lskCe0uArkrEBR6ICba8p/Rw==", - "dev": true, - "requires": { - "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.4.6", - "@storybook/manager": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@types/ejs": "^3.1.1", - "@types/find-cache-dir": "^3.2.1", - "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", - "browser-assert": "^1.2.1", - "ejs": "^3.1.8", - "esbuild": "^0.18.0", - "esbuild-plugin-alias": "^0.2.1", - "express": "^4.17.3", - "find-cache-dir": "^3.0.0", - "fs-extra": "^11.1.0", - "process": "^0.11.10", - "util": "^0.12.4" - } - }, - "@storybook/builder-webpack5": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.4.6.tgz", - "integrity": "sha512-j7AyDPlUuO2GiH6riB8iGbT7blQpyVGB+rMHXPSm7v6/U7IITbNzxFwe+sSMLoFr8K1e2VXpgqQ9p3rHFey+nw==", - "dev": true, - "requires": { - "@babel/core": "^7.22.9", - "@storybook/addons": "7.4.6", - "@storybook/channels": "7.4.6", - "@storybook/client-api": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/components": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/core-webpack": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/preview": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/router": "7.4.6", - "@storybook/store": "7.4.6", - "@storybook/theming": "7.4.6", - "@swc/core": "^1.3.49", - "@types/node": "^16.0.0", - "@types/semver": "^7.3.4", - "babel-loader": "^9.0.0", - "babel-plugin-named-exports-order": "^0.0.2", - "browser-assert": "^1.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "constants-browserify": "^1.0.0", - "css-loader": "^6.7.1", - "express": "^4.17.3", - "fork-ts-checker-webpack-plugin": "^8.0.0", - "fs-extra": "^11.1.0", - "html-webpack-plugin": "^5.5.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "semver": "^7.3.7", - "style-loader": "^3.3.1", - "swc-loader": "^0.2.3", - "terser-webpack-plugin": "^5.3.1", - "ts-dedent": "^2.0.0", - "url": "^0.11.0", - "util": "^0.12.4", - "util-deprecate": "^1.0.2", - "webpack": "5", - "webpack-dev-middleware": "^6.1.1", - "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.5.0" - }, - "dependencies": { - "@storybook/addons": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.4.6.tgz", - "integrity": "sha512-c+4awrtwNlJayFdgLkEXa5H2Gj+KNlxuN+Z5oDAdZBLqXI8g0gn7eYO2F/eCSIDWdd/+zcU2uq57XPFKc8veHQ==", - "dev": true, - "requires": { - "@storybook/manager-api": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/types": "7.4.6" - } - }, - "@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/router": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.4.6.tgz", - "integrity": "sha512-Vl1esrHkcHxDKqc+HY7+6JQpBPW3zYvGk0cQ2rxVMhWdLZTAz1hss9DqzN9tFnPyfn0a1Q77EpMySkUrvWKKNQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - }, - "@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - }, - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "dev": true, - "requires": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - } - }, - "css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - } - }, - "find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "requires": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - } - }, - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "requires": { - "p-locate": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "requires": { - "p-limit": "^4.0.0" - } - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, - "requires": { - "find-up": "^6.3.0" - } - }, - "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "style-loader": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", - "dev": true - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true - } - } - }, - "@storybook/channels": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.16.tgz", - "integrity": "sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/cli": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.4.6.tgz", - "integrity": "sha512-rRwaH8pOL+FHz/pJMEkNpMH2xvZvWsrl7obBYw26NQiHmiVSAkfHJicndSN1mwc+p5w+9iXthrgzbLtSAOSvkA==", - "dev": true, - "requires": { - "@babel/core": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "@babel/types": "^7.22.5", - "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/core-server": "7.4.6", - "@storybook/csf-tools": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/telemetry": "7.4.6", - "@storybook/types": "7.4.6", - "@types/semver": "^7.3.4", - "@yarnpkg/fslib": "2.10.3", - "@yarnpkg/libzip": "2.3.0", - "chalk": "^4.1.0", - "commander": "^6.2.1", - "cross-spawn": "^7.0.3", - "detect-indent": "^6.1.0", - "envinfo": "^7.7.3", - "execa": "^5.0.0", - "express": "^4.17.3", - "find-up": "^5.0.0", - "fs-extra": "^11.1.0", - "get-npm-tarball-url": "^2.0.3", - "get-port": "^5.1.1", - "giget": "^1.0.0", - "globby": "^11.0.2", - "jscodeshift": "^0.14.0", - "leven": "^3.1.0", - "ora": "^5.4.1", - "prettier": "^2.8.0", - "prompts": "^2.4.0", - "puppeteer-core": "^2.1.1", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "simple-update-notifier": "^2.0.0", - "strip-json-comments": "^3.0.1", - "tempy": "^1.0.1", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@storybook/client-api": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-7.4.6.tgz", - "integrity": "sha512-O8yA/xEzPW9Oe3s5VJAFor2d2KwXHjUZ1gvou3o14zu/TJLgXwol0qBBr+YLRO2rcNNJ51pAIGwAT5bgmpUaeg==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/preview-api": "7.4.6" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - } - } - }, - "@storybook/client-logger": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz", - "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "global": "^4.4.0" - } - }, - "@storybook/codemod": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.4.6.tgz", - "integrity": "sha512-lxmwEpwksCaAq96APN2YlooSDfKjJ1vKzN5Ni2EqQzf2TEXl7XQjLacHd7OOaII1kfsy+D5gNG4N5wBo7Ub30g==", - "dev": true, - "requires": { - "@babel/core": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "@babel/types": "^7.22.5", - "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/types": "7.4.6", - "@types/cross-spawn": "^6.0.2", - "cross-spawn": "^7.0.3", - "globby": "^11.0.2", - "jscodeshift": "^0.14.0", - "lodash": "^4.17.21", - "prettier": "^2.8.0", - "recast": "^0.23.1" - }, - "dependencies": { - "@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "requires": { - "type-fest": "^2.19.0" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } - } - }, - "@storybook/components": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.4.6.tgz", - "integrity": "sha512-nIRBhewAgrJJVafyCzuaLx1l+YOfvvD5dOZ0JxZsxJsefOdw1jFpUqUZ5fIpQ2moyvrR0mAUFw378rBfMdHz5Q==", - "dev": true, - "requires": { - "@radix-ui/react-select": "^1.2.2", - "@radix-ui/react-toolbar": "^1.0.4", - "@storybook/client-logger": "7.4.6", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "memoizerific": "^1.11.3", - "use-resize-observer": "^9.1.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "requires": { - "type-fest": "^2.19.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } - } - }, - "@storybook/core-client": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.4.6.tgz", - "integrity": "sha512-tfgxAHeCvMcs6DsVgtb4hQSDaCHeAPJOsoyhb47eDQfk4OmxzriM0qWucJV5DePSMi+KutX/rN2u0JxfOuN68g==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/preview-api": "7.4.6" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - } - } - }, - "@storybook/core-common": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.4.6.tgz", - "integrity": "sha512-05MJFmOM86qvTLtgDskokIFz9txe0Lbhq4L3by1FtF0GwgH+p+W6I94KI7c6ANER+kVZkXQZhiRzwBFnVTW+Cg==", - "dev": true, - "requires": { - "@storybook/core-events": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/types": "7.4.6", - "@types/find-cache-dir": "^3.2.1", - "@types/node": "^16.0.0", - "@types/node-fetch": "^2.6.4", - "@types/pretty-hrtime": "^1.0.0", - "chalk": "^4.1.0", - "esbuild": "^0.18.0", - "esbuild-register": "^3.4.0", - "file-system-cache": "2.3.0", - "find-cache-dir": "^3.0.0", - "find-up": "^5.0.0", - "fs-extra": "^11.1.0", - "glob": "^10.0.0", - "handlebars": "^4.7.7", - "lazy-universal-dotenv": "^4.0.0", - "node-fetch": "^2.0.0", - "picomatch": "^2.3.0", - "pkg-dir": "^5.0.0", - "pretty-hrtime": "^1.0.3", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@storybook/core-events": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.16.tgz", - "integrity": "sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==", - "dev": true, - "requires": { - "core-js": "^3.8.2" - } - }, - "@storybook/core-server": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.4.6.tgz", - "integrity": "sha512-jqmRTGCJ1W0WReImivkisPVaLFT5sjtLnFoAk0feHp6QS5j7EYOPN7CYzliyQmARWTLUEXOVaFf3VD6nJZQhJQ==", - "dev": true, - "requires": { - "@aw-web-design/x-default-browser": "1.4.126", - "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.4.6", - "@storybook/channels": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.4.6", - "@storybook/docs-mdx": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/manager": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/telemetry": "7.4.6", - "@storybook/types": "7.4.6", - "@types/detect-port": "^1.3.0", - "@types/node": "^16.0.0", - "@types/pretty-hrtime": "^1.0.0", - "@types/semver": "^7.3.4", - "better-opn": "^3.0.2", - "chalk": "^4.1.0", - "cli-table3": "^0.6.1", - "compression": "^1.7.4", - "detect-port": "^1.3.0", - "express": "^4.17.3", - "fs-extra": "^11.1.0", - "globby": "^11.0.2", - "ip": "^2.0.0", - "lodash": "^4.17.21", - "open": "^8.4.0", - "pretty-hrtime": "^1.0.3", - "prompts": "^2.4.0", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1", - "ts-dedent": "^2.0.0", - "util": "^0.12.4", - "util-deprecate": "^1.0.2", - "watchpack": "^2.2.0", - "ws": "^8.2.3" - }, - "dependencies": { - "@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "requires": { - "type-fest": "^2.19.0" - } - }, - "@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@storybook/core-webpack": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.4.6.tgz", - "integrity": "sha512-EqQDmd+vKAWOAjoe539LsfP8WvQG9V9i1priMA53u1FOEged8o0NBtRiRy2+JDdUSiGUdpe/X5+V/TyyQw/KWw==", - "dev": true, - "requires": { - "@storybook/core-common": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/types": "7.4.6", - "@types/node": "^16.0.0", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - } - } - }, - "@storybook/csf": { - "version": "0.0.2--canary.4566f4d.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", - "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "@storybook/csf-plugin": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.4.6.tgz", - "integrity": "sha512-yi7Qa4NSqKOyiJTWCxlB0ih2ijXq6oY5qZKW6MuMMBP14xJNRGLbH5KabpfXgN2T7YECcOWG1uWaGj2veJb1KA==", - "dev": true, - "requires": { - "@storybook/csf-tools": "7.4.6", - "unplugin": "^1.3.1" - } - }, - "@storybook/csf-tools": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.4.6.tgz", - "integrity": "sha512-ocKpcIUtTBy6hlLY34RUFQyX403cWpB2gGfqvkHbpGe2BQj7EyV0zpWnjsfVxvw+M9OWlCdxHWDOPUgXM33ELw==", - "dev": true, - "requires": { - "@babel/generator": "^7.22.9", - "@babel/parser": "^7.22.7", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "@storybook/csf": "^0.1.0", - "@storybook/types": "7.4.6", - "fs-extra": "^11.1.0", - "recast": "^0.23.1", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "requires": { - "type-fest": "^2.19.0" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } - } - }, - "@storybook/docs-mdx": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz", - "integrity": "sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==", - "dev": true - }, - "@storybook/docs-tools": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.4.6.tgz", - "integrity": "sha512-nZj1L/8WwKWWJ41FW4MaKGajZUtrhnr9UwflRCkQJaWhAKmDfOb5M5TqI93uCOULpFPOm5wpoMBz2IHInQ2Lrg==", - "dev": true, - "requires": { - "@storybook/core-common": "7.4.6", - "@storybook/preview-api": "7.4.6", - "@storybook/types": "7.4.6", - "@types/doctrine": "^0.0.3", - "doctrine": "^3.0.0", - "lodash": "^4.17.21" - } - }, - "@storybook/global": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", - "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", - "dev": true - }, - "@storybook/instrumenter": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.4.6.tgz", - "integrity": "sha512-K5atRoVFCl6HEgkSxIbwygpzgE/iROc7BrtJ3z3a7E70sanFr6Jxt6Egu6fz2QkL3ef4EWpXMnle2vhEfG29pA==", - "dev": true, - "requires": { - "@storybook/channels": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.4.6" - }, - "dependencies": { - "@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - } - } - }, - "@storybook/manager": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.4.6.tgz", - "integrity": "sha512-kA1hUDxpn1i2SO9OinvLvVXDeL4xgJkModp+pbE8IXv4NJWReNq1ecMeQCzPLS3Sil2gnrullQ9uYXsnZ9bxxA==", - "dev": true - }, - "@storybook/manager-api": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.4.6.tgz", - "integrity": "sha512-inrm3DIbCp8wjXSN/wK6e6i2ysQ/IEmtC7IN0OJ7vdrp+USCooPT448SQTUmVctUGCFmOU3fxXByq8g77oIi7w==", - "dev": true, - "requires": { - "@storybook/channels": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/router": "7.4.6", - "@storybook/theming": "7.4.6", - "@storybook/types": "7.4.6", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "semver": "^7.3.7", - "store2": "^2.14.2", - "telejson": "^7.2.0", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "requires": { - "type-fest": "^2.19.0" - } - }, - "@storybook/router": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.4.6.tgz", - "integrity": "sha512-Vl1esrHkcHxDKqc+HY7+6JQpBPW3zYvGk0cQ2rxVMhWdLZTAz1hss9DqzN9tFnPyfn0a1Q77EpMySkUrvWKKNQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - } - }, - "@storybook/theming": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", - "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", - "dev": true, - "requires": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@storybook/mdx2-csf": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz", - "integrity": "sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==", - "dev": true - }, - "@storybook/node-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.4.6.tgz", - "integrity": "sha512-djZb310Q27GviDug1XBv0jOEDLCiwr4hhDE0aifCEKZpfNCi/EaP31nbWimFzZwxu4hE/YAPWExzScruR1zw9Q==", - "dev": true - }, - "@storybook/postinstall": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.4.6.tgz", - "integrity": "sha512-TqI5BucPAGRWrkh55BYiG2/gHLFtC0In4cuu0GsUzB/1jc4i51npLRorCwhmT7r7YliGl5F7JaP0Bni/qHN3Lg==", - "dev": true - }, - "@storybook/preset-react-webpack": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.4.6.tgz", - "integrity": "sha512-FfJvlk3bJfg66t06YLiyu+1o/DZN3uNfFP37zv5cJux7TpdmJRV/4m9LKQPJOvcnWBQYem8xX8k5cRS29vdW5g==", - "dev": true, - "requires": { - "@babel/preset-flow": "^7.22.5", - "@babel/preset-react": "^7.22.5", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5", - "@storybook/core-webpack": "7.4.6", - "@storybook/docs-tools": "7.4.6", - "@storybook/node-logger": "7.4.6", - "@storybook/react": "7.4.6", - "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", - "@types/node": "^16.0.0", - "@types/semver": "^7.3.4", - "babel-plugin-add-react-displayname": "^0.0.5", - "babel-plugin-react-docgen": "^4.2.1", - "fs-extra": "^11.1.0", - "react-refresh": "^0.11.0", - "semver": "^7.3.7", - "webpack": "5" - }, - "dependencies": { - "@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@storybook/preview": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.4.6.tgz", - "integrity": "sha512-2RPXusJ4CTDrIipIKKvbotD7fP0+8VzoFjImunflIrzN9rni+2rq5eMjqlXAaB+77w064zIR4uDUzI9fxsMDeQ==", - "dev": true - }, - "@storybook/preview-api": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.6.tgz", - "integrity": "sha512-byUS/Opt3ytWD4cWz3sNEKw5Yks8MkQgRN+GDSyIomaEAQkLAM0rchPC0MYjwCeUSecV7IIQweNX5RbV4a34BA==", - "dev": true, - "requires": { - "@storybook/channels": "7.4.6", - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/types": "7.4.6", - "@types/qs": "^6.9.5", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "synchronous-promise": "^2.0.15", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "requires": { - "type-fest": "^2.19.0" - } - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } - } - }, - "@storybook/react": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.4.6.tgz", - "integrity": "sha512-w0dVo64baFFPTGpUOWFqkKsu6pQincoymegSNgqaBd5DxEyMDRiRoTWSJHMKE9BwgE8SyWhRkP1ak1mkccSOhQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-client": "7.4.6", - "@storybook/docs-tools": "7.4.6", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.4.6", - "@storybook/react-dom-shim": "7.4.6", - "@storybook/types": "7.4.6", - "@types/escodegen": "^0.0.6", - "@types/estree": "^0.0.51", - "@types/node": "^16.0.0", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", - "escodegen": "^2.1.0", - "html-tags": "^3.1.0", - "lodash": "^4.17.21", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^15.0.0", - "ts-dedent": "^2.0.0", - "type-fest": "~2.19", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "@types/node": { - "version": "16.18.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.23.tgz", - "integrity": "sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g==", - "dev": true - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } - } - }, - "@storybook/react-docgen-typescript-plugin": { - "version": "1.0.6--canary.9.0c3f3b7.0", - "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz", - "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "endent": "^2.0.1", - "find-cache-dir": "^3.3.1", - "flat-cache": "^3.0.4", - "micromatch": "^4.0.2", - "react-docgen-typescript": "^2.2.2", - "tslib": "^2.0.0" - } - }, - "@storybook/react-dom-shim": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.4.6.tgz", - "integrity": "sha512-DSq8l9FDocUF1ooVI+TF83pddj1LynE/Hv0/y8XZhc3IgJ/HkuOQuUmfz29ezgfAi9gFYUR8raTIBi3/xdoRmw==", - "dev": true - }, - "@storybook/react-webpack5": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.4.6.tgz", - "integrity": "sha512-OSwf+E2tRcfBmzCH+WwM7JlfEYjg5Womi1yrtotfcjVXAU6ubHOk2G87zsrKLp/TeCOFM2aHohHBTyWUCejQKQ==", - "dev": true, - "requires": { - "@storybook/builder-webpack5": "7.4.6", - "@storybook/preset-react-webpack": "7.4.6", - "@storybook/react": "7.4.6", - "@types/node": "^16.0.0" - }, - "dependencies": { - "@types/node": { - "version": "16.18.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.58.tgz", - "integrity": "sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==", - "dev": true - } - } - }, - "@storybook/router": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.16.tgz", - "integrity": "sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "@storybook/source-loader": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-7.6.4.tgz", - "integrity": "sha512-1wb/3bVpJZ/3r3qUrLK8jb0kLuvwjNi5T1kci5huREdc1TrIxZXoPw9EiyjcMCZzCURkoj7euNLrLHGyzdBTLg==", - "dev": true, - "requires": { - "@storybook/csf": "^0.1.2", - "@storybook/types": "7.6.4", - "estraverse": "^5.2.0", - "lodash": "^4.17.21", - "prettier": "^2.8.0" - }, - "dependencies": { - "@storybook/channels": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.4.tgz", - "integrity": "sha512-Z4PY09/Czl70ap4ObmZ4bgin+EQhPaA3HdrEDNwpnH7A9ttfEO5u5KThytIjMq6kApCCihmEPDaYltoVrfYJJA==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "@storybook/csf": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.2.tgz", - "integrity": "sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==", - "dev": true, - "requires": { - "type-fest": "^2.19.0" - } - }, - "@storybook/types": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.4.tgz", - "integrity": "sha512-qyiiXPCvol5uVgfubcIMzJBA0awAyFPU+TyUP1mkPYyiTHnsHYel/mKlSdPjc8a97N3SlJXHOCx41Hde4IyJgg==", - "dev": true, - "requires": { - "@storybook/channels": "7.6.4", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" - } - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } - } - }, - "@storybook/store": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/store/-/store-7.4.6.tgz", - "integrity": "sha512-tlm9rQ+djkYjEyCuEjaUv+c+jVgwnMEF9mZxnOoA6zrzU2g0S/1oE9/MdVLByGbH67U0NuuP0FcvsWLhAOQzjQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/preview-api": "7.4.6" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - } - } - }, - "@storybook/telemetry": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.4.6.tgz", - "integrity": "sha512-c8p/C1NIH8EMBviZkBCx8MMDk6rrITJ+b29DEp5MaWSRlklIVyhGiC4RPIRv6sxJwlD41PnqWVFtfu2j2eXLdQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-common": "7.4.6", - "@storybook/csf-tools": "7.4.6", - "chalk": "^4.1.0", - "detect-package-manager": "^2.0.1", - "fetch-retry": "^5.0.2", - "fs-extra": "^11.1.0", - "read-pkg-up": "^7.0.1" - }, - "dependencies": { - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@storybook/testing-library": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.2.2.tgz", - "integrity": "sha512-L8sXFJUHmrlyU2BsWWZGuAjv39Jl1uAqUHdxmN42JY15M4+XCMjGlArdCCjDe1wpTSW6USYISA9axjZojgtvnw==", - "dev": true, - "requires": { - "@testing-library/dom": "^9.0.0", - "@testing-library/user-event": "^14.4.0", - "ts-dedent": "^2.2.0" - }, - "dependencies": { - "@testing-library/dom": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", - "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@storybook/theming": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", - "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/types": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.6.tgz", - "integrity": "sha512-6QLXtMVsFZFpzPkdGWsu/iuc8na9dnS67AMOBKm5qCLPwtUJOYkwhMdFRSSeJthLRpzV7JLAL8Kwvl7MFP3QSw==", - "dev": true, - "requires": { - "@storybook/channels": "7.4.6", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" - }, - "dependencies": { - "@storybook/channels": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", - "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.4.6", - "@storybook/core-events": "7.4.6", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - } - }, - "@storybook/client-logger": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", - "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", - "dev": true, - "requires": { - "@storybook/global": "^5.0.0" - } - }, - "@storybook/core-events": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", - "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", - "dev": true, - "requires": { - "ts-dedent": "^2.0.0" - } - }, - "telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "requires": { - "memoizerific": "^1.11.3" - } - } - } - }, - "@swc/core": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.93.tgz", - "integrity": "sha512-690GRr1wUGmGYZHk7fUduX/JUwViMF2o74mnZYIWEcJaCcd9MQfkhsxPBtjeg6tF+h266/Cf3RPYhsFBzzxXcA==", - "dev": true, - "requires": { - "@swc/core-darwin-arm64": "1.3.93", - "@swc/core-darwin-x64": "1.3.93", - "@swc/core-linux-arm-gnueabihf": "1.3.93", - "@swc/core-linux-arm64-gnu": "1.3.93", - "@swc/core-linux-arm64-musl": "1.3.93", - "@swc/core-linux-x64-gnu": "1.3.93", - "@swc/core-linux-x64-musl": "1.3.93", - "@swc/core-win32-arm64-msvc": "1.3.93", - "@swc/core-win32-ia32-msvc": "1.3.93", - "@swc/core-win32-x64-msvc": "1.3.93", - "@swc/counter": "^0.1.1", - "@swc/types": "^0.1.5" - } - }, - "@swc/core-darwin-arm64": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.93.tgz", - "integrity": "sha512-gEKgk7FVIgltnIfDO6GntyuQBBlAYg5imHpRgLxB1zSI27ijVVkksc6QwISzFZAhKYaBWIsFSVeL9AYSziAF7A==", - "dev": true, - "optional": true - }, - "@swc/counter": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", - "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", - "dev": true - }, - "@swc/types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", - "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", - "dev": true - }, - "@testing-library/dom": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz", - "integrity": "sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@testing-library/jest-dom": { - "version": "5.16.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", - "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", - "dev": true, - "requires": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@testing-library/react": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", - "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.0.0", - "@types/react-dom": "<18.0.0" - } - }, - "@testing-library/user-event": { - "version": "14.5.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.1.tgz", - "integrity": "sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg==", - "dev": true - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true - }, - "@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "@types/aria-query": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", - "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", - "dev": true - }, - "@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", - "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.36", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", - "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/cross-spawn": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.3.tgz", - "integrity": "sha512-BDAkU7WHHRHnvBf5z89lcvACsvkz/n7Tv+HyD/uW76O29HoH1Tk/W6iQrepaZVbisvlEek4ygwT8IW7ow9XLAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dev": true, - "requires": { - "@types/ms": "*" - } - }, - "@types/detect-port": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.3.tgz", - "integrity": "sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg==", - "dev": true - }, - "@types/doctrine": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", - "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", - "dev": true - }, - "@types/ejs": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.3.tgz", - "integrity": "sha512-mv5T/JI/bu+pbfz1o+TLl1NF0NIBbjS0Vl6Ppz1YY9DkXfzZT0lelXpfS5i3ZS3U/p90it7uERQpBvLYoK8e4A==", - "dev": true - }, - "@types/emscripten": { - "version": "1.39.8", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.8.tgz", - "integrity": "sha512-Rk0HKcMXFUuqT32k1kXHZWgxiMvsyYsmlnjp0rLKa0MMoqXLE3T9dogDBTRfuc3SAsXu97KD3k4SKR1lHqd57w==", - "dev": true - }, - "@types/escodegen": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", - "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", - "dev": true - }, - "@types/eslint": { - "version": "8.44.4", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.4.tgz", - "integrity": "sha512-lOzjyfY/D9QR4hY9oblZ76B90MYTB3RrQ4z2vBIJKj9ROCRqdkYl2gSUx1x1a4IWPjKJZLL4Aw1Zfay7eMnmnA==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", - "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "@types/express": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.19.tgz", - "integrity": "sha512-UtOfBtzN9OvpZPPbnnYunfjM7XCI4jyk1NvnFhTVz5krYAnW4o5DCoIekvms+8ApqhB4+9wSge1kBijdfTSmfg==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.37", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", - "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/find-cache-dir": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz", - "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", - "dev": true - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dev": true, - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "@types/http-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", - "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", - "dev": true - }, - "@types/is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", - "dev": true, - "requires": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.194", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz", - "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", - "dev": true - }, - "@types/lodash.clonedeep": { - "version": "4.5.7", - "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.7.tgz", - "integrity": "sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/mdast": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz", - "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/mdx": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.8.tgz", - "integrity": "sha512-r7/zWe+f9x+zjXqGxf821qz++ld8tp6Z4jUS6qmPZUXH6tfh4riXOhAqb12tWGWAevCFtMt1goLWkQMqIJKpsA==", - "dev": true - }, - "@types/mime": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", - "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", - "dev": true - }, - "@types/mime-types": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.2.tgz", - "integrity": "sha512-q9QGHMGCiBJCHEvd4ZLdasdqXv570agPsUW0CeIm/B8DzhxsYMerD0l3IlI+EQ1A2RWHY2mmM9x1YIuuWxisCg==", - "dev": true - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, - "@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true - }, - "@types/node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^4.0.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "@types/pretty-hrtime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", - "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "@types/qs": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", - "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", - "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", - "dev": true - }, - "@types/react": { - "version": "17.0.58", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", - "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", - "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", - "dev": true, - "requires": { - "@types/react": "^17" - } - }, - "@types/react-slider": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.6.tgz", - "integrity": "sha512-RS8XN5O159YQ6tu3tGZIQz1/9StMLTg/FCIPxwqh2gwVixJnlfIodtVx+fpXVMZHe7A58lAX1Q4XTgAGOQaCQg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "@types/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", - "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/serve-static": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", - "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", - "dev": true, - "requires": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/styled-components": { - "version": "5.1.26", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.26.tgz", - "integrity": "sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw==", - "dev": true, - "requires": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "@types/testing-library__jest-dom": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", - "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", - "dev": true, - "requires": { - "@types/jest": "*" - } - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true - }, - "@types/webpack-env": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz", - "integrity": "sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.28", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.28.tgz", - "integrity": "sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz", - "integrity": "sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.0", - "@typescript-eslint/type-utils": "5.59.0", - "@typescript-eslint/utils": "5.59.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", - "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.59.0", - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/typescript-estree": "5.59.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz", - "integrity": "sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/visitor-keys": "5.59.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.0.tgz", - "integrity": "sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.59.0", - "@typescript-eslint/utils": "5.59.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.0.tgz", - "integrity": "sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz", - "integrity": "sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/visitor-keys": "5.59.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.0.tgz", - "integrity": "sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.0", - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/typescript-estree": "5.59.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz", - "integrity": "sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.59.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@usulpro/react-json-view": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@usulpro/react-json-view/-/react-json-view-2.0.1.tgz", - "integrity": "sha512-X8Ik4JmZF2Cu7vZTJQwHIbDqNaJEUEGZmdAPxKe4Ed+Xa3dyVTAeA9ea/nTNCzKRTZBIxvJFXvibpglpJ136BA==", - "dev": true, - "requires": { - "color-string": "^1.5.3", - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^6.1.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "@yarnpkg/esbuild-plugin-pnp": { - "version": "3.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", - "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "@yarnpkg/fslib": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", - "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", - "dev": true, - "requires": { - "@yarnpkg/libzip": "^2.3.0", - "tslib": "^1.13.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@yarnpkg/libzip": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", - "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", - "dev": true, - "requires": { - "@types/emscripten": "^1.39.6", - "tslib": "^1.13.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - } - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "app-root-dir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", - "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "aria-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", - "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", - "dev": true, - "requires": { - "tslib": "^2.0.0" - } - }, - "aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "attr-accept": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", - "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", - "dev": true - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true - }, - "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dev": true, - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-add-react-displayname": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", - "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", - "dev": true - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-named-exports-order": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz", - "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==", - "dev": true - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", - "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", - "semver": "^6.3.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz", - "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.3", - "core-js-compat": "^3.32.2" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", - "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.3" - } - }, - "babel-plugin-react-docgen": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", - "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", - "dev": true, - "requires": { - "ast-types": "^0.14.2", - "lodash": "^4.17.15", - "react-docgen": "^5.0.0" - }, - "dependencies": { - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - } - } - }, - "babel-plugin-styled-components": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.1.tgz", - "integrity": "sha512-c8lJlszObVQPguHkI+akXv8+Jgb9Ccujx0EetL7oIvwU100LxO6XAGe45qry37wUL40a5U9f23SYrivro2XKhA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.21", - "picomatch": "^2.3.0" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", - "dev": true - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "dev": true, - "requires": { - "open": "^8.0.4" - } - }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "requires": { - "big-integer": "^1.6.44" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-assert": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", - "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", - "dev": true, - "requires": { - "pako": "~0.2.0" - } - }, - "browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "c8": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz", - "integrity": "sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - } - }, - "v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001549", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz", - "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==", - "dev": true - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true - }, - "ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "dev": true - }, - "character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "dev": true - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", - "dev": true - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-name-list": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/color-name-list/-/color-name-list-4.15.0.tgz", - "integrity": "sha512-4P3pFob8w6LNnku94oIacj8suCfhOLmY+25bmfoOwqFtuhLTD4Oux+/aUBdZLcvLK3fHrBe6XrzAU2IbwoWnQA==", - "dev": true - }, - "color-parse": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", - "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", - "dev": true, - "requires": { - "color-name": "^1.0.0" - } - }, - "color-rgba": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", - "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", - "dev": true, - "requires": { - "color-parse": "^1.4.2", - "color-space": "^2.0.0" - } - }, - "color-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.0.tgz", - "integrity": "sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==", - "dev": true - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "color-stringify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/color-stringify/-/color-stringify-1.2.1.tgz", - "integrity": "sha512-DMEEe6iVahjHKTYCywfkLRArls2WopRc3e6ucR/HEL5eeF2v708bc5MumOn2VWblTyJrCIBpjRSzTbmNtlMcxA==", - "dev": true, - "requires": { - "color-name": "^1.0.0" - } - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "condense-newlines": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", - "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-whitespace": "^0.3.0", - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "core-js": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz", - "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==", - "dev": true - }, - "core-js-compat": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", - "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", - "dev": true, - "requires": { - "browserslist": "^4.22.1" - } - }, - "core-js-pure": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.33.0.tgz", - "integrity": "sha512-FKSIDtJnds/YFIEaZ4HszRX7hkxGpNKM7FC9aJ9WLJbSd3lD4vOltFuVIBLR8asSx9frkTSqL0dw90SKQxgKrg==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "crelt": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz", - "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "requires": { - "node-fetch": "2.6.7" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "dev": true - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", - "dev": true - }, - "css-declaration-sorter": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", - "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", - "dev": true - }, - "css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "postcss": { - "version": "8.4.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.22.tgz", - "integrity": "sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "css-mediaquery": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", - "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==", - "dev": true - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-to-react-native": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", - "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", - "dev": true, - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssfontparser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cssfontparser/-/cssfontparser-1.2.1.tgz", - "integrity": "sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg==", - "dev": true - }, - "cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dev": true, - "requires": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "dayjs": { - "version": "1.11.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", - "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dev": true, - "requires": { - "character-entities": "^2.0.0" - }, - "dependencies": { - "character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true - } - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "requires": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - } - }, - "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "defu": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.2.tgz", - "integrity": "sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==", - "dev": true - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "dev": true - }, - "detect-package-manager": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", - "integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==", - "dev": true, - "requires": { - "execa": "^5.1.1" - } - }, - "detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "4" - } - }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "dompurify": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.5.tgz", - "integrity": "sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA==", - "dev": true - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "dev": true - }, - "dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", - "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", - "dev": true, - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.554", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz", - "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==", - "dev": true - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "endent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", - "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", - "dev": true, - "requires": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.5" - } - }, - "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "requires": { - "stackframe": "^1.3.4" - } - }, - "es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - } - }, - "es-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", - "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", - "dev": true - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "esbuild-plugin-alias": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz", - "integrity": "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==", - "dev": true - }, - "esbuild-register": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", - "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", - "dev": true, - "requires": { - "debug": "^4.3.4" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" - } - }, - "eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", - "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.38.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", - "dev": true - }, - "eslint-mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-2.0.5.tgz", - "integrity": "sha512-1ZzcJwJNfladtuK+uuG/MdC0idc1e3d1vCI2STOq/pLcJBGuao2biWh90vEh2M93zDiNoHJGUIU7UAxupiiHFw==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "cosmiconfig": "^7.0.1", - "espree": "^9.4.0", - "estree-util-visit": "^1.2.0", - "remark-mdx": "^2.1.3", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "synckit": "^0.8.4", - "tslib": "^2.4.0", - "unified": "^10.1.2", - "unist-util-visit": "^4.1.1", - "uvu": "^0.5.6", - "vfile": "^5.3.4" - }, - "dependencies": { - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "remark-mdx": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", - "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", - "dev": true, - "requires": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" - } - }, - "remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "eslint-plugin-markdown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.0.tgz", - "integrity": "sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==", - "dev": true, - "requires": { - "mdast-util-from-markdown": "^0.8.5" - } - }, - "eslint-plugin-mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-2.0.5.tgz", - "integrity": "sha512-j2xN97jSlc5IoH94rJTHqYMztl46+hHzyC8Zqjx+OI1Rvv33isyf8xSSBHN6f0z8IJmgPgGsb/fH90JbvKplXg==", - "dev": true, - "requires": { - "eslint-mdx": "^2.0.5", - "eslint-plugin-markdown": "^3.0.0", - "remark-mdx": "^2.1.3", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "tslib": "^2.4.0", - "unified": "^10.1.2", - "vfile": "^5.3.4" - }, - "dependencies": { - "mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "remark-mdx": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", - "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", - "dev": true, - "requires": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" - } - }, - "remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } - } - }, - "eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "dev": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", - "dev": true - }, - "espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" - }, - "dependencies": { - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "estree-to-babel": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", - "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.2.0", - "c8": "^7.6.0" - } - }, - "estree-util-is-identifier-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", - "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", - "dev": true - }, - "estree-util-visit": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz", - "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==", - "dev": true, - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^2.0.0" - } - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "dev": true, - "requires": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dev": true, - "requires": { - "fbjs": "^3.0.0" - } - }, - "fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "dev": true, - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "dev": true - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "fetch-retry": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", - "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==", - "dev": true - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-selector": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", - "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", - "dev": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "file-system-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", - "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", - "dev": true, - "requires": { - "fs-extra": "11.1.1", - "ramda": "0.29.0" - } - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "flow-parser": { - "version": "0.218.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.218.1.tgz", - "integrity": "sha512-46xpXyI4Bh3K2ej+NF3V5+pAsDlB5P0DWpgIIy/0/R7ujK0syfI/xfKDCOlq2sxtfUyPrr4rxfS2Da7yWdTdwg==", - "dev": true - }, - "flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", - "dev": true, - "requires": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", - "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "generic-names": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", - "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", - "dev": true, - "requires": { - "loader-utils": "^3.2.0" - }, - "dependencies": { - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true - } - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "dev": true - }, - "get-npm-tarball-url": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.0.3.tgz", - "integrity": "sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "giget": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.3.tgz", - "integrity": "sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==", - "dev": true, - "requires": { - "colorette": "^2.0.20", - "defu": "^6.1.2", - "https-proxy-agent": "^7.0.2", - "mri": "^1.2.0", - "node-fetch-native": "^1.4.0", - "pathe": "^1.1.1", - "tar": "^6.2.0" - }, - "dependencies": { - "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dev": true, - "requires": { - "debug": "^4.3.4" - } - }, - "https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "dev": true, - "requires": { - "agent-base": "^7.0.2", - "debug": "4" - } - } - } - }, - "github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "gunzip-maybe": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", - "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", - "dev": true, - "requires": { - "browserify-zlib": "^0.1.4", - "is-deflate": "^1.0.0", - "is-gzip": "^1.0.0", - "peek-stream": "^1.1.0", - "pumpify": "^1.3.3", - "through2": "^2.0.3" - } - }, - "handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dev": true, - "requires": { - "react-is": "^16.7.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", - "dev": true - }, - "html-dom-parser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-2.0.0.tgz", - "integrity": "sha512-PwVjg12yfWunpH2WjwjaYNKcZyKKm20kclTfMQohiRzfgYiXX0dR7nXIIKnHneghMDvB0rKFZLEAe11ykOfpcg==", - "dev": true, - "requires": { - "domhandler": "4.3.1", - "htmlparser2": "7.2.0" - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - } - }, - "html-react-parser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-2.0.0.tgz", - "integrity": "sha512-AI1lhybWGi8w4QkGtEIS3iSGAjeFGaonxl/+CzqzCeNT3g3z/yx2NKsA93trnv2BLjhe+juGLmLeTSUkyYWk9Q==", - "dev": true, - "requires": { - "domhandler": "4.3.1", - "html-dom-parser": "2.0.0", - "react-property": "2.0.0", - "style-to-js": "1.1.1" - } - }, - "html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true - }, - "html-webpack-plugin": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", - "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - }, - "dependencies": { - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "dev": true - } - } - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", - "dev": true - }, - "hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", - "dev": true - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dev": true, - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "immer": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", - "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==" - }, - "import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", - "dev": true, - "requires": { - "import-from": "^3.0.0" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "dev": true - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dev": true, - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "requires": { - "builtin-modules": "^3.3.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true - }, - "is-deflate": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", - "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", - "dev": true - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", - "dev": true - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "dev": true - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "is-whitespace": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", - "integrity": "sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - } - }, - "jest-canvas-mock": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.5.0.tgz", - "integrity": "sha512-s2bmY2f22WPMzhB2YA93kiyf7CAfWAnV/sFfY9s48IVOrGmwui1eSFluDPesq1M+7tSC1hJAit6mzO0ZNXvVBA==", - "dev": true, - "requires": { - "cssfontparser": "^1.2.1", - "moo-color": "^1.0.2" - } - }, - "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-junit": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", - "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2", - "xml": "^1.0.1" - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true - }, - "jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true - }, - "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "dependencies": { - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "jest-styled-components": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/jest-styled-components/-/jest-styled-components-7.1.1.tgz", - "integrity": "sha512-OUq31R5CivBF8oy81dnegNQrRW13TugMol/Dz6ZnFfEyo03exLASod7YGwyHGuayYlKmCstPtz0RQ1+NrAbIIA==", - "dev": true, - "requires": { - "@adobe/css-tools": "^4.0.1" - } - }, - "jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-beautify": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.7.tgz", - "integrity": "sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A==", - "dev": true, - "requires": { - "config-chain": "^1.1.13", - "editorconfig": "^0.15.3", - "glob": "^8.0.3", - "nopt": "^6.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", - "dev": true, - "requires": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "dev": true, - "requires": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true - }, - "lazy-universal-dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz", - "integrity": "sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==", - "dev": true, - "requires": { - "app-root-dir": "^1.0.2", - "dotenv": "^16.0.0", - "dotenv-expand": "^10.0.0" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "lint-staged": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", - "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.16", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^5.1.1", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.5.0", - "string-argv": "^0.3.1", - "supports-color": "^9.2.2", - "yaml": "^1.10.2" - }, - "dependencies": { - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true - }, - "supports-color": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.3.1.tgz", - "integrity": "sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==", - "dev": true - } - } - }, - "listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true - }, - "lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lottie-colorify": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/lottie-colorify/-/lottie-colorify-0.8.0.tgz", - "integrity": "sha512-xvaKRYiRMR5wWgUksZ2LsUOkQILhVnAPAUPmYSTjGMOK1m1DOHOyzYSfCKZBURiqhFb+VokkHfMWDKg3ffCXTw==", - "dev": true, - "requires": { - "@types/lodash.clonedeep": "^4.5.6", - "lodash.clonedeep": "^4.5.0" - } - }, - "lottie-react": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-2.4.0.tgz", - "integrity": "sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w==", - "dev": true, - "requires": { - "lottie-web": "^5.10.2" - } - }, - "lottie-web": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.11.0.tgz", - "integrity": "sha512-9vSt0AtdOH98GKDXwD5LPfFg9Pcmxt5+1BllAbudKM5iqPxpJnJUfuGaP45OyudDrESCOBgsjnntVUTygBNlzw==", - "dev": true - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true - }, - "magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-or-similar": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", - "dev": true - }, - "markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", - "dev": true - }, - "markdown-to-jsx": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz", - "integrity": "sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==", - "dev": true - }, - "matchmediaquery": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz", - "integrity": "sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==", - "dev": true, - "requires": { - "css-mediaquery": "^0.1.2" - } - }, - "material-colors": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", - "dev": true - }, - "mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-find-and-replace": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", - "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true - }, - "unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "mdast-util-gfm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", - "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==", - "dev": true, - "requires": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-gfm-autolink-literal": "^1.0.0", - "mdast-util-gfm-footnote": "^1.0.0", - "mdast-util-gfm-strikethrough": "^1.0.0", - "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "dependencies": { - "mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } - } - }, - "mdast-util-gfm-autolink-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz", - "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-find-and-replace": "^2.0.0", - "micromark-util-character": "^1.0.0" - } - }, - "mdast-util-gfm-footnote": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz", - "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-util-normalize-identifier": "^1.0.0" - } - }, - "mdast-util-gfm-strikethrough": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz", - "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - } - }, - "mdast-util-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz", - "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "dependencies": { - "mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } - } - }, - "mdast-util-gfm-task-list-item": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz", - "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - } - }, - "mdast-util-mdx": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", - "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", - "dev": true, - "requires": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdx-jsx": "^2.0.0", - "mdast-util-mdxjs-esm": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "dependencies": { - "mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } - } - }, - "mdast-util-mdx-expression": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", - "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", - "dev": true, - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "dependencies": { - "mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } - } - }, - "mdast-util-mdx-jsx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.2.tgz", - "integrity": "sha512-o9vBCYQK5ZLGEj3tCGISJGjvafyHRVJlZmfJzSE7xjiogSzIeph/Z4zMY65q4WGRMezQBeAwPlrdymDYYYx0tA==", - "dev": true, - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "ccount": "^2.0.0", - "mdast-util-from-markdown": "^1.1.0", - "mdast-util-to-markdown": "^1.3.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "dependencies": { - "character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true - }, - "character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true - }, - "character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "dev": true - }, - "is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "dev": true - }, - "is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dev": true, - "requires": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - } - }, - "is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "dev": true - }, - "is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "dev": true - }, - "mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - } - }, - "unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-remove-position": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", - "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "mdast-util-mdxjs-esm": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", - "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", - "dev": true, - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "dependencies": { - "mdast-util-from-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz", - "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "micromark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", - "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", - "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } - } - }, - "mdast-util-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unist-util-is": "^5.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } - } - }, - "mdast-util-to-markdown": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", - "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "dependencies": { - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - }, - "zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true - } - } - }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "dev": true - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.4" - } - }, - "memoizerific": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", - "dev": true, - "requires": { - "map-or-similar": "^1.5.0" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "requires": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", - "dev": true, - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", - "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", - "dev": true, - "requires": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-footnote": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-autolink-literal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", - "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-footnote": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", - "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", - "dev": true, - "requires": { - "micromark-core-commonmark": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-strikethrough": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", - "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", - "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", - "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-tagfilter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", - "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", - "dev": true, - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-task-list-item": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", - "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-mdx-expression": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.4.tgz", - "integrity": "sha512-TCgLxqW6ReQ3AJgtj1P0P+8ZThBTloLbeb7jNaqr6mCOLDpxUiBFE/9STgooMZttEwOQu5iEcCCa3ZSDhY9FGw==", - "dev": true, - "requires": { - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-mdx-jsx": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", - "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", - "dev": true, - "requires": { - "@types/acorn": "^4.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - } - }, - "micromark-extension-mdx-md": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", - "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", - "dev": true, - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-mdxjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", - "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", - "dev": true, - "requires": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^1.0.0", - "micromark-extension-mdx-jsx": "^1.0.0", - "micromark-extension-mdx-md": "^1.0.0", - "micromark-extension-mdxjs-esm": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - } - } - }, - "micromark-extension-mdxjs-esm": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", - "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", - "dev": true, - "requires": { - "micromark-core-commonmark": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.1.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - } - }, - "micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", - "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-factory-mdx-expression": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.7.tgz", - "integrity": "sha512-QAdFbkQagTZ/eKb8zDGqmjvgevgJH3+aQpvvKrXWxNJp3o8/l2cAbbrBd0E04r0Gx6nssPpqWIjnbHFvZu5qsQ==", - "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", - "dev": true - }, - "micromark-util-events-to-acorn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.1.tgz", - "integrity": "sha512-mkg3BaWlw6ZTkQORrKVBW4o9ICXPxLtGz51vml5mQpKFdo9vqIX68CAx5JhTOdjQyAHH7JFmm4rh8toSPQZUmg==", + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dev": true, - "requires": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "estree-util-visit": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-location": "^4.0.0", - "vfile-message": "^3.0.0" - }, "dependencies": { - "vfile-location": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", - "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - } - } + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-html-tag-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", - "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", - "dev": true - }, - "micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dev": true, - "requires": { - "micromark-util-types": "^1.0.0" + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-sanitize-uri": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz", - "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==", + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", - "dev": true - }, - "micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, - "requires": { - "mime-db": "1.52.0" + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, - "requires": { - "dom-walk": "^0.1.0" + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "requires": { - "brace-expansion": "^1.1.7" + "engines": { + "node": ">= 0.8.0" } }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "bin": { + "prettier": "bin-prettier.js" }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "moo-color": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz", - "integrity": "sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==", + "node_modules/pretty": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", + "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==", "dev": true, - "requires": { - "color-name": "^1.1.4" + "dependencies": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + }, + "engines": { + "node": ">=0.10.0" } }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multimatch": { + "node_modules/pretty-error": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, "dependencies": { - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - } + "lodash": "^4.17.20", + "renderkid": "^3.0.0" } }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "nearest-color": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/nearest-color/-/nearest-color-0.4.4.tgz", - "integrity": "sha512-orhcaIORC10tf41Ld2wwlcC+FaAavHG87JHWB3eHH5p7v2k9Tzym2XNEZzLAm5YJwGv6Q38WWc7SOb+Qfu/4NQ==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "dev": true, - "requires": { - "minimatch": "^3.0.2" + "engines": { + "node": ">= 0.8" } }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/pretty-quick": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.3.1.tgz", + "integrity": "sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg==", "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - }, "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } + "execa": "^4.1.0", + "find-up": "^4.1.0", + "ignore": "^5.3.0", + "mri": "^1.2.0", + "picocolors": "^1.0.0", + "picomatch": "^3.0.1", + "tslib": "^2.6.2" + }, + "bin": { + "pretty-quick": "dist/cli.js" + }, + "engines": { + "node": ">=10.13" + }, + "peerDependencies": { + "prettier": "^2.0.0" } }, - "node-fetch-native": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.4.0.tgz", - "integrity": "sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "node_modules/pretty-quick/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, - "requires": { - "abbrev": "^1.0.0" + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/pretty-quick/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/pretty-quick/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "requires": { - "path-key": "^3.0.0" + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/pretty-quick/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, - "requires": { - "boolbase": "^1.0.0" + "engines": { + "node": ">=8.12.0" } }, - "nwsapi": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz", - "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/pretty-quick/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "node_modules/pretty-quick/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "node_modules/pretty-quick/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "node_modules/pretty-quick/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "engines": { + "node": ">= 0.6.0" } }, - "objectorarray": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", - "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "requires": { - "ee-first": "1.1.1" + "engines": { + "node": ">=0.4.0" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dev": true, - "requires": { - "wrappy": "1" + "dependencies": { + "asap": "~2.0.3" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", "dev": true, - "requires": { - "mimic-fn": "^2.1.0" + "engines": { + "node": ">=0.12" } }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, - "requires": { - "yocto-queue": "^0.1.0" + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "requires": { - "p-limit": "^3.0.2" + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, - "requires": { - "aggregate-error": "^3.0.0" + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "requires": { - "p-finally": "^1.0.0" + "engines": { + "node": ">=6" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/puppeteer-core": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz", + "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==", "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "dependencies": { + "@types/mime-types": "^2.1.0", + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "mime-types": "^2.1.25", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + }, + "engines": { + "node": ">=8.16.0" } }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/puppeteer-core/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", "dev": true, - "requires": { - "callsites": "^3.0.0" + "engines": { + "node": ">= 6.0.0" } }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/puppeteer-core/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/puppeteer-core/node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "dependencies": { + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/puppeteer-core/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" } }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "node_modules/puppeteer-core/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, "dependencies": { - "lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true - } + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "node_modules/puppeteer-core/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } }, - "pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==", "dev": true }, - "peek-stream": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", - "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", + "node_modules/qs": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "duplexify": "^3.5.0", - "through2": "^2.0.3" + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "picocolors": { + "node_modules/querystring": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.4.x" + } }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "dev": true, - "requires": { - "find-up": "^5.0.0" + "peer": true, + "dependencies": { + "inherits": "~2.0.3" } }, - "polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "requires": { - "@babel/runtime": "^7.17.8" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/ramda": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", + "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" } }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" + "engines": { + "node": ">= 0.6" } }, - "postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true - }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "dev": true, + "dependencies": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } }, - "postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "node_modules/react-color": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", + "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", "dev": true, - "requires": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "@icons/material": "^0.2.4", + "lodash": "^4.17.15", + "lodash-es": "^4.17.15", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "react": "*" } }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/react-colorful": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", + "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "postcss-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", - "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "node_modules/react-devtools-core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.2.0.tgz", + "integrity": "sha512-vZK+/gvxxsieAoAyYaiRIVFxlajb7KXhgBDV7OsoMzaAE+IqGpoxusBjIgq5ibqA2IloKu0p9n7tE68z1xs18A==", "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" - }, + "peer": true, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "shell-quote": "^1.6.1", + "ws": "^7" } }, - "postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "node_modules/react-docgen": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-7.0.3.tgz", + "integrity": "sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==", "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" + "dependencies": { + "@babel/core": "^7.18.9", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9", + "@types/babel__core": "^7.18.0", + "@types/babel__traverse": "^7.18.0", + "@types/doctrine": "^0.0.9", + "@types/resolve": "^1.20.2", + "doctrine": "^3.0.0", + "resolve": "^1.22.1", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=16.14.0" } }, - "postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "node_modules/react-docgen-typescript": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", + "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" + "peerDependencies": { + "typescript": ">= 4.3.x" } }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" + "node_modules/react-docgen/node_modules/@types/doctrine": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz", + "integrity": "sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==", + "dev": true + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" } }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "node_modules/react-dropzone": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", + "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", "dev": true, - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "dependencies": { + "attr-accept": "^2.2.2", + "file-selector": "^0.6.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" } }, - "postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "node_modules/react-element-to-jsx-string": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", + "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", "dev": true, - "requires": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "dependencies": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "18.1.0" + }, + "peerDependencies": { + "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", + "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" } }, - "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "node_modules/react-element-to-jsx-string/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/react-intersection-observer": { + "version": "9.10.3", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.10.3.tgz", + "integrity": "sha512-9NYfKwPZRovB6QJee7fDg0zz/SyYrqXtn5xTZU0vwLtLVBtfu9aZt1pVmr825REE49VPDZ7Lm5SNHjJBOTZHpA==", "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } } }, - "postcss-modules": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", - "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "requires": { - "generic-names": "^4.0.0", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" - } + "peer": true }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "node_modules/react-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", + "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "engines": { + "node": ">=0.10.0" } }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", "dev": true, - "requires": { - "icss-utils": "^5.0.0" + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "node_modules/react-resize-detector": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-7.1.2.tgz", + "integrity": "sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw==", "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" + "dependencies": { + "lodash": "^4.17.21" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, - "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "node_modules/react-responsive": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", + "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" + "dependencies": { + "hyphenate-style-name": "^1.0.0", + "matchmediaquery": "^0.3.0", + "prop-types": "^15.6.1", + "shallow-equal": "^1.2.1" + }, + "engines": { + "node": ">=0.10" + }, + "peerDependencies": { + "react": ">=16.8.0" } }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "node_modules/react-shallow-renderer": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" + "peer": true, + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "node_modules/react-slider": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/react-slider/-/react-slider-2.0.6.tgz", + "integrity": "sha512-gJxG1HwmuMTJ+oWIRCmVWvgwotNCbByTwRkFZC6U4MBsHqJBmxwbYRJUmxy4Tke1ef8r9jfXjgkmY/uHOCEvbA==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18" + } + }, + "node_modules/react-spring": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-9.7.3.tgz", + "integrity": "sha512-oTxDpFV5gzq7jQX6+bU0SVq+vX8VnuuT5c8Zwn6CpDErOPvCmV+DRkPiEBtaL3Ozgzwiy5yFx83N0h303j/r3A==", "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" + "dependencies": { + "@react-spring/core": "~9.7.3", + "@react-spring/konva": "~9.7.3", + "@react-spring/native": "~9.7.3", + "@react-spring/three": "~9.7.3", + "@react-spring/web": "~9.7.3", + "@react-spring/zdog": "~9.7.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "node_modules/react-spring/node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "node_modules/react-spring/node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "node_modules/react-spring/node_modules/@react-spring/konva": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/konva/-/konva-9.7.3.tgz", + "integrity": "sha512-R9sY6SiPGYqz1383P5qppg5z57YfChVknOC1UxxaGxpw+WiZa8fZ4zmZobslrw+os3/+HAXZv8O+EvU/nQpf7g==", "dev": true, - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" + "dependencies": { + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "konva": ">=2.6", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-konva": "^16.8.0 || ^16.8.7-0 || ^16.9.0-0 || ^16.10.1-0 || ^16.12.0-0 || ^16.13.0-0 || ^17.0.0-0 || ^17.0.1-0 || ^17.0.2-0 || ^18.0.0-0" } }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "node_modules/react-spring/node_modules/@react-spring/native": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/native/-/native-9.7.3.tgz", + "integrity": "sha512-4mpxX3FuEBCUT6ae2fjhxcJW6bhr2FBwFf274eXB7n+U30Gdg8Wo2qYwcUnmiAA0S3dvP8vLTazx3+CYWFShnA==", "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" + "dependencies": { + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "react": "^16.8.0 || >=17.0.0 || >=18.0.0", + "react-native": ">=0.58" } }, - "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "node_modules/react-spring/node_modules/@react-spring/three": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.7.3.tgz", + "integrity": "sha512-Q1p512CqUlmMK8UMBF/Rj79qndhOWq4XUTayxMP9S892jiXzWQuj+xC3Xvm59DP/D4JXusXpxxqfgoH+hmOktA==", "dev": true, - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "dependencies": { + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "@react-three/fiber": ">=6.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "three": ">=0.126" } }, - "postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "node_modules/react-spring/node_modules/@react-three/fiber": { + "version": "8.16.8", + "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-8.16.8.tgz", + "integrity": "sha512-Lc8fjATtvQEfSd8d5iKdbpHtRm/aPMeFj7jQvp6TNHfpo8IQTW3wwcE1ZMrGGoUH+w2mnyS+0MK1NLPLnuzGkQ==", "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" + "peer": true, + "dependencies": { + "@babel/runtime": "^7.17.8", + "@types/react-reconciler": "^0.26.7", + "@types/webxr": "*", + "base64-js": "^1.5.1", + "buffer": "^6.0.3", + "its-fine": "^1.0.6", + "react-reconciler": "^0.27.0", + "react-use-measure": "^2.1.1", + "scheduler": "^0.21.0", + "suspend-react": "^0.1.3", + "zustand": "^3.7.1" + }, + "peerDependencies": { + "expo": ">=43.0", + "expo-asset": ">=8.4", + "expo-file-system": ">=11.0", + "expo-gl": ">=11.0", + "react": ">=18.0", + "react-dom": ">=18.0", + "react-native": ">=0.64", + "three": ">=0.133" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + }, + "expo-asset": { + "optional": true + }, + "expo-file-system": { + "optional": true + }, + "expo-gl": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/its-fine": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.2.5.tgz", + "integrity": "sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/react-reconciler": "^0.28.0" + }, + "peerDependencies": { + "react": ">=18.0" } }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/its-fine/node_modules/@types/react-reconciler": { + "version": "0.28.8", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz", + "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==", "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" + "peer": true, + "dependencies": { + "@types/react": "*" } }, - "postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/react-reconciler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.27.0.tgz", + "integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==", "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.21.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^18.0.0" } }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "node_modules/react-spring/node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "peer": true, + "dependencies": { + "type-detect": "4.0.8" } }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "node_modules/react-spring/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" } }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true - }, - "pretty": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", - "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==", + "node_modules/react-spring/node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "dev": true, - "requires": { - "condense-newlines": "^0.2.1", - "extend-shallow": "^2.0.1", - "js-beautify": "^1.6.12" + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" } }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "node_modules/react-spring/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" } }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "node_modules/react-spring/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, + "peer": true, "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true - }, - "pretty-quick": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz", - "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==", + "node_modules/react-spring/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, - "requires": { - "chalk": "^3.0.0", - "execa": "^4.0.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.5", - "multimatch": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "node_modules/react-spring/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "node_modules/react-spring/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "requires": { - "asap": "~2.0.3" + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "promise.series": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", - "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", - "dev": true + "node_modules/react-spring/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/react-spring/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "peer": true, + "engines": { + "node": ">=8" } }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "node_modules/react-spring/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true + "node_modules/react-spring/node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/react-spring/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "node_modules/react-spring/node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true + "node_modules/react-spring/node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "node_modules/react-spring/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/react-spring/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "node_modules/react-spring/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "peer": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/react-spring/node_modules/pretty-format/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "peer": true, "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" } }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true + "node_modules/react-spring/node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "peer": true }, - "puppeteer-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz", - "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==", + "node_modules/react-spring/node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dev": true, - "requires": { - "@types/mime-types": "^2.1.0", - "debug": "^4.1.0", - "extract-zip": "^1.6.6", - "https-proxy-agent": "^4.0.0", - "mime": "^2.0.3", - "mime-types": "^2.1.25", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^6.1.0" - }, + "peer": true, "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, - "requires": { - "agent-base": "5", - "debug": "4" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true + "asap": "~2.0.6" + } + }, + "node_modules/react-spring/node_modules/react-konva": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/react-konva/-/react-konva-18.2.10.tgz", + "integrity": "sha512-ohcX1BJINL43m4ynjZ24MxFI1syjBdrXhqVxYVDw2rKgr3yuS0x/6m1Y2Z4sl4T/gKhfreBx8KHisd0XC6OT1g==", + "dev": true, + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/lavrton" }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + { + "type": "opencollective", + "url": "https://opencollective.com/konva" }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + { + "type": "github", + "url": "https://github.com/sponsors/lavrton" } + ], + "peer": true, + "dependencies": { + "@types/react-reconciler": "^0.28.2", + "its-fine": "^1.1.1", + "react-reconciler": "~0.29.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "konva": "^8.0.1 || ^7.2.5 || ^9.0.0", + "react": ">=18.0.0", + "react-dom": ">=18.0.0" } }, - "pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==", - "dev": true - }, - "qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "node_modules/react-spring/node_modules/react-konva/node_modules/@types/react-reconciler": { + "version": "0.28.8", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz", + "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==", "dev": true, - "requires": { - "side-channel": "^1.0.4" + "peer": true, + "dependencies": { + "@types/react": "*" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "ramda": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", - "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/react-spring/node_modules/react-konva/node_modules/its-fine": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.2.5.tgz", + "integrity": "sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==", "dev": true, - "requires": { - "safe-buffer": "^5.1.0" + "peer": true, + "dependencies": { + "@types/react-reconciler": "^0.28.0" + }, + "peerDependencies": { + "react": ">=18.0" } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/react-spring/node_modules/react-konva/node_modules/react-reconciler": { + "version": "0.29.2", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.2.tgz", + "integrity": "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==", "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^18.3.1" } }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "node_modules/react-spring/node_modules/react-konva/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" } }, - "react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "node_modules/react-spring/node_modules/react-native": { + "version": "0.74.2", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.2.tgz", + "integrity": "sha512-EBMBjPPL4/GjHMP4NqsZabT3gI5WU9cSmduABGAGrd8uIcmTZ5F2Ng9k6gFmRm7n8e8CULxDNu98ZpQfBjl7Bw==", "dev": true, - "requires": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.6.3", + "@react-native-community/cli": "13.6.8", + "@react-native-community/cli-platform-android": "13.6.8", + "@react-native-community/cli-platform-ios": "13.6.8", + "@react-native/assets-registry": "0.74.84", + "@react-native/codegen": "0.74.84", + "@react-native/community-cli-plugin": "0.74.84", + "@react-native/gradle-plugin": "0.74.84", + "@react-native/js-polyfills": "0.74.84", + "@react-native/normalize-colors": "0.74.84", + "@react-native/virtualized-lists": "0.74.84", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "jest-environment-node": "^29.6.3", + "jsc-android": "^250231.0.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.80.3", + "metro-source-map": "^0.80.3", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.3.0", + "react-devtools-core": "^5.0.0", + "react-refresh": "^0.14.0", + "react-shallow-renderer": "^16.15.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.24.0-canary-efb381bbf-20230505", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.2", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "18.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "react-color": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", - "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", + "node_modules/react-spring/node_modules/react-native/node_modules/@react-native/virtualized-lists": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.84.tgz", + "integrity": "sha512-XcV+qdqt2WihaY4iRm/M1FdSy+18lecU9mRXNmy9YK8g9Th/8XbNtmmKI0qWBx3KxyuXMH/zd0ps05YTrX16kw==", "dev": true, - "requires": { - "@icons/material": "^0.2.4", - "lodash": "^4.17.15", - "lodash-es": "^4.17.15", - "material-colors": "^1.2.1", - "prop-types": "^15.5.10", - "reactcss": "^1.2.0", - "tinycolor2": "^1.4.1" + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "react-colorful": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", - "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", - "dev": true - }, - "react-docgen": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", - "integrity": "sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==", + "node_modules/react-spring/node_modules/react-native/node_modules/scheduler": { + "version": "0.24.0-canary-efb381bbf-20230505", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", + "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@babel/generator": "^7.12.11", - "@babel/runtime": "^7.7.6", - "ast-types": "^0.14.2", - "commander": "^2.19.0", - "doctrine": "^3.0.0", - "estree-to-babel": "^3.1.0", - "neo-async": "^2.6.1", - "node-dir": "^0.1.10", - "strip-indent": "^3.0.0" - }, + "peer": true, "dependencies": { - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } + "loose-envify": "^1.1.0" } }, - "react-docgen-typescript": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", - "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true + "node_modules/react-spring/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true, + "peer": true }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "node_modules/react-spring/node_modules/scheduler": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz", + "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" } }, - "react-dropzone": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", - "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", + "node_modules/react-spring/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { - "attr-accept": "^2.2.2", - "file-selector": "^0.6.0", - "prop-types": "^15.8.1" + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "react-element-to-jsx-string": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", - "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", + "node_modules/react-spring/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "@base2/pretty-print-object": "1.0.1", - "is-plain-object": "5.0.0", - "react-is": "18.1.0" - }, + "peer": true, "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "react-inspector": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", - "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", - "dev": true - }, - "react-intersection-observer": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.2.tgz", - "integrity": "sha512-EmoV66/yvksJcGa1rdW0nDNc4I1RifDWkT50gXSFnPLYQ4xUptuDD4V7k+Rj1OgVAlww628KLGcxPXFlOkkU/Q==", - "dev": true - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, - "react-property": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", - "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==", - "dev": true + "node_modules/react-spring/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } }, - "react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", - "dev": true + "node_modules/react-spring/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } }, - "react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "node_modules/react-spring/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "requires": { - "react-remove-scroll-bar": "^2.3.3", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" + "peer": true, + "engines": { + "node": ">=12" } }, - "react-remove-scroll-bar": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", - "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", "dev": true, - "requires": { - "react-style-singleton": "^2.2.1", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "react-resize-detector": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-7.1.2.tgz", - "integrity": "sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw==", + "node_modules/react-use-measure": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz", + "integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==", "dev": true, - "requires": { - "lodash": "^4.17.21" + "peer": true, + "dependencies": { + "debounce": "^1.2.1" + }, + "peerDependencies": { + "react": ">=16.13", + "react-dom": ">=16.13" } }, - "react-responsive": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", - "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", + "node_modules/react-zdog": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/react-zdog/-/react-zdog-1.2.2.tgz", + "integrity": "sha512-Ix7ALha91aOEwiHuxumCeYbARS5XNpc/w0v145oGkM6poF/CvhKJwzLhM5sEZbtrghMA+psAhOJkCTzJoseicA==", "dev": true, - "requires": { - "hyphenate-style-name": "^1.0.0", - "matchmediaquery": "^0.3.0", - "prop-types": "^15.6.1", - "shallow-equal": "^1.2.1" - } - }, - "react-slider": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/react-slider/-/react-slider-2.0.6.tgz", - "integrity": "sha512-gJxG1HwmuMTJ+oWIRCmVWvgwotNCbByTwRkFZC6U4MBsHqJBmxwbYRJUmxy4Tke1ef8r9jfXjgkmY/uHOCEvbA==", - "requires": { - "prop-types": "^15.8.1" + "peer": true, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "resize-observer-polyfill": "^1.5.1" } }, - "react-spring": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-9.7.3.tgz", - "integrity": "sha512-oTxDpFV5gzq7jQX6+bU0SVq+vX8VnuuT5c8Zwn6CpDErOPvCmV+DRkPiEBtaL3Ozgzwiy5yFx83N0h303j/r3A==", + "node_modules/react-zdog/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, - "requires": { - "@react-spring/core": "~9.7.3", - "@react-spring/konva": "~9.7.3", - "@react-spring/native": "~9.7.3", - "@react-spring/three": "~9.7.3", - "@react-spring/web": "~9.7.3", - "@react-spring/zdog": "~9.7.3" + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "node_modules/react-zdog/node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dev": true, - "requires": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^2.0.0" + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" } }, - "react-textarea-autosize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", - "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", + "node_modules/react-zdog/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, - "requires": { - "prop-types": "^15.6.0" + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" } }, - "react-zoom-pan-pinch": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.3.0.tgz", - "integrity": "sha512-vy1h8aenDzXye+HRqANZaSA8IPHoqOiuDPFBkswoyPUH8uMfsmbeH6gFI4r4BhEJa0xIlcA+FbvhidRWKGUrOg==" + "node_modules/react-zoom-pan-pinch": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.4.4.tgz", + "integrity": "sha512-lGTu7D9lQpYEQ6sH+NSlLA7gicgKRW8j+D/4HO1AbSV2POvKRFzdWQ8eI0r3xmOsl4dYQcY+teV6MhULeg1xBw==", + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } }, - "reactcss": { + "node_modules/reactcss": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", "dev": true, - "requires": { + "dependencies": { "lodash": "^4.0.1" } }, - "read-cache": { + "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, - "requires": { + "dependencies": { "pify": "^2.3.0" - }, + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "read-pkg": { + "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "requires": { + "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "read-pkg-up": { + "node_modules/read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "requires": { + "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "readdirp": { + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "recast": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.4.tgz", - "integrity": "sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==", + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", + "dev": true, + "peer": true + }, + "node_modules/recast": { + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", + "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", "dev": true, - "requires": { - "assert": "^2.0.0", + "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" }, - "dependencies": { - "assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" - } - } + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "redent": { + "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "requires": { + "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redent/node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regenerate": { + "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "regenerate-unicode-properties": { + "node_modules/regenerate-unicode-properties": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, - "requires": { + "dependencies": { "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, - "regenerator-transform": { + "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.8.4" } }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regexpu-core": { + "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "requires": { + "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "regjsparser": { + "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "requires": { + "dependencies": { "jsesc": "~0.5.0" }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } + "bin": { + "regjsparser": "bin/parser" } }, - "relateurl": { + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "remark-external-links": { + "node_modules/remark-external-links": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", "dev": true, - "requires": { + "dependencies": { "extend": "^3.0.0", "is-absolute-url": "^3.0.0", "mdast-util-definitions": "^4.0.0", "space-separated-tokens": "^1.0.0", "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-external-links/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-external-links/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-external-links/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "remark-gfm": { + "node_modules/remark-gfm": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", "dev": true, - "requires": { + "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-gfm": "^2.0.0", "micromark-extension-gfm": "^2.0.0", "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", + "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", + "dev": true, + "dependencies": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", + "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/remark-parse/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "remark-slug": { + "node_modules/remark-slug": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", "dev": true, - "requires": { + "dependencies": { "github-slugger": "^1.0.0", "mdast-util-to-string": "^1.0.0", "unist-util-visit": "^2.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, "dependencies": { - "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true - } + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "remark-stringify": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", - "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", + "node_modules/remark-stringify": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.3.tgz", + "integrity": "sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==", "dev": true, - "requires": { + "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-markdown": "^1.0.0", "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "renderkid": { + "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, - "requires": { + "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", "strip-ansi": "^6.0.1" - }, - "dependencies": { - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "require-from-string": { + "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, + "peer": true }, - "requires-port": { + "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true, + "peer": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "requires": { - "is-core-module": "^2.11.0", + "dependencies": { + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-cwd": { + "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, - "requires": { + "dependencies": { "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "resolve.exports": { + "node_modules/resolve.exports": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + } }, - "restore-cursor": { + "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "requires": { + "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" } }, - "reusify": { + "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, - "rgb-hex": { + "node_modules/rgb-hex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-3.0.0.tgz", "integrity": "sha512-8h7ZcwxCBDKvchSWbWngJuSCqJGQ6nDuLLg+QcRyQDbX9jMWt+PpPeXAhSla0GOooEomk3lCprUpGkMdsLjKyg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "rgb-regex": { + "node_modules/rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", "dev": true }, - "rgba-regex": { + "node_modules/rgba-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", "dev": true }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "rollup": { + "node_modules/rollup": { "version": "3.29.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, - "requires": { + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { "fsevents": "~2.3.2" } }, - "rollup-plugin-generate-package-json": { + "node_modules/rollup-plugin-generate-package-json": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/rollup-plugin-generate-package-json/-/rollup-plugin-generate-package-json-3.2.0.tgz", "integrity": "sha512-+Kq1kFVr+maxW/mZB+E+XuaieCXVZqjl2tNU9k3TtAMs3NOaeREa5sRHy67qKDmcnFtZZukIQ3dFCcnV+r0xyw==", "dev": true, - "requires": { + "dependencies": { "read-pkg": "^5.2.0", "write-pkg": "^4.0.0" + }, + "engines": { + "node": ">=8.3" + }, + "peerDependencies": { + "rollup": ">=1.0.0" } }, - "rollup-plugin-peer-deps-external": { + "node_modules/rollup-plugin-peer-deps-external": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.4.tgz", "integrity": "sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==", - "dev": true + "dev": true, + "peerDependencies": { + "rollup": "*" + } }, - "rollup-plugin-postcss": { + "node_modules/rollup-plugin-postcss": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.0", "concat-with-sourcemaps": "^1.1.0", "cssnano": "^5.0.1", @@ -48797,264 +30019,362 @@ "safe-identifier": "^0.4.2", "style-inject": "^0.3.0" }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "8.x" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "node_modules/rollup-plugin-postcss/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "rollup-plugin-typescript2": { + "node_modules/rollup-plugin-typescript2": { "version": "0.36.0", "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", "dev": true, - "requires": { + "dependencies": { "@rollup/pluginutils": "^4.1.2", "find-cache-dir": "^3.3.2", "fs-extra": "^10.0.0", "semver": "^7.5.4", "tslib": "^2.6.2" }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, "dependencies": { - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "rollup-pluginutils": { + "node_modules/rollup-pluginutils": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, - "requires": { - "estree-walker": "^0.6.1" - }, "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - } + "estree-walker": "^0.6.1" } }, - "run-parallel": { + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "queue-microtask": "^1.2.2" } }, - "rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, - "requires": { + "dependencies": { "tslib": "^2.1.0" } }, - "sade": { + "node_modules/sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", "dev": true, - "requires": { + "dependencies": { "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "safe-identifier": { + "node_modules/safe-identifier": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", "dev": true }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "saxes": { + "node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, - "requires": { + "dependencies": { "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" } }, - "scheduler": { + "node_modules/scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, - "schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" } }, - "semver": { + "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "send": { + "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, - "requires": { + "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -49069,581 +30389,842 @@ "range-parser": "~1.2.1", "statuses": "2.0.1" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } + "ms": "2.0.0" } }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "requires": { + "dependencies": { "randombytes": "^2.1.0" } }, - "serve-static": { + "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, - "requires": { + "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "peer": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "setimmediate": { + "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true }, - "setprototypeof": { + "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "shallow-clone": { + "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "requires": { + "dependencies": { "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "shallow-equal": { + "node_modules/shallow-equal": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==", "dev": true }, - "shallowequal": { + "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", "dev": true }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==", - "dev": true - }, - "signal-exit": { + "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "simple-swizzle": { + "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } + "is-arrayish": "^0.3.1" } }, - "simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "requires": { - "semver": "^7.5.3" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true }, - "sisteransi": { + "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "slash": { + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "slice-ansi": { + "node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" }, - "dependencies": { - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - } + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "sort-keys": { + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", + "dev": true + }, + "node_modules/sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, - "requires": { + "dependencies": { "is-plain-obj": "^1.0.0" }, - "dependencies": { - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - } + "engines": { + "node": ">=4" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "requires": { + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "space-separated-tokens": { + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "dev": true + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "spdx-correct": { + "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "requires": { + "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, - "spdx-expression-parse": { + "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "requires": { + "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "node_modules/spdx-license-ids": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "stable": { + "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, - "stack-utils": { + "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, - "requires": { + "dependencies": { "escape-string-regexp": "^2.0.0" }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" } }, - "stackframe": { + "node_modules/stackframe": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", "dev": true }, - "statuses": { + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "stop-iteration-iterator": { + "node_modules/stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", "dev": true, - "requires": { + "dependencies": { "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "store2": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", - "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", + "node_modules/store2": { + "version": "2.14.3", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.3.tgz", + "integrity": "sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==", "dev": true }, - "storybook": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.4.6.tgz", - "integrity": "sha512-YkFSpnR47j5zz7yElA+2axLjXN7K7TxDGJRHHlqXmG5iQ0PXzmjrj2RxMDKFz4Ybp/QjEUoJ4rx//ESEY0Nb5A==", + "node_modules/storybook": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.19.tgz", + "integrity": "sha512-xWD1C4vD/4KMffCrBBrUpsLUO/9uNpm8BVW8+Vcb30gkQDfficZ0oziWkmLexpT53VSioa24iazGXMwBqllYjQ==", "dev": true, - "requires": { - "@storybook/cli": "7.4.6" + "dependencies": { + "@storybook/cli": "7.6.19" + }, + "bin": { + "sb": "index.js", + "storybook": "index.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", "dev": true }, - "string_decoder": { + "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "~5.2.0" } }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } }, - "string-hash": { + "node_modules/string-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", "dev": true }, - "string-length": { + "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, - "requires": { + "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "string-width": { + "node_modules/string-width-cjs": { + "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { + "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - } + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "stringify-entities": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", - "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "dev": true, - "requires": { + "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" }, - "dependencies": { - "character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-entities/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "strip-final-newline": { + "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", "dev": true, - "requires": { - "min-indent": "^1.0.0" + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true, + "peer": true }, - "style-inject": { + "node_modules/style-inject": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", "dev": true }, - "style-loader": { + "node_modules/style-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, - "requires": { + "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "style-mod": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.3.tgz", - "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==", + "node_modules/style-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", "dev": true }, - "style-to-js": { + "node_modules/style-to-js": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.1.tgz", "integrity": "sha512-RJ18Z9t2B02sYhZtfWKQq5uplVctgvjTfLWT7+Eb1zjUjIrWzX5SdlkwLGQozrqarTmEzJJ/YmdNJCUNI47elg==", "dev": true, - "requires": { + "dependencies": { "style-to-object": "0.3.0" } }, - "style-to-object": { + "node_modules/style-to-object": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", "dev": true, - "requires": { + "dependencies": { "inline-style-parser": "0.1.1" } }, - "styled-components": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.9.tgz", - "integrity": "sha512-Aj3kb13B75DQBo2oRwRa/APdB5rSmwUfN5exyarpX+x/tlM/rwZA2vVk2vQgVSP6WKaZJHWwiFrzgHt+CLtB4A==", + "node_modules/styled-components": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz", + "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.0.0", "@babel/traverse": "^7.4.5", "@emotion/is-prop-valid": "^1.1.0", @@ -49654,134 +31235,202 @@ "hoist-non-react-statics": "^3.0.0", "shallowequal": "^1.1.0", "supports-color": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-is": ">= 16.8.0" } }, - "stylehacks": { + "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, - "requires": { + "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "supports-color": { + "node_modules/sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", + "dev": true, + "peer": true + }, + "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "supports-hyperlinks": { + "node_modules/supports-hyperlinks": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/suspend-react": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.1.3.tgz", + "integrity": "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "react": ">=17.0" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "node_modules/swc-loader": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.6.tgz", + "integrity": "sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==", "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - } + "@swc/counter": "^0.1.3" + }, + "peerDependencies": { + "@swc/core": "^1.2.147", + "webpack": ">=2" } }, - "swc-loader": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.3.tgz", - "integrity": "sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==", - "dev": true - }, - "symbol-tree": { + "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "synchronous-promise": { + "node_modules/synchronous-promise": { "version": "2.0.17", "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", "dev": true }, - "synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "node_modules/synckit": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz", + "integrity": "sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==", "dev": true, - "requires": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "tabbable": { + "node_modules/tabbable": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, - "tapable": { + "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, - "requires": { + "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", @@ -49789,503 +31438,784 @@ "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, - "dependencies": { - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "engines": { + "node": ">=10" } }, - "tar-fs": { + "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, - "requires": { + "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - } } }, - "tar-stream": { + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, - "requires": { + "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" } }, - "telejson": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", - "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==", + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/telejson": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", + "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", "dev": true, - "requires": { - "@types/is-function": "^1.0.0", - "global": "^4.4.0", - "is-function": "^1.0.2", - "is-regex": "^1.1.2", - "is-symbol": "^1.0.3", - "isobject": "^4.0.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3" - }, "dependencies": { - "isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "dev": true - } + "memoizerific": "^1.11.3" } }, - "temp": { + "node_modules/temp": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", "dev": true, - "requires": { + "dependencies": { "rimraf": "~2.6.2" }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "engines": { + "node": ">=6.0.0" } }, - "temp-dir": { + "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } }, - "tempy": { + "node_modules/tempy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", "dev": true, - "requires": { + "dependencies": { "del": "^6.0.0", "is-stream": "^2.0.0", "temp-dir": "^2.0.0", "type-fest": "^0.16.0", "unique-string": "^2.0.0" }, - "dependencies": { - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "terminal-link": { + "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, - "requires": { + "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "terser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", - "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", + "node_modules/terser": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", + "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, - "dependencies": { - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, - "dependencies": { - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true } } }, - "test-exclude": { + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "requires": { + "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "throat": { + "node_modules/three": { + "version": "0.165.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.165.0.tgz", + "integrity": "sha512-cc96IlVYGydeceu0e5xq70H8/yoVT/tXBxV/W8A/U6uOq7DXc4/s1Mkmnu6SqoYGhSRWWYFOhVwvq6V0VtbplA==", + "dev": true, + "peer": true + }, + "node_modules/throat": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", "dev": true }, - "through": { + "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "through2": { + "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" - }, + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "requires": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", "dev": true }, - "tinycolor2": { + "node_modules/tinycolor2": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", "dev": true }, - "tmpl": { + "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-vfile": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.4.tgz", + "integrity": "sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==", + "dev": true, + "dependencies": { + "is-buffer": "^2.0.0", + "vfile": "^5.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/to-vfile/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" } }, - "tocbot": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.21.2.tgz", - "integrity": "sha512-R5Muhi/TUu4i4snWVrMgNoXyJm2f8sJfdgIkQvqb+cuIXQEIMAiWGWgCgYXHqX4+XiS/Bnm7IYZ9Zy6NVe6lhw==", + "node_modules/tocbot": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz", + "integrity": "sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==", "dev": true }, - "toidentifier": { + "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6" + } }, - "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, - "requires": { + "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.2.0", "url-parse": "^1.5.3" }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - } + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" } }, - "tr46": { + "node_modules/tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, - "requires": { + "dependencies": { "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" } }, - "trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "ts-dedent": { + "node_modules/ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.10" + } }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "tsutils": { + "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "requires": { + "dependencies": { "tslib": "^1.8.1" }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "type-check": { + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "type-detect": { + "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "type-is": { + "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "requires": { + "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "typedarray": { + "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "typedarray-to-buffer": { + "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "requires": { + "dependencies": { "is-typedarray": "^1.0.0" } }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.38.tgz", + "integrity": "sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/ufo": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", + "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", "dev": true }, - "uglify-js": { + "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, - "optional": true + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } }, - "unbox-primitive": { + "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "unicode-canonical-property-names-ecmascript": { + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-match-property-ecmascript": { + "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "requires": { + "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "unicode-match-property-value-ecmascript": { + "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-property-aliases-ecmascript": { + "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unified": { + "node_modules/unified": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", "dev": true, - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "bail": "^2.0.0", "extend": "^3.0.0", @@ -50293,189 +32223,449 @@ "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-engine": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-10.1.0.tgz", + "integrity": "sha512-5+JDIs4hqKfHnJcVCxTid1yBoI/++FfF/1PFdSMpaftZZZY+qg2JFruRbf7PaIwa9KgLotXQV3gSjtY0IdcFGQ==", + "dev": true, + "dependencies": { + "@types/concat-stream": "^2.0.0", + "@types/debug": "^4.0.0", + "@types/is-empty": "^1.0.0", + "@types/node": "^18.0.0", + "@types/unist": "^2.0.0", + "concat-stream": "^2.0.0", + "debug": "^4.0.0", + "fault": "^2.0.0", + "glob": "^8.0.0", + "ignore": "^5.0.0", + "is-buffer": "^2.0.0", + "is-empty": "^1.0.0", + "is-plain-obj": "^4.0.0", + "load-plugin": "^5.0.0", + "parse-json": "^6.0.0", + "to-vfile": "^7.0.0", + "trough": "^2.0.0", + "unist-util-inspect": "^7.0.0", + "vfile-message": "^3.0.0", + "vfile-reporter": "^7.0.0", + "vfile-statistics": "^2.0.0", + "yaml": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-engine/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/unified-engine/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/unified-engine/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/unified-engine/node_modules/lines-and-columns": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/unified-engine/node_modules/parse-json": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", + "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^2.3.1", + "lines-and-columns": "^2.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "unique-string": { + "node_modules/unified-engine/node_modules/yaml": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.3.tgz", + "integrity": "sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/unified/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, - "requires": { + "dependencies": { "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true + "node_modules/unist-util-inspect": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.2.tgz", + "integrity": "sha512-Op0XnmHUl6C2zo/yJCwhXQSm/SmW22eDZdWP2qdf4WpGrgO1ZxFodq+5zFyeRGasFjJotAnLgfuD1jkcKqiH1Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "unist-util-position-from-estree": { + "node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", "dev": true, - "requires": { + "dependencies": { "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", + "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-stringify-position": { + "node_modules/unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, - "requires": { + "dependencies": { "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", "dev": true, - "requires": { + "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", "dev": true, - "requires": { + "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } }, - "unpipe": { + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "unplugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.0.tgz", - "integrity": "sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==", + "node_modules/unplugin": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.1.tgz", + "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==", "dev": true, - "requires": { - "acorn": "^8.10.0", - "chokidar": "^3.5.3", + "dependencies": { + "acorn": "^8.11.3", + "chokidar": "^3.6.0", "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.5.0" + "webpack-virtual-modules": "^0.6.1" }, - "dependencies": { - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - } + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/unplugin/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "untildify": { + "node_modules/unplugin/node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true + }, + "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - } + "punycode": "^1.4.1", + "qs": "^6.11.2" } }, - "url-parse": { + "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, - "requires": { + "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, - "use-callback-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", - "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", "dev": true, - "requires": { + "dependencies": { "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "use-resize-observer": { + "node_modules/use-resize-observer": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", "dev": true, - "requires": { + "dependencies": { "@juggle/resize-observer": "^3.3.1" + }, + "peerDependencies": { + "react": "16.8.0 - 18", + "react-dom": "16.8.0 - 18" } }, - "use-sidecar": { + "node_modules/use-sidecar": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", "dev": true, - "requires": { + "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "util": { + "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", @@ -50483,475 +32673,779 @@ "which-typed-array": "^1.1.2" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "utila": { + "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "dev": true }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4.0" + } }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } }, - "uvu": { + "node_modules/uvu": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", "dev": true, - "requires": { + "dependencies": { "dequal": "^2.0.0", "diff": "^5.0.0", "kleur": "^4.0.3", "sade": "^1.7.3" }, - "dependencies": { - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true - } + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uvu/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" } }, - "v8-to-istanbul": { + "node_modules/v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "dev": true, - "requires": { + "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", "source-map": "^0.7.3" }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } + "engines": { + "node": ">=10.12.0" } }, - "validate-npm-package-license": { + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "requires": { + "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "vary": { + "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "vfile": { + "node_modules/vfile": { "version": "5.3.7", "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", "dev": true, - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^3.0.0", "vfile-message": "^3.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-reporter": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.5.tgz", + "integrity": "sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==", + "dev": true, + "dependencies": { + "@types/supports-color": "^8.0.0", + "string-width": "^5.0.0", + "supports-color": "^9.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile": "^5.0.0", + "vfile-message": "^3.0.0", + "vfile-sort": "^3.0.0", + "vfile-statistics": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-reporter/node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/vfile-reporter/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-sort": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.1.tgz", + "integrity": "sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==", + "dev": true, + "dependencies": { + "vfile": "^5.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-statistics": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.1.tgz", + "integrity": "sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==", + "dev": true, "dependencies": { - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } + "vfile": "^5.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "engines": { + "node": ">=4" } }, - "vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "node_modules/vfile/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, "dependencies": { - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0" - } - } + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "w3c-hr-time": { + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "dev": true, + "peer": true + }, + "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dev": true, - "requires": { + "dependencies": { "browser-process-hrtime": "^1.0.0" } }, - "w3c-keyname": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", - "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==", + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", "dev": true }, - "w3c-xmlserializer": { + "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, - "requires": { + "dependencies": { "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" } }, - "walker": { + "node_modules/walk-up-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", + "dev": true + }, + "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, - "requires": { + "dependencies": { "makeerror": "1.0.12" } }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, - "requires": { + "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "wcwidth": { + "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "requires": { + "dependencies": { "defaults": "^1.0.3" } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true + "dev": true, + "engines": { + "node": ">=10.4" + } }, - "webpack": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", - "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "node_modules/webpack": { + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, - "requires": { + "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, - "dependencies": { - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "node_modules/webpack-dev-middleware": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.3.tgz", + "integrity": "sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==", "dev": true, - "requires": { + "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.12", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true } } }, - "webpack-hot-middleware": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.4.tgz", - "integrity": "sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w==", + "node_modules/webpack-hot-middleware": { + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz", + "integrity": "sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==", "dev": true, - "requires": { + "dependencies": { "ansi-html-community": "0.0.8", "html-entities": "^2.1.0", "strip-ansi": "^6.0.0" } }, - "webpack-sources": { + "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true + "dev": true, + "engines": { + "node": ">=10.13.0" + } }, - "webpack-virtual-modules": { + "node_modules/webpack-virtual-modules": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", "dev": true }, - "whatwg-encoding": { + "node_modules/webpack/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, - "requires": { + "dependencies": { "iconv-lite": "0.4.24" } }, - "whatwg-mimetype": { + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "dev": true, + "peer": true + }, + "node_modules/whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, - "requires": { + "dependencies": { "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "requires": { + "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true, + "peer": true + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "wordwrap": { + "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "write-json-file": { + "node_modules/write-json-file": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, - "requires": { + "dependencies": { "detect-indent": "^5.0.0", "graceful-fs": "^4.1.15", "make-dir": "^2.1.0", @@ -50959,93 +33453,162 @@ "sort-keys": "^2.0.0", "write-file-atomic": "^2.4.2" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-json-file/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, "dependencies": { - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "write-pkg": { + "node_modules/write-pkg": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", "dev": true, - "requires": { + "dependencies": { "sort-keys": "^2.0.0", "type-fest": "^0.4.1", "write-json-file": "^3.2.0" }, - "dependencies": { - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", - "dev": true + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "xml": { + "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", "dev": true }, - "xml-name-validator": { + "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, - "xmlchars": { + "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + } }, - "yallist": { + "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "yaml": { + "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 6" + } }, - "yargs": { + "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "requires": { + "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -51053,29 +33616,105 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "yauzl": { + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "requires": { + "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zdog": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/zdog/-/zdog-1.1.3.tgz", + "integrity": "sha512-raRj6r0gPzopFm5XWBJZr/NuV4EEnT4iE+U3dp5FV5pCb588Gmm3zLIp/j9yqqcMiHH8VNQlerLTgOqL7krh6w==", + "dev": true, + "peer": true + }, + "node_modules/zustand": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz", + "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index ea685ee71..763e27db8 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "@rollup/plugin-image": "^3.0.3", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-terser": "^0.4.4", "@storybook/addon-a11y": "^7.4.6", "@storybook/addon-actions": "^7.4.6", "@storybook/addon-essentials": "^7.4.6", @@ -81,6 +82,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-mdx": "^2.0.4", "eslint-plugin-react": "^7.29.4", + "eslint-plugin-react-hooks": "^4.6.2", "html-react-parser": "^2.0.0", "husky": "^7.0.4", "identity-obj-proxy": "^3.0.0", @@ -110,7 +112,6 @@ "rollup-plugin-generate-package-json": "^3.2.0", "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.2", - "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.36.0", "storybook": "^7.4.6", "style-loader": "^2.0.0", diff --git a/rollup.config.js b/rollup.config.js index a97d3a004..05b6a08be 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -5,7 +5,7 @@ import { nodeResolve } from "@rollup/plugin-node-resolve"; import typescript from "rollup-plugin-typescript2"; import peerDepsExternal from "rollup-plugin-peer-deps-external"; import postcss from "rollup-plugin-postcss"; -import { terser } from "rollup-plugin-terser"; +import terser from "@rollup/plugin-terser"; import generatePackageJson from "rollup-plugin-generate-package-json"; import pkg from "./package.json"; import { getFolders } from "./scripts/build-util"; From 2b9b975b8258488a17cc27eb3ce4b319b314ed63 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Thu, 6 Jun 2024 14:48:01 +0800 Subject: [PATCH 0160/1949] [MOL-15775][AM] update styling changes --- src/toggle/toggle.styles.tsx | 32 +++++++------- src/toggle/toggle.tsx | 84 ++++++++++++++++-------------------- 2 files changed, 51 insertions(+), 65 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index a098d8e58..05783ebab 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -4,6 +4,7 @@ import { Color } from "../color"; import { MediaQuery } from "../media"; import { Text, TextStyleHelper } from "../text"; import { ToggleStyleType } from "./types"; +import { applyHtmlContentStyle } from "../shared/html-content/html-content"; // ============================================================================= // STYLE INTERFACES, transient props are denoted with $ @@ -48,7 +49,6 @@ export const Container = styled.div` border-width: 1px; border-style: solid; overflow: hidden; - border-width: 0.063rem; flex-direction: column; height: fit-content; width: 100%; @@ -289,16 +289,15 @@ export const RemoveButton = styled.button` cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; `; -export const ViewMoreOrLessButtonLabel = styled(Text.H4)` - color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; - margin-right: 0.5rem; -`; -export const ViewMoreOrLessButtonContainer = styled.button` + +export const ExpandButtonContainer = styled.button` svg { width: 1.125rem; height: 1.125rem; + margin-left: 0.5rem; } color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; + ${TextStyleHelper.getTextStyle("H4", "semibold")} width: 100%; justify-content: flex-end; align-items: center; @@ -311,7 +310,7 @@ export const ViewMoreOrLessButtonContainer = styled.button` padding-top: ${(props) => props.$paddingTopRequired ? "0.6875rem" : "0rem"}; `; -export const ErrorListContainer = styled.div` +export const ErrorContainer = styled.div` width: 100%; color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; border: none; @@ -334,12 +333,8 @@ export const Children = styled.div` ${TextStyleHelper.getTextStyle("BodySmall", "regular")} padding-top: 0.6875rem; padding-bottom: ${(props) => (props.$isFinalItem ? "0.6875rem" : "0.5rem")}; - display: ${(props) => (props.$selected ? "flex" : "none")}; - strong, - b { - ${TextStyleHelper.getFontFamily("BodySmall", "semibold")} - color: inherit; - } + display: ${(props) => (props.$selected ? "block" : "none")}; + ${applyHtmlContentStyle({ textSize: "BodySmall" })} ${(props) => { if (props.$disabled) { @@ -358,10 +353,13 @@ export const Children = styled.div` }} `; -export const ErrorListItem = styled(Text.H5)` - color: ${(props) => (props.$disabled ? Color.Neutral[3] : "#C60000")}; +export const ErrorText = styled(Text.H5)` + color: ${(props) => + props.$disabled ? Color.Neutral[3] : Color.Validation.Red.Text}; `; -export const ErrorListli = styled.li` +export const ErrorListItem = styled.li` color: ${(props) => - props.$disabled ? Color.Neutral[3] : "#C60000"} !important; + props.$disabled + ? Color.Neutral[3] + : Color.Validation.Red.Text} !important; `; diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 12143a697..815063e24 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -9,9 +9,10 @@ import { Children, ChildrenContainer, Container, - ErrorListContainer, + ErrorContainer, ErrorListItem, - ErrorListli, + ErrorText, + ExpandButtonContainer, HeaderContainer, IndicatorLabelContainer, Input, @@ -19,8 +20,6 @@ import { RemoveButton, SubLabel, TextContainer, - ViewMoreOrLessButtonContainer, - ViewMoreOrLessButtonLabel, } from "./toggle.styles"; import { ToggleProps } from "./types"; @@ -49,13 +48,11 @@ export const Toggle = ({ const { collapsible = true, errors, - children: compositeOptionSection, - show: showCompositeOptionSection, + children: compositeSectionChildren, + show: showCompositeSection, } = compositeSection || {}; const [selected, setSelected] = useState(checked); - const [showMore, setShowMore] = useState( - !!showCompositeOptionSection - ); + const [expanded, setExpanded] = useState(!!showCompositeSection); const [showErrors, setShowErrors] = useState(false); const [uniqueId] = useState(SimpleIdGenerator.generate()); @@ -71,26 +68,23 @@ export const Toggle = ({ }, [checked]); useEffect(() => { - if ( - selected !== undefined && - showCompositeOptionSection === undefined - ) { - setShowMore(selected); + if (selected !== undefined && showCompositeSection === undefined) { + setExpanded(selected); } - }, [selected, showCompositeOptionSection]); + }, [selected, showCompositeSection]); useEffect(() => { if (errors) { const showErrorIfString = - !showMore && Array.isArray(errors) && errors?.length > 0; - const showErrorIfElement = !showMore && !Array.isArray(errors); + !expanded && Array.isArray(errors) && errors?.length > 0; + const showErrorIfElement = !expanded && !Array.isArray(errors); if (!selected) { setShowErrors(!selected); } else { setShowErrors(showErrorIfString || showErrorIfElement); } } - }, [showMore, errors, selected]); + }, [expanded, errors, selected]); // ============================================================================= // EVENT HANDLERS @@ -123,7 +117,7 @@ export const Toggle = ({ const handleExpandCollapseClick = () => { if (!disabled) { - setShowMore(!showMore); + setExpanded(!expanded); } }; const handleOnRemove = () => { @@ -186,37 +180,31 @@ export const Toggle = ({ ); }; - const renderCompositeOptionSection = () => { + const renderCompositeChildren = () => { return ( - {compositeOptionSection} + {compositeSectionChildren} ); }; - const renderViewMoreOrLessButton = () => { - const showLessWithoutErrors = !showMore && !showErrors; + const renderExpandButton = () => { + const expandedWithoutErrors = !expanded && !showErrors; return ( - - - {showMore ? "Show less" : "Show more"} - - {showMore ? : } - + {expanded ? "Show less" : "Show more"} + {expanded ? : } + ); }; @@ -274,24 +262,24 @@ export const Toggle = ({ const renderErrorList = (errors: string[]) => { return ( <> - + Error - + {errors?.map((item, index) => { return ( - - {item} - - + + ); })} @@ -301,9 +289,9 @@ export const Toggle = ({ const renderError = () => { return ( - !showMore && + !expanded && showErrors && ( - - + ) ); }; const renderCompositeSection = () => { return ( - compositeOptionSection && ( + compositeSectionChildren && ( - {renderCompositeOptionSection()} + {renderCompositeChildren()} {renderError()} - {renderViewMoreOrLessButton()} + {renderExpandButton()} ) ); From 1440c24a1f2ae7b9a75df0b6e5680c14af8934cf Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Thu, 6 Jun 2024 14:50:14 +0800 Subject: [PATCH 0161/1949] [MOL-15775][AM] update show prop to defaultExpanded prop in composite option --- src/toggle/toggle.tsx | 12 ++++++------ src/toggle/types.ts | 10 ++++++++-- stories/toggle/props-table.tsx | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 815063e24..1dd9c7244 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -49,10 +49,10 @@ export const Toggle = ({ collapsible = true, errors, children: compositeSectionChildren, - show: showCompositeSection, + defaultExpanded, } = compositeSection || {}; const [selected, setSelected] = useState(checked); - const [expanded, setExpanded] = useState(!!showCompositeSection); + const [expanded, setExpanded] = useState(!!defaultExpanded); const [showErrors, setShowErrors] = useState(false); const [uniqueId] = useState(SimpleIdGenerator.generate()); @@ -68,10 +68,10 @@ export const Toggle = ({ }, [checked]); useEffect(() => { - if (selected !== undefined && showCompositeSection === undefined) { + if (selected !== undefined && defaultExpanded === undefined) { setExpanded(selected); } - }, [selected, showCompositeSection]); + }, [selected, defaultExpanded]); useEffect(() => { if (errors) { @@ -201,8 +201,8 @@ export const Toggle = ({ $disabled={disabled} onClick={handleExpandCollapseClick} data-testid={expanded ? "collapse-button" : "expand-button"} - > - {expanded ? "Show less" : "Show more"} + > + {expanded ? "Show less" : "Show more"} {expanded ? : } ); diff --git a/src/toggle/types.ts b/src/toggle/types.ts index 9c1aa8c9d..59cb8520e 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -21,7 +21,13 @@ export interface ToggleProps styleType?: ToggleStyleType | undefined; /** The Toggle label */ children: React.ReactNode; - childrenMaxLines?: { mobile?: number; desktop?: number } | undefined; + childrenMaxLines?: + | { + mobile?: number | undefined; + desktop?: number | undefined; + tablet?: number | undefined; + } + | undefined; // /** The description label displayed below the main label */ subLabel?: (() => JSX.Element) | JSX.Element | string | undefined; disabled?: boolean | undefined; @@ -47,5 +53,5 @@ export interface ToggleCompositeSectionProps { errors?: string[] | JSX.Element | undefined; /** The children inside the composite option */ children: React.ReactNode; - show?: boolean | undefined; + defaultExpanded?: boolean | undefined; } diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index a026ca0d4..6af71815a 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -152,7 +152,7 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["string", "JSX.Element"], }, { - name: "show", + name: "defaultExpanded", description: ( <> specifies if the CompositeOption children have to be From 4f2947f27c87eca3bce481c63043127ff2f81132 Mon Sep 17 00:00:00 2001 From: Ruth Shirin Date: Fri, 7 Jun 2024 18:04:37 +0800 Subject: [PATCH 0162/1949] [CCUBE-1400][SR] Adding an action button to the toast component, enabling the title and label to be passed in as a JSX Element and also enabling the displaying of the toast in the mobile version. --- src/toast/toast.styles.tsx | 48 ++++++++++++-- src/toast/toast.tsx | 57 ++++++++++++----- src/toast/types.ts | 18 ++++-- stories/toast/props-table.tsx | 43 +++++++++---- stories/toast/toast.mdx | 12 ++++ stories/toast/toast.stories.tsx | 108 ++++++++++++++++++++++++++++++++ 6 files changed, 249 insertions(+), 37 deletions(-) diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index 86b8386e2..427bc4150 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -1,12 +1,13 @@ +import { Button } from "@lifesg/react-design-system"; import { animated } from "react-spring"; import { ValidationElementAttributes } from "src/color"; import { PropertiesToType } from "src/util/utility-types"; import styled, { css } from "styled-components"; import { Color } from "../color/color"; +import { MediaQuery } from "../media"; import { ClickableIcon } from "../shared/clickable-icon"; import { Text } from "../text"; import { ToastType } from "./types"; -import { MediaQuery } from "../media"; //============================================================================= // STYLE INTERFACE @@ -38,7 +39,7 @@ const getValidationColorAttributes = ( // ============================================================================= export const Wrapper = styled(animated.div)` display: flex; - + flex-direction: row; position: ${(props) => (props.$fixed ? "fixed" : "relative")}; margin: ${(props) => (props.$fixed ? "1rem" : 0)}; top: 0; @@ -47,6 +48,8 @@ export const Wrapper = styled(animated.div)` border-radius: 0.5rem; line-height: 0; z-index: 10; + align-items: center; + gap: 2rem; ${MediaQuery.MaxWidth.tablet} { left: 0; @@ -57,9 +60,35 @@ export const Wrapper = styled(animated.div)` background: ${getValidationColorAttributes(props).Background}; border: 1px solid ${getValidationColorAttributes(props).Border}; color: ${getValidationColorAttributes(props).Text}; + `; + }}; +`; + +export const ContentWrapper = styled.div` + display: flex; + align-items: center; + gap: 2rem; + flex: 1; + justify-content: space-between; + + ${MediaQuery.MaxWidth.tablet} { + display: flex; + flex-direction: column; + gap: 0.75rem; + } +`; + +export const TextIconWrapper = styled(animated.div)` + display: flex; + flex-direction: row; + align-items: start; + + ${(props) => { + return css` & > svg { + flex-shrink: 0; width: 1.5rem; - height: 1.5rem; + height: 1.625rem; margin-right: 0.5rem; color: ${getValidationColorAttributes(props).Icon}; } @@ -70,8 +99,6 @@ export const Wrapper = styled(animated.div)` export const TextContainer = styled.div` display: flex; flex-direction: column; - padding-right: 2rem; - flex: 1; `; export const Title = styled(Text.H4)` @@ -96,6 +123,17 @@ export const Description = styled.div` }} `; +export const ActionButton = styled(Button.Small)` + font-weight: 600; + align-self: center; + white-space: nowrap; + + ${MediaQuery.MaxWidth.tablet} { + align-self: start; + margin-left: 2rem; + } +`; + export const DismissButton = styled(ClickableIcon)` padding: 0.75rem; margin: -0.75rem; diff --git a/src/toast/toast.tsx b/src/toast/toast.tsx index f3edacf3a..076d00c78 100644 --- a/src/toast/toast.tsx +++ b/src/toast/toast.tsx @@ -11,13 +11,17 @@ import { easings, useSpring } from "react-spring"; import { MediaWidths } from "../spec/media-spec"; import { Text } from "../text"; import { + ActionButton, + ContentWrapper, Description, DismissButton, TextContainer, + TextIconWrapper, Title, Wrapper, } from "./toast.styles"; import { ToastProps } from "./types"; +import React from "react"; const DEFAULT_AUTO_DISMISS_TIME = 4000; @@ -29,6 +33,7 @@ export const Toast = ({ autoDismissTime = DEFAULT_AUTO_DISMISS_TIME, onDismiss, fixed = true, + actionButton, ...otherProps }: ToastProps) => { // ============================================================================= @@ -110,23 +115,45 @@ export const Toast = ({ $fixed={fixed} {...otherProps} > - {renderIcon()} - - {title && ( - - {title} - - )} - {label && ( - - {!title ? ( - {label} - ) : ( - {label} + + + {renderIcon()} + + {title && + (React.isValidElement(title) ? ( + title + ) : ( + + {title} + + ))} + {label && ( + + {!title ? ( + React.isValidElement(label) ? ( + label + ) : ( + {label} + ) + ) : React.isValidElement(label) ? ( + label + ) : ( + {label} + )} + )} - + + + + {actionButton && ( + + {actionButton.label} + )} - + diff --git a/src/toast/types.ts b/src/toast/types.ts index 2e983ab85..c7df2d9e8 100644 --- a/src/toast/types.ts +++ b/src/toast/types.ts @@ -1,20 +1,28 @@ -import React from "react"; +import React, { HTMLAttributes } from "react"; export type ToastType = "success" | "warning" | "error" | "info"; -export interface ToastProps extends React.HTMLAttributes { +export interface ActionButtonProps { + label: string; + onClick: () => void; +} + +export interface ToastProps + extends Omit, "title"> { /** The type of Toast. Control the display */ type: ToastType; /** The content of the Toast. If a `title` is provided, this will act as a description label */ - label: string; + label: string | React.ReactNode; /** The title of the Toast */ - title?: string | undefined; + title?: string | React.ReactNode | undefined; /** If specified, the Toast will be automatically dismissed after 4 seconds */ autoDismiss?: boolean | undefined; /** Time until auto dismissal in milliseconds. Requires `autoDismiss` to be `true` */ autoDismissTime?: number | undefined; /** If given, the function will be called when the Toast is dismissed */ - onDismiss?: () => void; + onDismiss?: (() => void) | undefined; /** Specifies if Toast should be fixed to top. Defaults to true */ fixed?: boolean | undefined; + /** If given, will display an actionButton with the given title and run the given function upon clicking of the button */ + actionButton?: ActionButtonProps | undefined; } diff --git a/stories/toast/props-table.tsx b/stories/toast/props-table.tsx index 481d60431..00f7aadd5 100644 --- a/stories/toast/props-table.tsx +++ b/stories/toast/props-table.tsx @@ -38,7 +38,7 @@ const DATA: ApiTableSectionProps[] = [ The title of the Toast ), - propTypes: [`string`], + propTypes: [`string | JSX.Element`], defaultValue: "", }, { @@ -49,7 +49,7 @@ const DATA: ApiTableSectionProps[] = [ display the content information. ), - propTypes: [`string`], + propTypes: [`string | JSX.Element`], defaultValue: "", mandatory: true, }, @@ -77,16 +77,6 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["number"], defaultValue: "4000", }, - { - name: "onDismiss", - description: ( - <> - Called when the Toast is dismissed, either - by user action or from auto dismiss. - - ), - propTypes: ["() => void"], - }, { name: "fixed", description: ( @@ -99,6 +89,35 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["boolean"], defaultValue: "true", }, + { + name: "actionButton", + description: ( + <> + Consist of label and onClick, + which dictates what the label of the button is and what + happens when the button is clicked on + + ), + propTypes: ["ActionButtonProps"], + }, + ], + }, + { + name: "ActionButtonProps", + attributes: [ + { + name: "label", + mandatory: true, + description: "The label of the button", + propTypes: ["string"], + }, + { + name: "onClick", + mandatory: true, + description: + "The function that should be rendered when the action button is clicked.", + propTypes: ["() => void"], + }, ], }, ]; diff --git a/stories/toast/toast.mdx b/stories/toast/toast.mdx index 630776e7b..a02d2ceb1 100644 --- a/stories/toast/toast.mdx +++ b/stories/toast/toast.mdx @@ -34,6 +34,18 @@ This example demonstrates the default positioning of the Toast. It remains fixed +Using JSX Element Titles/Labels + +This example demonstrates how the toast will be displayed when a JSX element is passed into the title & label. + + + +With an Action Button + +This example demonstrates how the action button works. + + + Component API diff --git a/stories/toast/toast.stories.tsx b/stories/toast/toast.stories.tsx index 96d70096d..eebbbf104 100644 --- a/stories/toast/toast.stories.tsx +++ b/stories/toast/toast.stories.tsx @@ -2,6 +2,9 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Button } from "src/button"; import { Toast } from "src/toast"; +import { Text } from "src/text"; +import { Card } from "src/card"; +import { Color } from "src/color"; type Component = typeof Toast; @@ -14,6 +17,10 @@ export default meta; export const Default: StoryObj = { render: () => { + const customActionButton = { + label: "Click me", + onClick: () => console.log("This function is called"), + }; return ( <> = { docs: { story: { inline: false, iframeHeight: 300 } }, }, }; + +export const WithJSXTitleAndLabel: StoryObj = { + render: () => { + const title = ( + + This is a JSX Element + + ); + + const label = ( + + The + + label + + and title were passed in as JSX Elements + + ); + return ( + <> + +
    + +
    + +
    + + + ); + }, +}; + +export const WithActionButton: StoryObj = { + render: () => { + const customActionButton = { + label: "Click me", + onClick: () => console.log("This function is called"), + }; + return ( + <> + +
    + +
    + +
    + + + ); + }, +}; From d124b7b58411bfcfd4f3853e62e099e462e447e6 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 7 Jun 2024 16:59:43 +0800 Subject: [PATCH 0163/1949] [MOL-15775][RL] Document common patterns --- .../toggle-5-composite-section.stories.tsx | 67 +++++++------ stories/toggle/toggle-6-examples.mdx | 25 +++++ stories/toggle/toggle-6-examples.stories.tsx | 96 +++++++++++++++++++ 3 files changed, 158 insertions(+), 30 deletions(-) create mode 100644 stories/toggle/toggle-6-examples.mdx create mode 100644 stories/toggle/toggle-6-examples.stories.tsx diff --git a/stories/toggle/toggle-5-composite-section.stories.tsx b/stories/toggle/toggle-5-composite-section.stories.tsx index 5f16a345d..10623c9ca 100644 --- a/stories/toggle/toggle-5-composite-section.stories.tsx +++ b/stories/toggle/toggle-5-composite-section.stories.tsx @@ -1,5 +1,4 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { useState } from "react"; import { Toggle } from "../../src"; import { Form } from "../../src/form"; import { Variants } from "./doc-elements"; @@ -12,6 +11,17 @@ const meta: Meta = { }; export default meta; +const ChildComponent = () => ( + <> + Additional content can be shown here. You can add{" "} + bold text or{" "} + + links + + . + +); + export const CheckboxType: StoryObj = { render: () => { return ( @@ -19,8 +29,8 @@ export const CheckboxType: StoryObj = { , - show: true, + children: , + collapsible: false, }} > Text @@ -28,8 +38,8 @@ export const CheckboxType: StoryObj = { , - show: true, + children: , + collapsible: false, }} checked > @@ -39,8 +49,8 @@ export const CheckboxType: StoryObj = { indicator disabled compositeSection={{ - children: , - show: true, + children: , + collapsible: false, }} > Text @@ -50,8 +60,8 @@ export const CheckboxType: StoryObj = { disabled checked compositeSection={{ - children: , - show: true, + children: , + collapsible: false, }} > Text @@ -60,8 +70,8 @@ export const CheckboxType: StoryObj = { indicator error compositeSection={{ - children: , - show: true, + children: , + collapsible: false, }} > Text @@ -77,54 +87,54 @@ export const RadioType: StoryObj = { , - show: true, + children: , + collapsible: false, }} > Text , - show: true, + children: , + collapsible: false, }} > Text , - show: true, + children: , + collapsible: false, }} > Text , - show: true, + children: , + collapsible: false, }} > Text , - show: true, + children: , + collapsible: false, }} error > @@ -142,8 +152,7 @@ export const Collapsible: StoryObj = { indicator checked compositeSection={{ - children: , - show: true, + children: , collapsible: true, }} > @@ -167,7 +176,6 @@ export const CollapsibleWithError: StoryObj = { errorMessage="Invalid field" /> ), - show: true, collapsible: true, errors: ["Something went wrong"], }} @@ -193,7 +201,6 @@ export const CollapsibleWithErrorAndDisabled: StoryObj = { errorMessage="Invalid field" /> ), - show: true, collapsible: true, errors: ["Something went wrong"], }} diff --git a/stories/toggle/toggle-6-examples.mdx b/stories/toggle/toggle-6-examples.mdx new file mode 100644 index 000000000..e4f5c5611 --- /dev/null +++ b/stories/toggle/toggle-6-examples.mdx @@ -0,0 +1,25 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../storybook-common"; +import { PropsTable } from "./props-table"; +import * as ToggleExampleStories from "./toggle-6-examples.stories"; + + + +[Back to main](/docs/data-input-toggle--docs#variants) + +Common Patterns + +Additional inputs if selected + +A common use case is to request follow-up inputs from the user only when the +option is selected. These inputs are shown in a collapsible sub-section. When +expanded, errors are shown inline. When collapsed, an error alert is shown. + + + +Dynamic option + +A common use case is for users to add their own options to a list. The user can +also remove this custom option afterwards. This variant cannot be collapsed. + + diff --git a/stories/toggle/toggle-6-examples.stories.tsx b/stories/toggle/toggle-6-examples.stories.tsx new file mode 100644 index 000000000..86657fa16 --- /dev/null +++ b/stories/toggle/toggle-6-examples.stories.tsx @@ -0,0 +1,96 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Toggle } from "../../src"; +import { Form } from "../../src/form"; +import { useState } from "react"; + +type Component = typeof Toggle; + +const meta: Meta = { + title: "Data Input/Toggle/Common patterns", + component: Toggle, +}; +export default meta; + +export const AdditionalInputs: StoryObj = { + render: () => { + const [selected, setSelected] = useState(false); + const [error, setError] = useState(false); + const [value, setValue] = useState(""); + return ( +
    +
    + This field displays error when input value is x +
    + { + setValue(e.target.value); + setError(e.target.value === "x"); + }} + /> + ), + collapsible: true, + errors: error && ["Something went wrong"], + } + } + onChange={() => { + const nextState = !selected; + setSelected(nextState); + setError(nextState && value === "x"); + }} + > + Sample text + +
    + ); + }, +}; + +export const DynamicOption: StoryObj = { + render: () => { + const [selected, setSelected] = useState(true); + const [error, setError] = useState(false); + return ( +
    +
    This option was added by the user
    + , + collapsible: false, + }} + onChange={() => { + setSelected(!selected); + setError(selected); + }} + > + Text + +
    + ); + }, +}; From fc7c6b4024976b9942ec8469a9aa89d942f30728 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 10 Jun 2024 09:43:45 +0800 Subject: [PATCH 0164/1949] [MISC][RL] Bump v2.6.0-canary.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ce9b2ac01..08d486d02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.2", + "version": "2.6.0-canary.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.2", + "version": "2.6.0-canary.3", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index 763e27db8..d17ee1b0f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.2", + "version": "2.6.0-canary.3", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From e1e9fc01c947cce273706f8c2dbfe50be216815c Mon Sep 17 00:00:00 2001 From: shawn wee Date: Mon, 10 Jun 2024 10:17:19 +0800 Subject: [PATCH 0165/1949] [MISC][SW] upgrade to storybook 8 --- .eslintrc | 3 +- .gitignore | 3 +- .storybook/{main.js => main.ts} | 39 +- .storybook/{preview.js => preview.ts} | 5 +- package-lock.json | 12796 +++++++++++++----------- package.json | 26 +- 6 files changed, 6918 insertions(+), 5954 deletions(-) rename .storybook/{main.js => main.ts} (55%) rename .storybook/{preview.js => preview.ts} (94%) diff --git a/.eslintrc b/.eslintrc index bbedcaf8a..e110b5d57 100644 --- a/.eslintrc +++ b/.eslintrc @@ -11,7 +11,8 @@ "plugin:react/recommended", "prettier", "plugin:mdx/recommended", - "plugin:react-hooks/recommended" + "plugin:react-hooks/recommended", + "plugin:storybook/recommended" ], "parserOptions": { "ecmaVersion": 11, diff --git a/.gitignore b/.gitignore index 332362f5d..8af8bca8f 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,5 @@ coverage storybook-static -junit.xml \ No newline at end of file +junit.xml +*storybook.log \ No newline at end of file diff --git a/.storybook/main.js b/.storybook/main.ts similarity index 55% rename from .storybook/main.js rename to .storybook/main.ts index 37333f231..b2fb2d894 100644 --- a/.storybook/main.js +++ b/.storybook/main.ts @@ -1,26 +1,17 @@ +import type { StorybookConfig } from "@storybook/react-webpack5"; import path from "path"; import remarkGfm from "remark-gfm"; -module.exports = { - stories: [ - "../stories/**/!(*.stories).mdx", - "../stories/**/*.stories.@(ts|tsx)", - ], +const config: StorybookConfig = { + stories: ["../stories/**/*.mdx", "../stories/**/*.stories.@(ts|tsx)"], addons: [ + "@storybook/addon-webpack5-compiler-swc", "@storybook/addon-links", "@storybook/addon-essentials", "@storybook/addon-a11y", "@storybook/addon-themes", - { - name: "@storybook/addon-docs", - options: { - mdxPluginOptions: { - mdxCompileOptions: { - remarkPlugins: [remarkGfm], - }, - }, - }, - }, + "@storybook/addon-interactions", + "@storybook/addon-docs", { name: "@storybook/addon-storysource", options: { @@ -33,14 +24,24 @@ module.exports = { ], staticDirs: ["../public"], webpackFinal: async (config) => { - config.resolve.modules = [ + config.resolve!.modules = [ path.resolve(__dirname, ".."), "node_modules", ]; return config; }, - framework: "@storybook/react-webpack5", - docs: { - autodocs: true, + framework: { + name: "@storybook/react-webpack5", + options: {}, }, + swc: () => ({ + jsc: { + transform: { + react: { + runtime: "automatic", + }, + }, + }, + }), }; +export default config; diff --git a/.storybook/preview.js b/.storybook/preview.ts similarity index 94% rename from .storybook/preview.js rename to .storybook/preview.ts index b06f3f496..9febaa69c 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.ts @@ -1,5 +1,7 @@ import { withThemeFromJSXProvider } from "@storybook/addon-themes"; import { INITIAL_VIEWPORTS } from "@storybook/addon-viewport"; +import type { Preview } from "@storybook/react"; +import { ThemeProvider } from "styled-components"; import { BaseTheme, BookingSGTheme, @@ -7,9 +9,8 @@ import { MyLegacyTheme, RBSTheme, } from "../src/theme"; -import { ThemeProvider } from "styled-components"; -const preview = { +const preview: Preview = { decorators: [ withThemeFromJSXProvider({ themes: { diff --git a/package-lock.json b/package-lock.json index 08d486d02..26d7173bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,22 +23,23 @@ "@dnd-kit/core": "^6.0.8", "@dnd-kit/sortable": "^7.0.2", "@lifesg/react-icons": "^1.5.0", - "@react-theming/storybook-addon": "^1.1.10", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-image": "^3.0.3", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", - "@storybook/addon-a11y": "^7.4.6", - "@storybook/addon-actions": "^7.4.6", - "@storybook/addon-essentials": "^7.4.6", - "@storybook/addon-interactions": "^7.4.6", - "@storybook/addon-links": "^7.4.6", - "@storybook/addon-storysource": "^7.6.4", - "@storybook/addon-themes": "^7.5.1", - "@storybook/react": "^7.4.6", - "@storybook/react-webpack5": "^7.4.6", - "@storybook/testing-library": "0.2.2", + "@storybook/addon-a11y": "^8.1.6", + "@storybook/addon-docs": "^8.1.6", + "@storybook/addon-essentials": "^8.1.6", + "@storybook/addon-interactions": "^8.1.6", + "@storybook/addon-links": "^8.1.6", + "@storybook/addon-storysource": "^8.1.6", + "@storybook/addon-themes": "^8.1.6", + "@storybook/addon-webpack5-compiler-swc": "^1.0.3", + "@storybook/blocks": "^8.1.6", + "@storybook/react": "^8.1.6", + "@storybook/react-webpack5": "^8.1.6", + "@storybook/test": "^8.1.6", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@types/jest": "^27.4.1", @@ -59,6 +60,7 @@ "eslint-plugin-mdx": "^2.0.4", "eslint-plugin-react": "^7.29.4", "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-storybook": "^0.8.0", "html-react-parser": "^2.0.0", "husky": "^7.0.4", "identity-obj-proxy": "^3.0.0", @@ -89,7 +91,7 @@ "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.2", "rollup-plugin-typescript2": "^0.36.0", - "storybook": "^7.4.6", + "storybook": "^8.1.6", "style-loader": "^2.0.0", "styled-components": "^5.3.5", "typescript": "^4.8.2" @@ -2408,314 +2410,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@codemirror/autocomplete": { - "version": "0.19.15", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-0.19.15.tgz", - "integrity": "sha512-GQWzvvuXxNUyaEk+5gawbAD8s51/v2Chb++nx0e2eGWrphWk42isBtzOMdc3DxrxrZtPZ55q2ldNp+6G8KJLIQ==", - "dev": true, - "dependencies": { - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.4", - "@codemirror/text": "^0.19.2", - "@codemirror/tooltip": "^0.19.12", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.0" - } - }, - "node_modules/@codemirror/basic-setup": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@codemirror/basic-setup/-/basic-setup-0.19.3.tgz", - "integrity": "sha512-2hfO+QDk/HTpQzeYk1NyL1G9D5L7Sj78dtaQP8xBU42DKU9+OBPF5MdjLYnxP0jKzm6IfQfsLd89fnqW3rBVfQ==", - "deprecated": "In version 6.0, this package has been renamed to just 'codemirror'", - "dev": true, - "dependencies": { - "@codemirror/autocomplete": "^0.19.0", - "@codemirror/closebrackets": "^0.19.0", - "@codemirror/commands": "^0.19.0", - "@codemirror/comment": "^0.19.0", - "@codemirror/fold": "^0.19.0", - "@codemirror/gutter": "^0.19.0", - "@codemirror/highlight": "^0.19.0", - "@codemirror/history": "^0.19.0", - "@codemirror/language": "^0.19.0", - "@codemirror/lint": "^0.19.0", - "@codemirror/matchbrackets": "^0.19.0", - "@codemirror/rectangular-selection": "^0.19.2", - "@codemirror/search": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.31" - } - }, - "node_modules/@codemirror/closebrackets": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/closebrackets/-/closebrackets-0.19.2.tgz", - "integrity": "sha512-ClMPzPcPP0eQiDcVjtVPl6OLxgdtZSYDazsvT0AKl70V1OJva0eHgl4/6kCW3RZ0pb2n34i9nJz4eXCmK+TYDA==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/autocomplete", - "dev": true, - "dependencies": { - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.2", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.44" - } - }, - "node_modules/@codemirror/commands": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-0.19.8.tgz", - "integrity": "sha512-65LIMSGUGGpY3oH6mzV46YWRrgao6NmfJ+AuC7jNz3K5NPnH6GCV1H5I6SwOFyVbkiygGyd0EFwrWqywTBD1aw==", - "dev": true, - "dependencies": { - "@codemirror/language": "^0.19.0", - "@codemirror/matchbrackets": "^0.19.0", - "@codemirror/state": "^0.19.2", - "@codemirror/text": "^0.19.6", - "@codemirror/view": "^0.19.22", - "@lezer/common": "^0.15.0" - } - }, - "node_modules/@codemirror/comment": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/comment/-/comment-0.19.1.tgz", - "integrity": "sha512-uGKteBuVWAC6fW+Yt8u27DOnXMT/xV4Ekk2Z5mRsiADCZDqYvryrJd6PLL5+8t64BVyocwQwNfz1UswYS2CtFQ==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/commands", - "dev": true, - "dependencies": { - "@codemirror/state": "^0.19.9", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "node_modules/@codemirror/fold": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@codemirror/fold/-/fold-0.19.4.tgz", - "integrity": "sha512-0SNSkRSOa6gymD6GauHa3sxiysjPhUC0SRVyTlvL52o0gz9GHdc8kNqNQskm3fBtGGOiSriGwF/kAsajRiGhVw==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/language", - "dev": true, - "dependencies": { - "@codemirror/gutter": "^0.19.0", - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.22" - } - }, - "node_modules/@codemirror/gutter": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/gutter/-/gutter-0.19.9.tgz", - "integrity": "sha512-PFrtmilahin1g6uL27aG5tM/rqR9DZzZYZsIrCXA5Uc2OFTFqx4owuhoU9hqfYxHp5ovfvBwQ+txFzqS4vog6Q==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/view", - "dev": true, - "dependencies": { - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.23" - } - }, - "node_modules/@codemirror/highlight": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@codemirror/highlight/-/highlight-0.19.8.tgz", - "integrity": "sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A==", - "deprecated": "As of 0.20.0, this package has been split between @lezer/highlight and @codemirror/language", - "dev": true, - "dependencies": { - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.3", - "@codemirror/view": "^0.19.39", - "@lezer/common": "^0.15.0", - "style-mod": "^4.0.0" - } - }, - "node_modules/@codemirror/history": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/history/-/history-0.19.2.tgz", - "integrity": "sha512-unhP4t3N2smzmHoo/Yio6ueWi+il8gm9VKrvi6wlcdGH5fOfVDNkmjHQ495SiR+EdOG35+3iNebSPYww0vN7ow==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/commands", - "dev": true, - "dependencies": { - "@codemirror/state": "^0.19.2", - "@codemirror/view": "^0.19.0" - } - }, - "node_modules/@codemirror/lang-javascript": { - "version": "0.19.7", - "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-0.19.7.tgz", - "integrity": "sha512-DL9f3JLqOEHH9cIwEqqjnP5bkjdVXeECksLtV+/MbPm+l4H+AG+PkwZaJQ2oR1GfPZKh8MVSIE94aGWNkJP8WQ==", - "dev": true, - "dependencies": { - "@codemirror/autocomplete": "^0.19.0", - "@codemirror/highlight": "^0.19.7", - "@codemirror/language": "^0.19.0", - "@codemirror/lint": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/javascript": "^0.15.1" - } - }, - "node_modules/@codemirror/language": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-0.19.10.tgz", - "integrity": "sha512-yA0DZ3RYn2CqAAGW62VrU8c4YxscMQn45y/I9sjBlqB1e2OTQLg4CCkMBuMSLXk4xaqjlsgazeOQWaJQOKfV8Q==", - "dev": true, - "dependencies": { - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.5", - "@lezer/lr": "^0.15.0" - } - }, - "node_modules/@codemirror/legacy-modes": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-0.19.1.tgz", - "integrity": "sha512-vYPLsD/ON+3SXhlGj9Qb3fpFNNU3Ya/AtDiv/g3OyqVzhh5vs5rAnOvk8xopGWRwppdhlNPD9VyXjiOmZUQtmQ==", - "dev": true, - "dependencies": { - "@codemirror/stream-parser": "^0.19.0" - } - }, - "node_modules/@codemirror/lint": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-0.19.6.tgz", - "integrity": "sha512-Pbw1Y5kHVs2J+itQ0uez3dI4qY9ApYVap7eNfV81x1/3/BXgBkKfadaw0gqJ4h4FDG7OnJwb0VbPsjJQllHjaA==", - "dev": true, - "dependencies": { - "@codemirror/gutter": "^0.19.4", - "@codemirror/panel": "^0.19.0", - "@codemirror/rangeset": "^0.19.1", - "@codemirror/state": "^0.19.4", - "@codemirror/tooltip": "^0.19.16", - "@codemirror/view": "^0.19.22", - "crelt": "^1.0.5" - } - }, - "node_modules/@codemirror/matchbrackets": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@codemirror/matchbrackets/-/matchbrackets-0.19.4.tgz", - "integrity": "sha512-VFkaOKPNudAA5sGP1zikRHCEKU0hjYmkKpr04pybUpQvfTvNJXlReCyP0rvH/1iEwAGPL990ZTT+QrLdu4MeEA==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/language", - "dev": true, - "dependencies": { - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.0" - } - }, - "node_modules/@codemirror/panel": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/panel/-/panel-0.19.1.tgz", - "integrity": "sha512-sYeOCMA3KRYxZYJYn5PNlt9yNsjy3zTNTrbYSfVgjgL9QomIVgOJWPO5hZ2sTN8lufO6lw0vTBsIPL9MSidmBg==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/view", - "dev": true, - "dependencies": { - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "node_modules/@codemirror/rangeset": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/rangeset/-/rangeset-0.19.9.tgz", - "integrity": "sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/state", - "dev": true, - "dependencies": { - "@codemirror/state": "^0.19.0" - } - }, - "node_modules/@codemirror/rectangular-selection": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/rectangular-selection/-/rectangular-selection-0.19.2.tgz", - "integrity": "sha512-AXK/p5eGwFJ9GJcLfntqN4dgY+XiIF7eHfXNQJX5HhQLSped2wJE6WuC1rMEaOlcpOqlb9mrNi/ZdUjSIj9mbA==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/view", - "dev": true, - "dependencies": { - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.4", - "@codemirror/view": "^0.19.48" - } - }, - "node_modules/@codemirror/search": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-0.19.10.tgz", - "integrity": "sha512-qjubm69HJixPBWzI6HeEghTWOOD8NXiHOTRNvdizqs8xWRuFChq9zkjD3XiAJ7GXSTzCuQJnAP9DBBGCLq4ZIA==", - "dev": true, - "dependencies": { - "@codemirror/panel": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.3", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.34", - "crelt": "^1.0.5" - } - }, - "node_modules/@codemirror/state": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-0.19.9.tgz", - "integrity": "sha512-psOzDolKTZkx4CgUqhBQ8T8gBc0xN5z4gzed109aF6x7D7umpDRoimacI/O6d9UGuyl4eYuDCZmDFr2Rq7aGOw==", - "dev": true, - "dependencies": { - "@codemirror/text": "^0.19.0" - } - }, - "node_modules/@codemirror/stream-parser": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/stream-parser/-/stream-parser-0.19.9.tgz", - "integrity": "sha512-WTmkEFSRCetpk8xIOvV2yyXdZs3DgYckM0IP7eFi4ewlxWnJO/H4BeJZLs4wQaydWsAqTQoDyIwNH1BCzK5LUQ==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/language", - "dev": true, - "dependencies": { - "@codemirror/highlight": "^0.19.0", - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.0", - "@lezer/common": "^0.15.0", - "@lezer/lr": "^0.15.0" - } - }, - "node_modules/@codemirror/text": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@codemirror/text/-/text-0.19.6.tgz", - "integrity": "sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/state", - "dev": true - }, - "node_modules/@codemirror/theme-one-dark": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-0.19.0.tgz", - "integrity": "sha512-Xlk68ARreanFveE+KvZJY4HxecNr+VKDOR61O8l3kzlQ0qvxNXA0KAp1xu4p32pA9jzJqJi5haIgdfWSZogXZg==", - "dev": true, - "dependencies": { - "@codemirror/highlight": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "node_modules/@codemirror/tooltip": { - "version": "0.19.16", - "resolved": "https://registry.npmjs.org/@codemirror/tooltip/-/tooltip-0.19.16.tgz", - "integrity": "sha512-zxKDHryUV5/RS45AQL+wOeN+i7/l81wK56OMnUPoTSzCWNITfxHn7BToDsjtrRKbzHqUxKYmBnn/4hPjpZ4WJQ==", - "deprecated": "As of 0.20.0, this package has been merged into @codemirror/view", - "dev": true, - "dependencies": { - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "node_modules/@codemirror/view": { - "version": "0.19.48", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-0.19.48.tgz", - "integrity": "sha512-0eg7D2Nz4S8/caetCTz61rK0tkHI17V/d15Jy0kLOT8dTLGGNJUponDnW28h2B6bERmPlVHKh8MJIr5OCp1nGw==", - "dev": true, - "dependencies": { - "@codemirror/rangeset": "^0.19.5", - "@codemirror/state": "^0.19.3", - "@codemirror/text": "^0.19.0", - "style-mod": "^4.0.0", - "w3c-keyname": "^2.2.4" - } - }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -2824,10 +2518,26 @@ "react": ">=16.8.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ "arm" ], @@ -2841,9 +2551,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ "arm64" ], @@ -2857,9 +2567,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], @@ -2873,9 +2583,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ "arm64" ], @@ -2889,9 +2599,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ "x64" ], @@ -2905,9 +2615,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ "arm64" ], @@ -2921,9 +2631,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], @@ -2937,9 +2647,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "cpu": [ "arm" ], @@ -2953,9 +2663,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "cpu": [ "arm64" ], @@ -2969,9 +2679,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "cpu": [ "ia32" ], @@ -2985,9 +2695,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "cpu": [ "loong64" ], @@ -3001,9 +2711,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "cpu": [ "mips64el" ], @@ -3017,9 +2727,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "cpu": [ "ppc64" ], @@ -3033,9 +2743,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "cpu": [ "riscv64" ], @@ -3049,9 +2759,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "cpu": [ "s390x" ], @@ -3065,9 +2775,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "cpu": [ "x64" ], @@ -3081,9 +2791,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "cpu": [ "x64" ], @@ -3097,9 +2807,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "cpu": [ "x64" ], @@ -3113,9 +2823,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "cpu": [ "x64" ], @@ -3129,9 +2839,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "cpu": [ "arm64" ], @@ -3145,9 +2855,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "cpu": [ "ia32" ], @@ -3161,9 +2871,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "cpu": [ "x64" ], @@ -3313,28 +3023,6 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" }, - "node_modules/@focus-reactive/react-yaml": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@focus-reactive/react-yaml/-/react-yaml-1.1.2.tgz", - "integrity": "sha512-X9/rmfuDHR+beDym2206RsD5m/5EfH26vVuGVbLXy7+BunPcVBRqwe2WbvCyoHloMUX7Ccp2xrLwmmPrvZ9hrA==", - "dev": true, - "dependencies": { - "@codemirror/basic-setup": "^0.19.0", - "@codemirror/commands": "^0.19.3", - "@codemirror/lang-javascript": "^0.19.1", - "@codemirror/legacy-modes": "^0.19.0", - "@codemirror/rangeset": "^0.19.1", - "@codemirror/state": "^0.19.1", - "@codemirror/stream-parser": "^0.19.2", - "@codemirror/theme-one-dark": "^0.19.0", - "@codemirror/tooltip": "^0.19.2", - "@codemirror/view": "^0.19.4", - "js-yaml": "^4.1.0" - }, - "peerDependencies": { - "react": "*" - } - }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -3385,15 +3073,6 @@ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, - "node_modules/@icons/material": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", - "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", - "dev": true, - "peerDependencies": { - "react": "*" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -4021,53 +3700,53 @@ "node": ">=8" } }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "jest-get-type": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "node_modules/@jest/expect-utils/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "optional": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "node_modules/@jest/expect/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4078,11 +3757,13 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/fake-timers/node_modules/chalk": { + "node_modules/@jest/expect/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4094,67 +3775,338 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/fake-timers/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@jest/expect/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "optional": true, + "peer": true, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/@jest/expect/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@jest/expect/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "node_modules/@jest/expect/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/@jest/expect/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", + "optional": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/expect/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", "@types/yargs": "^16.0.0", "chalk": "^4.0.0" }, @@ -4746,6 +4698,8 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -4772,6 +4726,8 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4787,6 +4743,8 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4803,6 +4761,8 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "optional": true, + "peer": true, "engines": { "node": ">=8" } @@ -4812,6 +4772,8 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4819,11 +4781,27 @@ "node": ">=8" } }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "peer": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -4841,6 +4819,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4856,6 +4835,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4872,6 +4852,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -4881,6 +4862,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4946,36 +4928,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", - "dev": true - }, - "node_modules/@lezer/common": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", - "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", - "dev": true - }, - "node_modules/@lezer/javascript": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-0.15.3.tgz", - "integrity": "sha512-8jA2NpOfpWwSPZxRhd9BxK2ZPvGd7nLE3LFTJ5AbMhXAzMHeMjneV6GEVd7dAIee85dtap0jdb6bgOSO0+lfwA==", - "dev": true, - "dependencies": { - "@lezer/lr": "^0.15.0" - } - }, - "node_modules/@lezer/lr": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", - "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", - "dev": true, - "dependencies": { - "@lezer/common": "^0.15.0" - } - }, "node_modules/@lifesg/react-icons": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@lifesg/react-icons/-/react-icons-1.5.0.tgz", @@ -4988,19 +4940,19 @@ } }, "node_modules/@mdx-js/react": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz", - "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", + "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", "dev": true, "dependencies": { - "@types/mdx": "^2.0.0", - "@types/react": ">=16" + "@types/mdx": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" }, "peerDependencies": { + "@types/react": ">=16", "react": ">=16" } }, @@ -5212,63 +5164,6 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", - "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", - "dev": true, - "dependencies": { - "ansi-html": "^0.0.9", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^4.2.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "@types/webpack": "4.x || 5.x", - "react-refresh": ">=0.10.0 <1.0.0", - "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <5.0.0", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x || 5.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@radix-ui/number": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", - "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, "node_modules/@radix-ui/primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", @@ -5278,57 +5173,6 @@ "@babel/runtime": "^7.13.10" } }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", - "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", - "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", @@ -5365,28 +5209,47 @@ } } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", - "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", + "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", - "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", "dev": true, "dependencies": { "@babel/runtime": "^7.13.10", @@ -5430,9 +5293,9 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz", - "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", "dev": true, "dependencies": { "@babel/runtime": "^7.13.10", @@ -5474,23 +5337,14 @@ } } }, - "node_modules/@radix-ui/react-popper": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", - "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", + "node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", "dev": true, "dependencies": { "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { "@types/react": "*", @@ -5507,14 +5361,15 @@ } } }, - "node_modules/@radix-ui/react-portal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", - "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", "dev": true, "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" }, "peerDependencies": { "@types/react": "*", @@ -5555,114 +5410,70 @@ } } }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", - "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", "dev": true, "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1" + "@radix-ui/react-compose-refs": "1.0.1" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-select": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz", - "integrity": "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==", + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/number": "1.0.1", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.4", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.3", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.2", - "@radix-ui/react-portal": "1.0.3", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-previous": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-separator": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.0.3.tgz", - "integrity": "sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==", + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", "dev": true, "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", "dev": true, "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { "@types/react": "*", @@ -5674,267 +5485,30 @@ } } }, - "node_modules/@radix-ui/react-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz", - "integrity": "sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==", + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-toggle-group": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz", - "integrity": "sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==", + "node_modules/@react-native-community/cli": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.8.tgz", + "integrity": "sha512-0lRdgLNaXixWY4BfFRl1J6Ao9Lapo2z+++iE7TD4GAbuxOWJSyFi+KUA8XNfSDyML4jFO02MZgyBPxAWdaminQ==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-toggle": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toolbar": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz", - "integrity": "sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-separator": "1.0.3", - "@radix-ui/react-toggle-group": "1.0.4" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", - "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", - "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", - "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", - "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", - "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", - "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", - "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", - "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", - "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, - "node_modules/@reach/observe-rect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", - "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==", - "dev": true - }, - "node_modules/@react-native-community/cli": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.8.tgz", - "integrity": "sha512-0lRdgLNaXixWY4BfFRl1J6Ao9Lapo2z+++iE7TD4GAbuxOWJSyFi+KUA8XNfSDyML4jFO02MZgyBPxAWdaminQ==", - "dev": true, - "peer": true, + "peer": true, "dependencies": { "@react-native-community/cli-clean": "13.6.8", "@react-native-community/cli-config": "13.6.8", @@ -7247,18 +6821,6 @@ "node": ">=8" } }, - "node_modules/@react-native/codegen/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, "node_modules/@react-native/community-cli-plugin": { "version": "0.74.84", "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.84.tgz", @@ -7547,275 +7109,62 @@ "zdog": ">=1.0" } }, - "node_modules/@react-theming/flatten": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@react-theming/flatten/-/flatten-0.1.1.tgz", - "integrity": "sha512-cieWCbO4xTgl8/LAUTEgiafEiFIcheARteyxXddnUHm/+7POCmRvSE/woHGXlVH7dFBlCbI4y/e5ikMzwBA3CA==", + "node_modules/@rnx-kit/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==", "dev": true, + "peer": true, "dependencies": { - "color": "^3.1.2", - "color-convert": "^2.0.1", - "color-parse": "^1.3.8", - "color-rgba": "^2.1.1", - "color-string": "^1.5.3", - "color-stringify": "^1.2.1", - "flat": "^5.0.0", - "is-color-stop": "^1.1.0", - "rgb-hex": "^3.0.0" + "@types/node": "^18.0.0", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=14.15" } }, - "node_modules/@react-theming/storybook-addon": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@react-theming/storybook-addon/-/storybook-addon-1.1.10.tgz", - "integrity": "sha512-7DHwzPIY4nerTqkUgyQ70IqPSHMycnYgJsYQMAVkT8dsQPuQUUKz2UVjqD0HkPMw3JA+wQuSvY9BpJap5z7fqQ==", + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, + "peer": true, "dependencies": { - "@codemirror/theme-one-dark": "0.19.0", - "@focus-reactive/react-yaml": "^1.1.2", - "@react-theming/flatten": "^0.1.1", - "@react-theming/theme-name": "^1.0.3", - "@react-theming/theme-swatch": "^1.0.0", - "@storybook/addon-devkit": "^1.4.2", - "@usulpro/react-json-view": "^2.0.1", - "color-string": "^1.9.1", - "react-color": "^2.18.0" - }, - "peerDependencies": { - "@storybook/react": "*", - "@storybook/theming": "*", - "react": "*" + "undici-types": "~5.26.4" } }, - "node_modules/@react-theming/storybook-addon/node_modules/@storybook/addon-devkit": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-devkit/-/addon-devkit-1.4.2.tgz", - "integrity": "sha512-ggy34eCzmiKOwgV7xYNjlPClGpmtnYODPJv0vkCKiDyPeVLHocq2UZ7ZkOhQ5GO7TM7aLeeC1JBS00tZId9oLA==", + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "dependencies": { - "@reach/rect": "^0.2.1", - "@storybook/addons": "^6.1.18", - "@storybook/core-events": "^6.1.18", - "@storybook/theming": "^6.1.18", - "deep-equal": "^2.0.2", - "prop-types": "^15.6.2" + "peer": true, + "engines": { + "node": ">=10" }, - "peerDependencies": { - "@storybook/addons": "*", - "@storybook/react": "*", - "react": "*", - "react-dom": "*" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-theming/storybook-addon/node_modules/@storybook/addon-devkit/node_modules/@reach/rect": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.2.1.tgz", - "integrity": "sha512-aZ9RsNHDMQ3zETonikqu9/85iXxj+LPqZ9Gr9UAncj3AufYmGeWG3XG6b37B+7ORH+mkhVpLU2ZlIWxmOe9Cqg==", + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.8", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", + "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", "dev": true, "dependencies": { - "@reach/component-component": "^0.1.3", - "@reach/observe-rect": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.6.2", - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@react-theming/storybook-addon/node_modules/@storybook/addon-devkit/node_modules/@reach/rect/node_modules/@reach/component-component": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@reach/component-component/-/component-component-0.1.3.tgz", - "integrity": "sha512-a1USH7L3bEfDdPN4iNZGvMEFuBfkdG+QNybeyDv8RloVFgZYRoM+KGXyy2KOfEnTUM8QWDRSROwaL3+ts5Angg==", - "dev": true, - "peerDependencies": { - "prop-types": "^15.6.2", - "react": "^16.4.0", - "react-dom": "^16.4.0" - } - }, - "node_modules/@react-theming/storybook-addon/node_modules/@storybook/addon-devkit/node_modules/@storybook/theming": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", - "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@react-theming/storybook-addon/node_modules/@storybook/client-logger": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz", - "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==", - "dev": true, - "dependencies": { - "core-js": "^3.8.2", - "global": "^4.4.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@react-theming/storybook-addon/node_modules/@storybook/core-events": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.16.tgz", - "integrity": "sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==", - "dev": true, - "dependencies": { - "core-js": "^3.8.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@react-theming/storybook-addon/node_modules/@usulpro/react-json-view": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@usulpro/react-json-view/-/react-json-view-2.0.1.tgz", - "integrity": "sha512-X8Ik4JmZF2Cu7vZTJQwHIbDqNaJEUEGZmdAPxKe4Ed+Xa3dyVTAeA9ea/nTNCzKRTZBIxvJFXvibpglpJ136BA==", - "dev": true, - "dependencies": { - "color-string": "^1.5.3", - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^6.1.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^15.5.4", - "react-dom": "^16.0.0 || ^15.5.4" - } - }, - "node_modules/@react-theming/storybook-addon/node_modules/@usulpro/react-json-view/node_modules/react-textarea-autosize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", - "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", - "dev": true, - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "react": ">=0.14.0 <17.0.0" - } - }, - "node_modules/@react-theming/storybook-addon/node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.14.0" - } - }, - "node_modules/@react-theming/storybook-addon/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/@react-theming/storybook-addon/node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/@react-theming/theme-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@react-theming/theme-name/-/theme-name-1.0.3.tgz", - "integrity": "sha512-5tYnKIG3wUJ3GTX50ldeU+nxLTEU8WXEGsHk8mWeG9XGC4VxKIp2gSqS6B/opCGmfuIFm459Dtru8PSuEXiJJg==", - "dev": true, - "dependencies": { - "color-name-list": "^4.7.1", - "nearest-color": "^0.4.4" - } - }, - "node_modules/@react-theming/theme-swatch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-theming/theme-swatch/-/theme-swatch-1.0.0.tgz", - "integrity": "sha512-tOzDTUbFB5uQLMVHJ4fXWYZ4i7JIKjyrS7SlHDoscRZqM69lmT+s9fSZoD1/InTdX0M7Jh8thXF0SzeoxnD1/Q==", - "dev": true, - "peerDependencies": { - "react": "^16.8.6 || ^17.0.0" - } - }, - "node_modules/@rnx-kit/chromium-edge-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", - "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "^18.0.0", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=14.15" - } - }, - "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/@types/node": { - "version": "18.19.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", - "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", - "dev": true, - "peer": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.8", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", - "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.30.3" - }, - "engines": { - "node": ">=14.0.0" + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0||^4.0.0" @@ -7966,6 +7315,18 @@ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", @@ -7985,12 +7346,12 @@ } }, "node_modules/@storybook/addon-a11y": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-7.6.19.tgz", - "integrity": "sha512-92SOapbXukkO0RlrA0+8qa61NlCGSUFM7n5DfAA6tobIfhBAhfsEi7I9Q/0F95SCAgJoVVQdeIGKdvHjxO8DAg==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.1.6.tgz", + "integrity": "sha512-qmXuquveulY2eEWZPbNBXbvR4CgktQ7ZfKzNY41Y9m7qHd6wdjuS4CpcDal2pFtGStuYNnmxEOSxNKKtA1Ftlw==", "dev": true, "dependencies": { - "@storybook/addon-highlight": "7.6.19", + "@storybook/addon-highlight": "8.1.6", "axe-core": "^4.2.0" }, "funding": { @@ -7999,12 +7360,12 @@ } }, "node_modules/@storybook/addon-actions": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.19.tgz", - "integrity": "sha512-ATLrA5QKFJt7tIAScRHz5T3eBQ+RG3jaZk08L7gChvyQZhei8knWwePElZ7GaWbCr9BgznQp1lQUUXq/UUblAQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.6.tgz", + "integrity": "sha512-EbiAdbtXN/UM4by3+qisbrQmElaIfahgNqffbst6GiCTmUCVE5if6geL1mzKd/u/rZOzx5g0EG76x8N9yDjOtg==", "dev": true, "dependencies": { - "@storybook/core-events": "7.6.19", + "@storybook/core-events": "8.1.6", "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", "dequal": "^2.0.2", @@ -8017,9 +7378,9 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.19.tgz", - "integrity": "sha512-Nu3LAZODRSV2e5bOroKm/Jp6BIFzwu/nJxD5OvLWkkwNCh+vDXUFbbaVrZf5xRL+fHd9iLFPtWbJQpF/w7UsCw==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.1.6.tgz", + "integrity": "sha512-mrBG5mkcMg6vpRUtNxyYaseD4ucrG+mZiqZnXcx8LWzwDMOd4mOODvap286z+Si0Fl1etbGDDhPU9+hV+o1arw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -8032,12 +7393,13 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.19.tgz", - "integrity": "sha512-cl6PCNEwihDjuWIUsKTyDNKk+/IE4J3oMbSY5AZV/9Z0jJbpMV2shVm5DMZm5LhCCVcu5obWcxCIa4FMIMJAMQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.1.6.tgz", + "integrity": "sha512-hDMsu4yRP/ySb/G7hbd7nSFhVNz+F9hnizJGJX4XGuiSx7rAEYjvfKQKkawxTP+VeAw6iZPj1fukvOrMCQ0xxQ==", "dev": true, "dependencies": { - "@storybook/blocks": "7.6.19", + "@storybook/blocks": "8.1.6", + "dequal": "^2.0.2", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, @@ -8047,94 +7409,67 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.19.tgz", - "integrity": "sha512-nv+9SR/NOtM8Od2esOXHcg0NQT8Pk8BMUyGwZu5Q3MLI4JxNVEG65dY0IP2j6Knc4UtlvQTpM0f7m5xp4seHjQ==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.3.1", - "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.6.19", - "@storybook/client-logger": "7.6.19", - "@storybook/components": "7.6.19", - "@storybook/csf-plugin": "7.6.19", - "@storybook/csf-tools": "7.6.19", - "@storybook/global": "^5.0.0", - "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.6.19", - "@storybook/postinstall": "7.6.19", - "@storybook/preview-api": "7.6.19", - "@storybook/react-dom-shim": "7.6.19", - "@storybook/theming": "7.6.19", - "@storybook/types": "7.6.19", - "fs-extra": "^11.1.0", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/addon-docs/node_modules/@storybook/theming": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.19.tgz", - "integrity": "sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.1.6.tgz", + "integrity": "sha512-ejTbjDhaHn6IeTma/pwn8OutDzIqbMJKNhZx24W4FE/qvYInZIK/9gYPU9/oLKZ7FImqP3s1e4+RxDBgsq21lA==", "dev": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.19", + "@babel/core": "^7.24.4", + "@mdx-js/react": "^3.0.0", + "@storybook/blocks": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/components": "8.1.6", + "@storybook/csf-plugin": "8.1.6", + "@storybook/csf-tools": "8.1.6", "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "@storybook/node-logger": "8.1.6", + "@storybook/preview-api": "8.1.6", + "@storybook/react-dom-shim": "8.1.6", + "@storybook/theming": "8.1.6", + "@storybook/types": "8.1.6", + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "fs-extra": "^11.1.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "rehype-external-links": "^3.0.0", + "rehype-slug": "^6.0.0", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/@storybook/addon-essentials": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.19.tgz", - "integrity": "sha512-SC33ZEQ5YaOt9wDkrdZmwQgqPWo9om/gqnyif06eug3SwrTe9JjO5iq1PIBfQodLD9MAxr9cwBvO0NG505oszQ==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "7.6.19", - "@storybook/addon-backgrounds": "7.6.19", - "@storybook/addon-controls": "7.6.19", - "@storybook/addon-docs": "7.6.19", - "@storybook/addon-highlight": "7.6.19", - "@storybook/addon-measure": "7.6.19", - "@storybook/addon-outline": "7.6.19", - "@storybook/addon-toolbars": "7.6.19", - "@storybook/addon-viewport": "7.6.19", - "@storybook/core-common": "7.6.19", - "@storybook/manager-api": "7.6.19", - "@storybook/node-logger": "7.6.19", - "@storybook/preview-api": "7.6.19", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.1.6.tgz", + "integrity": "sha512-8ve9eM9dL6JsC5hV98unXtADvwyhIZoa3iWSeTicxWab49tvAfIM9ExwcWmUyPaB4m5q45jBSBXg66bzW2+TFw==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "8.1.6", + "@storybook/addon-backgrounds": "8.1.6", + "@storybook/addon-controls": "8.1.6", + "@storybook/addon-docs": "8.1.6", + "@storybook/addon-highlight": "8.1.6", + "@storybook/addon-measure": "8.1.6", + "@storybook/addon-outline": "8.1.6", + "@storybook/addon-toolbars": "8.1.6", + "@storybook/addon-viewport": "8.1.6", + "@storybook/core-common": "8.1.6", + "@storybook/manager-api": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/preview-api": "8.1.6", "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/@storybook/addon-highlight": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.19.tgz", - "integrity": "sha512-/pApl0oiVU1CQ8xETRNDLDthMBjeTmvFnTRq8RJ9m0JYTrSsoyHDmj9zS4K1k9gReqijE7brslhP8d2tblBpNw==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.6.tgz", + "integrity": "sha512-QT95TS4OT0SJJVz/1m038COUdS2yWukQOwyq2rCgSM6nU3OHOPf/CldDK4Sdch7Z4jV9kRdRS0Pu4FB5SV+uOw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -8145,14 +7480,15 @@ } }, "node_modules/@storybook/addon-interactions": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.6.19.tgz", - "integrity": "sha512-lMQDu6JT2LXDWcRnIGvrKRk/W+67zOtUNpDKwoVuvM5eHVJcza5SPV6v8yXDLCHLOt7RZ15h6LT2uXabfKpcww==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.1.6.tgz", + "integrity": "sha512-/5i3wXuNnduTN807BNSX7nJ0a3eQPjN49yUAfLtYtIoNCEsLAza2F5yt8aadKOj1rR6xqROc7y8NMhhC5Cp50A==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.19", - "jest-mock": "^27.0.6", + "@storybook/instrumenter": "8.1.6", + "@storybook/test": "8.1.6", + "@storybook/types": "8.1.6", "polished": "^4.2.2", "ts-dedent": "^2.2.0" }, @@ -8162,12 +7498,12 @@ } }, "node_modules/@storybook/addon-links": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.19.tgz", - "integrity": "sha512-qMIFfcsMf4olxhYUHUV2ZJhxphh6Xpf1DMd0lxKqAibfxl/sX1m0rJkyiqWSBxbCmAy/pwdgqEOJ1lpDUsJ33w==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.1.6.tgz", + "integrity": "sha512-EuSXoK+tpApjW08ZiC4yE9ePdJkIu36AFPJHA6FVierVU31klW+cbFqps88JpmALZkrlf+pzKf3uBIGLrkBSAw==", "dev": true, "dependencies": { - "@storybook/csf": "^0.1.2", + "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", "ts-dedent": "^2.0.0" }, @@ -8176,7 +7512,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" }, "peerDependenciesMeta": { "react": { @@ -8185,9 +7521,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.19.tgz", - "integrity": "sha512-n+cfhVXXouBv9oQr3a77vvip5dTznaNoBDWMafP2ohauc8jBlAxeBwCjk5r3pyThMRIFCTG/ypZrhiJcSJT3bw==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.1.6.tgz", + "integrity": "sha512-afG6XzClrkBQ9ZUZQs0rI9z/RYB+qhebG5k1NTCGYJnj7K4c+jso9nQ9vmypOBqlYKwTT2ZG+9xSK1/IhudEvg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -8199,9 +7535,9 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.19.tgz", - "integrity": "sha512-Tt4MrfjK5j/Mdh8nJ8ccVyh78Dy7aiEPxO31YVvr5XUkge0pDi1PX328mHRDPur0i56NM8ssVbekWBZr+9MxlA==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.1.6.tgz", + "integrity": "sha512-YjH3L4kxln0fLF77oDGJ2KF1I0RNrBQ9FRtqZkGMUbplxwYU0BBrguSgVeGxTLN1q/69LmL6wjFP4nLzqZARhA==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -8213,12 +7549,12 @@ } }, "node_modules/@storybook/addon-storysource": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-storysource/-/addon-storysource-7.6.19.tgz", - "integrity": "sha512-wQw2vIdiRgreYwsIRyUrCzZiRGON5v0Y9JfQN6uBUYM70/PebUPfC+dptOfKa9U8kf2eidtYeLo5rC71pFxOSw==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-storysource/-/addon-storysource-8.1.6.tgz", + "integrity": "sha512-Ia/KH1bjdABtZjG/ql5nlB2IHpIuMJae1Etp6Mq90Le9Dy4+F8exjCKRf+M3LrsDokTlobgcEBslHjCKj6Wjuw==", "dev": true, "dependencies": { - "@storybook/source-loader": "7.6.19", + "@storybook/source-loader": "8.1.6", "estraverse": "^5.2.0", "tiny-invariant": "^1.3.1" }, @@ -8228,9 +7564,9 @@ } }, "node_modules/@storybook/addon-themes": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-7.6.19.tgz", - "integrity": "sha512-0IjnAhA/uvUnjfCIwN8hgYgqe49lT5HfiXHkMZUF+8NtLNO3Dne8WGZiVoulMaNzFm1E3dIC2aJTg+DMFh/8Fg==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-8.1.6.tgz", + "integrity": "sha512-h0IwK1fIHBWBAfxWmbXoISutHWRSlQwXb7BGEAsnZ9oQ4xA0REjtpqM6o5IkDFYQtDw0YHUvmBzyHSphA9boww==", "dev": true, "dependencies": { "ts-dedent": "^2.0.0" @@ -8241,9 +7577,9 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.19.tgz", - "integrity": "sha512-+qGbPP2Vo/HoPiS4EJopZ127HGculCV74Hkz6ot7ob6AkYdA1yLMPzWns/ZXNIWm6ab3jV+iq+mQCM/i1qJzvA==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.1.6.tgz", + "integrity": "sha512-d1GciLzD2ZRqh7+b8+JGuCdx8x/MAobhTy+jKeK79d+QKNtPhqZ1OvyUbwObgD6XLF8B/3DvyP3r52lmYMwlnQ==", "dev": true, "funding": { "type": "opencollective", @@ -8251,9 +7587,9 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.19.tgz", - "integrity": "sha512-OQQtJ2kYwImbvE9QiC3I3yR0O0EBgNjq+XSaSS4ixJrvUyesfuB7Lm7RkubhEEiP4yANi9OlbzsqZelmPOnk6w==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.6.tgz", + "integrity": "sha512-4EpEkJW1fPqlHIqG7OQtnAaHh9DPj7k+guXpzWjVwHfF6AE0fXIg7Yx6iVDGPyKkRaagPw6nL8DOr2U8YwK4rQ==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -8263,390 +7599,115 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/addons": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.16.tgz", - "integrity": "sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==", + "node_modules/@storybook/addon-webpack5-compiler-swc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@storybook/addon-webpack5-compiler-swc/-/addon-webpack5-compiler-swc-1.0.3.tgz", + "integrity": "sha512-ahemZdpFN7Ikz2WTy0sLJ38t6OWLLKweeTNOfUh2ARd3x0CqJxAqWLBAFXJke+2KDFUQg9MTE+1rwHEFCPYUvQ==", "dev": true, "dependencies": { - "@storybook/api": "6.5.16", - "@storybook/channels": "6.5.16", - "@storybook/client-logger": "6.5.16", - "@storybook/core-events": "6.5.16", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.16", - "@storybook/theming": "6.5.16", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7" + "@swc/core": "1.5.7", + "swc-loader": "^0.2.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=18" } }, - "node_modules/@storybook/addons/node_modules/@storybook/channels": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.16.tgz", - "integrity": "sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==", + "node_modules/@storybook/blocks": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.1.6.tgz", + "integrity": "sha512-HBp80G9puOejqlBA0iNlV3gUxc7TkBlNIVG2rmhjcvPZUueldxTUGIGvEfTLdEM6nqzNVZT+duXwqeHHnDcynA==", "dev": true, "dependencies": { - "core-js": "^3.8.2", + "@storybook/channels": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/components": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/csf": "^0.1.7", + "@storybook/docs-tools": "8.1.6", + "@storybook/global": "^5.0.0", + "@storybook/icons": "^1.2.5", + "@storybook/manager-api": "8.1.6", + "@storybook/preview-api": "8.1.6", + "@storybook/theming": "8.1.6", + "@storybook/types": "8.1.6", + "@types/lodash": "^4.14.167", + "color-convert": "^2.0.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "markdown-to-jsx": "7.3.2", + "memoizerific": "^1.11.3", + "polished": "^4.2.2", + "react-colorful": "^5.1.2", + "telejson": "^7.2.0", + "tocbot": "^4.20.1", "ts-dedent": "^2.0.0", "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/addons/node_modules/@storybook/client-logger": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz", - "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==", - "dev": true, - "dependencies": { - "core-js": "^3.8.2", - "global": "^4.4.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@storybook/addons/node_modules/@storybook/core-events": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.16.tgz", - "integrity": "sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==", + "node_modules/@storybook/builder-manager": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.6.tgz", + "integrity": "sha512-Y5d+dikKnUuCYyh4VLEF6A+AbWughEgtipVkDKOddSTzn04trClIOKqfhQqEUObydCpgvvfdjGXJa/zDRV/UQA==", "dev": true, "dependencies": { - "core-js": "^3.8.2" + "@fal-works/esbuild-plugin-global-externals": "^2.1.2", + "@storybook/core-common": "8.1.6", + "@storybook/manager": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@types/ejs": "^3.1.1", + "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", + "browser-assert": "^1.2.1", + "ejs": "^3.1.10", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0", + "esbuild-plugin-alias": "^0.2.1", + "express": "^4.17.3", + "fs-extra": "^11.1.0", + "process": "^0.11.10", + "util": "^0.12.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/addons/node_modules/@storybook/csf": { - "version": "0.0.2--canary.4566f4d.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", - "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/@storybook/addons/node_modules/@storybook/router": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.16.tgz", - "integrity": "sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==", + "node_modules/@storybook/builder-webpack5": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.1.6.tgz", + "integrity": "sha512-FP/vEUSM+/x+6Pof4d3EBaLH4dlzpH97Pzc3RsVD1qvEqVRHUyfbROh5Ud7/+X0m75M2kkpFtmlH/W9fVWzWGw==", "dev": true, "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/addons/node_modules/@storybook/theming": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", - "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/addons/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/@storybook/api": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.16.tgz", - "integrity": "sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==", - "dev": true, - "dependencies": { - "@storybook/channels": "6.5.16", - "@storybook/client-logger": "6.5.16", - "@storybook/core-events": "6.5.16", - "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.16", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.16", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "telejson": "^6.0.8", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/channels": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.16.tgz", - "integrity": "sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==", - "dev": true, - "dependencies": { - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/client-logger": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz", - "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==", - "dev": true, - "dependencies": { - "core-js": "^3.8.2", - "global": "^4.4.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/core-events": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.16.tgz", - "integrity": "sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==", - "dev": true, - "dependencies": { - "core-js": "^3.8.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/csf": { - "version": "0.0.2--canary.4566f4d.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", - "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/router": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.16.tgz", - "integrity": "sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/theming": { - "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz", - "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "6.5.16", - "core-js": "^3.8.2", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/api/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/@storybook/api/node_modules/telejson": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", - "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==", - "dev": true, - "dependencies": { - "@types/is-function": "^1.0.0", - "global": "^4.4.0", - "is-function": "^1.0.2", - "is-regex": "^1.1.2", - "is-symbol": "^1.0.3", - "isobject": "^4.0.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3" - } - }, - "node_modules/@storybook/blocks": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.19.tgz", - "integrity": "sha512-/c/bVQRmyRPoviJhPrFdLfubRcrnZWTwkjxsCvrOTJ/UDOyEl0t/H8yY1mGq7KWWTdbIznnZWhAIofHnH4/Esw==", - "dev": true, - "dependencies": { - "@storybook/channels": "7.6.19", - "@storybook/client-logger": "7.6.19", - "@storybook/components": "7.6.19", - "@storybook/core-events": "7.6.19", - "@storybook/csf": "^0.1.2", - "@storybook/docs-tools": "7.6.19", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.6.19", - "@storybook/preview-api": "7.6.19", - "@storybook/theming": "7.6.19", - "@storybook/types": "7.6.19", - "@types/lodash": "^4.14.167", - "color-convert": "^2.0.1", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "markdown-to-jsx": "^7.1.8", - "memoizerific": "^1.11.3", - "polished": "^4.2.2", - "react-colorful": "^5.1.2", - "telejson": "^7.2.0", - "tocbot": "^4.20.1", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/blocks/node_modules/@storybook/theming": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.19.tgz", - "integrity": "sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg==", - "dev": true, - "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.19", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/builder-manager": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.19.tgz", - "integrity": "sha512-Dt5OLh97xeWh4h2mk9uG0SbCxBKHPhIiHLHAKEIDzIZBdwUhuyncVNDPHW2NlXM+S7U0/iKs2tw05waqh2lHvg==", - "dev": true, - "dependencies": { - "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.6.19", - "@storybook/manager": "7.6.19", - "@storybook/node-logger": "7.6.19", - "@types/ejs": "^3.1.1", - "@types/find-cache-dir": "^3.2.1", - "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", - "browser-assert": "^1.2.1", - "ejs": "^3.1.8", - "esbuild": "^0.18.0", - "esbuild-plugin-alias": "^0.2.1", - "express": "^4.17.3", - "find-cache-dir": "^3.0.0", - "fs-extra": "^11.1.0", - "process": "^0.11.10", - "util": "^0.12.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/builder-webpack5": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.19.tgz", - "integrity": "sha512-PeP66orYG0tWoWeOGNcCDKtk/kpDBFfosViCkd0Pxb6c2MtvjOuHSGWGB/9AI3hjodsoe5p9xo/SqGf7lDzpoA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.2", - "@storybook/channels": "7.6.19", - "@storybook/client-logger": "7.6.19", - "@storybook/core-common": "7.6.19", - "@storybook/core-events": "7.6.19", - "@storybook/core-webpack": "7.6.19", - "@storybook/node-logger": "7.6.19", - "@storybook/preview": "7.6.19", - "@storybook/preview-api": "7.6.19", - "@swc/core": "^1.3.82", + "@storybook/channels": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/core-common": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/core-webpack": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/preview": "8.1.6", + "@storybook/preview-api": "8.1.6", "@types/node": "^18.0.0", "@types/semver": "^7.3.4", - "babel-loader": "^9.0.0", "browser-assert": "^1.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", "cjs-module-lexer": "^1.2.3", "constants-browserify": "^1.0.0", "css-loader": "^6.7.1", - "es-module-lexer": "^1.4.1", + "es-module-lexer": "^1.5.0", "express": "^4.17.3", "fork-ts-checker-webpack-plugin": "^8.0.0", "fs-extra": "^11.1.0", @@ -8656,14 +7717,13 @@ "process": "^0.11.10", "semver": "^7.3.7", "style-loader": "^3.3.1", - "swc-loader": "^0.2.3", "terser-webpack-plugin": "^5.3.1", "ts-dedent": "^2.0.0", "url": "^0.11.0", "util": "^0.12.4", "util-deprecate": "^1.0.2", "webpack": "5", - "webpack-dev-middleware": "^6.1.1", + "webpack-dev-middleware": "^6.1.2", "webpack-hot-middleware": "^2.25.1", "webpack-virtual-modules": "^0.5.0" }, @@ -8686,23 +7746,6 @@ "undici-types": "~5.26.4" } }, - "node_modules/@storybook/builder-webpack5/node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "dev": true, - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/css-loader": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", @@ -8738,107 +7781,6 @@ } } }, - "node_modules/@storybook/builder-webpack5/node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -8867,28 +7809,15 @@ "webpack": "^5.0.0" } }, - "node_modules/@storybook/builder-webpack5/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/channels": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.19.tgz", - "integrity": "sha512-2JGh+i95GwjtjqWqhtEh15jM5ifwbRGmXeFqkY7dpdHH50EEWafYHr2mg3opK3heVDwg0rJ/VBptkmshloXuvA==", + "node_modules/@storybook/channels": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", + "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.19", - "@storybook/core-events": "7.6.19", + "@storybook/client-logger": "8.1.6", + "@storybook/core-events": "8.1.6", "@storybook/global": "^5.0.0", - "qs": "^6.10.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" }, @@ -8898,23 +7827,22 @@ } }, "node_modules/@storybook/cli": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.19.tgz", - "integrity": "sha512-7OVy7nPgkLfgivv6/dmvoyU6pKl9EzWFk+g9izyQHiM/jS8jOiEyn6akG8Ebj6k5pWslo5lgiXUSW+cEEZUnqQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.6.tgz", + "integrity": "sha512-xsFdBoAbo+2h/UCWuVXiH4Tu49iQ6d+3R1J8F2n4N6rAKxMqAb6fzYnH1GeRYeZk0HGqb2iNc4kBkxj0jW0rKw==", "dev": true, "dependencies": { - "@babel/core": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/types": "^7.23.0", + "@babel/core": "^7.24.4", + "@babel/types": "^7.24.0", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.6.19", - "@storybook/core-common": "7.6.19", - "@storybook/core-events": "7.6.19", - "@storybook/core-server": "7.6.19", - "@storybook/csf-tools": "7.6.19", - "@storybook/node-logger": "7.6.19", - "@storybook/telemetry": "7.6.19", - "@storybook/types": "7.6.19", + "@storybook/codemod": "8.1.6", + "@storybook/core-common": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/core-server": "8.1.6", + "@storybook/csf-tools": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/telemetry": "8.1.6", + "@storybook/types": "8.1.6", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -8924,25 +7852,22 @@ "detect-indent": "^6.1.0", "envinfo": "^7.7.3", "execa": "^5.0.0", - "express": "^4.17.3", "find-up": "^5.0.0", "fs-extra": "^11.1.0", "get-npm-tarball-url": "^2.0.3", - "get-port": "^5.1.1", "giget": "^1.0.0", - "globby": "^11.0.2", + "globby": "^14.0.1", "jscodeshift": "^0.15.1", "leven": "^3.1.0", "ora": "^5.4.1", - "prettier": "^2.8.0", + "prettier": "^3.1.1", "prompts": "^2.4.0", - "puppeteer-core": "^2.1.1", "read-pkg-up": "^7.0.1", "semver": "^7.3.7", "strip-json-comments": "^3.0.1", - "tempy": "^1.0.1", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" + "tempy": "^3.1.0", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0" }, "bin": { "getstorybook": "bin/index.js", @@ -8993,6 +7918,26 @@ "node": ">= 6" } }, + "node_modules/@storybook/cli/node_modules/globby": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@storybook/cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -9002,6 +7947,33 @@ "node": ">=8" } }, + "node_modules/@storybook/cli/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/cli/node_modules/prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@storybook/cli/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -9014,6 +7986,18 @@ "node": ">=10" } }, + "node_modules/@storybook/cli/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@storybook/cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9027,9 +8011,9 @@ } }, "node_modules/@storybook/client-logger": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.19.tgz", - "integrity": "sha512-oGzOxbmLmciSIfd5gsxDzPmX8DttWhoYdPKxjMuCuWLTO2TWpkCWp1FTUMWO72mm/6V/FswT/aqpJJBBvdZ3RQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", + "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -9040,107 +8024,134 @@ } }, "node_modules/@storybook/codemod": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.19.tgz", - "integrity": "sha512-bmHE0iEEgWZ65dXCmasd+GreChjPiWkXu2FEa0cJmNz/PqY12GsXGls4ke1TkNTj4gdSZnbtJxbclPZZnib2tQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/types": "^7.23.0", - "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "7.6.19", - "@storybook/node-logger": "7.6.19", - "@storybook/types": "7.6.19", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.6.tgz", + "integrity": "sha512-N5JeimfscAOcME7FIrTCmxcsXxow11vtmPTjYWoeLYokBodaH5RyWcyyQ5KS1ACtt+dHYoX8lepSZA5SBEzYog==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/preset-env": "^7.24.4", + "@babel/types": "^7.24.0", + "@storybook/csf": "^0.1.7", + "@storybook/csf-tools": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/types": "8.1.6", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", - "globby": "^11.0.2", + "globby": "^14.0.1", "jscodeshift": "^0.15.1", "lodash": "^4.17.21", - "prettier": "^2.8.0", - "recast": "^0.23.1" + "prettier": "^3.1.1", + "recast": "^0.23.5", + "tiny-invariant": "^1.3.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/components": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.19.tgz", - "integrity": "sha512-8Zw/RQ4crzKkUR7ojxvRIj8vktKiBBO8Nq93qv4JfDqDWrcR7cro0hOlZgmZmrzbFunBBt6WlsNNO6nVP7R4Xw==", + "node_modules/@storybook/codemod/node_modules/globby": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, "dependencies": { - "@radix-ui/react-select": "^1.2.2", - "@radix-ui/react-toolbar": "^1.0.4", - "@storybook/client-logger": "7.6.19", - "@storybook/csf": "^0.1.2", - "@storybook/global": "^5.0.0", - "@storybook/theming": "7.6.19", - "@storybook/types": "7.6.19", - "memoizerific": "^1.11.3", - "use-resize-observer": "^9.1.0", - "util-deprecate": "^1.0.2" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/codemod/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "engines": { + "node": ">=12" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/components/node_modules/@storybook/theming": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.19.tgz", - "integrity": "sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg==", + "node_modules/@storybook/codemod/node_modules/prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", "dev": true, - "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.19", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@storybook/codemod/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/core-client": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.19.tgz", - "integrity": "sha512-F0V9nzcEnj6DIpnw2ilrxsV4d9ibyyQS+Wi2uQtXy+wCQQm9PeBVqrOywjXAY2F9pcoftXOaepfhp8jrxX4MXw==", + "node_modules/@storybook/components": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.6.tgz", + "integrity": "sha512-RDcSj2gBVhK/klfcXQgINtvWe5hpJ1CYUv8hrAon3fWtZmX1+IrTJTorsdISvdHQ99o0WHZ+Ouz42O0yJnHzRg==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.19", - "@storybook/preview-api": "7.6.19" + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-slot": "^1.0.2", + "@storybook/client-logger": "8.1.6", + "@storybook/csf": "^0.1.7", + "@storybook/global": "^5.0.0", + "@storybook/icons": "^1.2.5", + "@storybook/theming": "8.1.6", + "@storybook/types": "8.1.6", + "memoizerific": "^1.11.3", + "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" } }, "node_modules/@storybook/core-common": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.19.tgz", - "integrity": "sha512-njwpGzFJrfbJr/AFxGP8KMrfPfxN85KOfSlxYnQwRm5Z0H1D/lT33LhEBf5m37gaGawHeG7KryxO6RvaioMt2Q==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.6.tgz", + "integrity": "sha512-OTlfJFaTOB588ibXrrFm0TAXam6E5xV1VXSjNXL+fIifx8Kjln2HNSy1JKjvcblQneYiV4J1xPCVnAIe0EGHDg==", "dev": true, "dependencies": { - "@storybook/core-events": "7.6.19", - "@storybook/node-logger": "7.6.19", - "@storybook/types": "7.6.19", - "@types/find-cache-dir": "^3.2.1", - "@types/node": "^18.0.0", - "@types/node-fetch": "^2.6.4", - "@types/pretty-hrtime": "^1.0.0", + "@storybook/core-events": "8.1.6", + "@storybook/csf-tools": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/types": "8.1.6", + "@yarnpkg/fslib": "2.10.3", + "@yarnpkg/libzip": "2.3.0", "chalk": "^4.1.0", - "esbuild": "^0.18.0", + "cross-spawn": "^7.0.3", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0", "esbuild-register": "^3.5.0", + "execa": "^5.0.0", "file-system-cache": "2.3.0", "find-cache-dir": "^3.0.0", "find-up": "^5.0.0", @@ -9151,22 +8162,26 @@ "node-fetch": "^2.0.0", "picomatch": "^2.3.0", "pkg-dir": "^5.0.0", + "prettier-fallback": "npm:prettier@^3", "pretty-hrtime": "^1.0.3", "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0" + "semver": "^7.3.7", + "tempy": "^3.1.0", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0", + "util": "^0.12.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "18.19.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", - "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" + }, + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } } }, "node_modules/@storybook/core-common/node_modules/ansi-styles": { @@ -9264,6 +8279,18 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/@storybook/core-common/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@storybook/core-common/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9277,11 +8304,12 @@ } }, "node_modules/@storybook/core-events": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.19.tgz", - "integrity": "sha512-K/W6Uvum0ocZSgjbi8hiotpe+wDEHDZlvN+KlPqdh9ae9xDK8aBNBq9IelCoqM+uKO1Zj+dDfSQds7CD781DJg==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", + "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", "dev": true, "dependencies": { + "@storybook/csf": "^0.1.7", "ts-dedent": "^2.0.0" }, "funding": { @@ -9290,27 +8318,31 @@ } }, "node_modules/@storybook/core-server": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.19.tgz", - "integrity": "sha512-7mKL73Wv5R2bEl0kJ6QJ9bOu5YY53Idu24QgvTnUdNsQazp2yUONBNwHIrNDnNEXm8SfCi4Mc9o0mmNRMIoiRA==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.6.tgz", + "integrity": "sha512-rgkeTG8V4emzhPqjlhchsjLay0WtgK7SrXNf1X40oTJIwmbgbReLJ5EmOXBe9rhWSXJ13aKL3l6JuTLAoptSkg==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.6.19", - "@storybook/channels": "7.6.19", - "@storybook/core-common": "7.6.19", - "@storybook/core-events": "7.6.19", - "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "7.6.19", - "@storybook/docs-mdx": "^0.1.0", + "@storybook/builder-manager": "8.1.6", + "@storybook/channels": "8.1.6", + "@storybook/core-common": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/csf": "^0.1.7", + "@storybook/csf-tools": "8.1.6", + "@storybook/docs-mdx": "3.1.0-next.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.6.19", - "@storybook/node-logger": "7.6.19", - "@storybook/preview-api": "7.6.19", - "@storybook/telemetry": "7.6.19", - "@storybook/types": "7.6.19", + "@storybook/manager": "8.1.6", + "@storybook/manager-api": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/preview-api": "8.1.6", + "@storybook/telemetry": "8.1.6", + "@storybook/types": "8.1.6", "@types/detect-port": "^1.3.0", + "@types/diff": "^5.0.9", "@types/node": "^18.0.0", "@types/pretty-hrtime": "^1.0.0", "@types/semver": "^7.3.4", @@ -9319,10 +8351,10 @@ "cli-table3": "^0.6.1", "compression": "^1.7.4", "detect-port": "^1.3.0", + "diff": "^5.2.0", "express": "^4.17.3", "fs-extra": "^11.1.0", - "globby": "^11.0.2", - "ip": "^2.0.1", + "globby": "^14.0.1", "lodash": "^4.17.21", "open": "^8.4.0", "pretty-hrtime": "^1.0.3", @@ -9382,6 +8414,26 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@storybook/core-server/node_modules/globby": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@storybook/core-server/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -9391,6 +8443,18 @@ "node": ">=8" } }, + "node_modules/@storybook/core-server/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@storybook/core-server/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -9403,6 +8467,18 @@ "node": ">=10" } }, + "node_modules/@storybook/core-server/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@storybook/core-server/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9437,14 +8513,14 @@ } }, "node_modules/@storybook/core-webpack": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.19.tgz", - "integrity": "sha512-Ezvn54hFN99qwP8kDOQa7/IEk2V3NyJys2eg0Afqz1cy9Uc3SkL7U7hQorKOHr5+66dsryNDfJdPzM1YMKFMBQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.1.6.tgz", + "integrity": "sha512-KjcAEDpHnX0M/7/hUckmZghvb+8FwrShQ2On92jkeL1HgKwzk9HUxFowMJAn1arYfkUT45q9g7HfqSmon36f5Q==", "dev": true, "dependencies": { - "@storybook/core-common": "7.6.19", - "@storybook/node-logger": "7.6.19", - "@storybook/types": "7.6.19", + "@storybook/core-common": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/types": "8.1.6", "@types/node": "^18.0.0", "ts-dedent": "^2.0.0" }, @@ -9472,12 +8548,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.19.tgz", - "integrity": "sha512-yUP0xfJyR8e6fmCgKoEt4c1EvslF8dZ8wtwVLE5hnC3kfs7xt8RVDiKLB/9NhYjY3mD/oOesX60HqRXDgJQHwA==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.1.6.tgz", + "integrity": "sha512-y2OW84leoWsqfBXb7EoRy2QUmtsI3gpqYqpyD/d5K+vQ+E9CBel2WB8RPrwcYm2L88WPDaufQQDzqyB7aMx4fQ==", "dev": true, "dependencies": { - "@storybook/csf-tools": "7.6.19", + "@storybook/csf-tools": "8.1.6", "unplugin": "^1.3.1" }, "funding": { @@ -9486,19 +8562,19 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.19.tgz", - "integrity": "sha512-8Vzia3cHhDdGHuS3XKXJReCRxmfRq3vmTm/Te9yKZnPSAsC58CCKcMh8FNEFJ44vxYF9itKTkRutjGs+DprKLQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.6.tgz", + "integrity": "sha512-jrKfHFNhiLBhWWW4/fm2wgKEVg55e6QuYUHY16KGd7PdPuzm+2Pt7jIl5V9yIj6a59YbjeMpT6jWPKbFx2TuCw==", "dev": true, "dependencies": { - "@babel/generator": "^7.23.0", - "@babel/parser": "^7.23.0", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", - "@storybook/csf": "^0.1.2", - "@storybook/types": "7.6.19", + "@babel/generator": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "@storybook/csf": "^0.1.7", + "@storybook/types": "8.1.6", "fs-extra": "^11.1.0", - "recast": "^0.23.1", + "recast": "^0.23.5", "ts-dedent": "^2.0.0" }, "funding": { @@ -9507,20 +8583,21 @@ } }, "node_modules/@storybook/docs-mdx": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz", - "integrity": "sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==", + "version": "3.1.0-next.0", + "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-3.1.0-next.0.tgz", + "integrity": "sha512-t4syFIeSyufieNovZbLruPt2DmRKpbwL4fERCZ1MifWDRIORCKLc4NCEHy+IqvIqd71/SJV2k4B51nF7vlJfmQ==", "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.19.tgz", - "integrity": "sha512-JuwV6wtm7Hb7Kb5ValChfxy4J7XngfrSQNpvwsDCSBNVcQUv2y843hvclpa26Ptfr/c7zpUX8r9FGSaMDy+2aQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.6.tgz", + "integrity": "sha512-IhqQHSJ5nEBEJ162P/6/6c45toLinWpAkB7pwbAoP00djZSzfHNdQ4HfpZSGfD4GUJIvzsqMzUlyqCKLAoRPPA==", "dev": true, "dependencies": { - "@storybook/core-common": "7.6.19", - "@storybook/preview-api": "7.6.19", - "@storybook/types": "7.6.19", + "@storybook/core-common": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/preview-api": "8.1.6", + "@storybook/types": "8.1.6", "@types/doctrine": "^0.0.3", "assert": "^2.1.0", "doctrine": "^3.0.0", @@ -9537,82 +8614,79 @@ "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", "dev": true }, - "node_modules/@storybook/manager": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.19.tgz", - "integrity": "sha512-fZWQcf59x4P0iiBhrL74PZrqKJAPuk9sWjP8BIkGbf8wTZtUunbY5Sv4225fOL4NLJbuX9/RYLUPoxQ3nucGHA==", + "node_modules/@storybook/icons": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.9.tgz", + "integrity": "sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/manager-api": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.19.tgz", - "integrity": "sha512-dVCx1Q+HZEA4U08XqYljiG88BeS3I3ahnPAQLZAeWQXQRkoc9G2jMgLNPKYPIqEtq7Xrn6SRlFMIofhwWrwZpg==", + "node_modules/@storybook/instrumenter": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.1.6.tgz", + "integrity": "sha512-BoNu0QaD5hhcbEVUsvmYDqUOu4HItNBMPUkj6aDCfpLxae5vstH3zsCRVqRcElbfqVhmRzD23w8+9In9M0Fajg==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.19", - "@storybook/client-logger": "7.6.19", - "@storybook/core-events": "7.6.19", - "@storybook/csf": "^0.1.2", + "@storybook/channels": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/core-events": "8.1.6", "@storybook/global": "^5.0.0", - "@storybook/router": "7.6.19", - "@storybook/theming": "7.6.19", - "@storybook/types": "7.6.19", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "store2": "^2.14.2", - "telejson": "^7.2.0", - "ts-dedent": "^2.0.0" + "@storybook/preview-api": "8.1.6", + "@vitest/utils": "^1.3.1", + "util": "^0.12.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/manager-api/node_modules/@storybook/theming": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.19.tgz", - "integrity": "sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg==", + "node_modules/@storybook/manager": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.6.tgz", + "integrity": "sha512-B7xc09FYHqC1sknJoWkGHBBCMQlfg7hF+4x42cGhAyYed4TeYAf7b1PDniq8L/PLbUgzTw+A62UC1fMurCcVDQ==", "dev": true, - "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.19", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/mdx2-csf": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz", - "integrity": "sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==", - "dev": true - }, - "node_modules/@storybook/node-logger": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.19.tgz", - "integrity": "sha512-2g29QC44Zl1jKY37DmQ0/dO7+VSKnGgPI/x0mwVwQffypSapxH3rwLLT5Q5XLHeFyD+fhRu5w9Cj4vTGynJgpA==", + "node_modules/@storybook/manager-api": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.6.tgz", + "integrity": "sha512-L/s1FdFh/P+eFmQwLtFtJHwFJrGD9H7nauaQlKJOrU3GeXfjBjtlAZQF0Q6B4ZTGxwZjQrzShpt/0yKc6gymtw==", "dev": true, + "dependencies": { + "@storybook/channels": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/csf": "^0.1.7", + "@storybook/global": "^5.0.0", + "@storybook/icons": "^1.2.5", + "@storybook/router": "8.1.6", + "@storybook/theming": "8.1.6", + "@storybook/types": "8.1.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/postinstall": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.19.tgz", - "integrity": "sha512-s6p1vpgMfn+QGDfCK2YNdyyWKidUgb3nGicB81FANRyzYqGB//QlJlghEc2LKCIQbGIZQiwP3l8PdZQmczEJRw==", + "node_modules/@storybook/node-logger": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.6.tgz", + "integrity": "sha512-IZEiTLFHu8Oom/vdEGpisSw5CfU+cw6/fTaX1P3EVClFOWVuy8/3X5MPu4wJH3jPym6E2DBduIUFeRsiuq61gA==", "dev": true, "funding": { "type": "opencollective", @@ -9620,45 +8694,39 @@ } }, "node_modules/@storybook/preset-react-webpack": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.6.19.tgz", - "integrity": "sha512-WvfDE4upH7jmisx5XOn4E07p9Fm8YJn4Aywc9vYM1jqQ8A1lEH8VSC1KR6dPfdmGr94jRscQkD6fjs9sUNTdrw==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.1.6.tgz", + "integrity": "sha512-5x5h30Nm8pTguiWAS/Vb1mYSIsoNs2JydXCekIKOVd752Iq+/cDQio6A7gIE6zbtPgfofoa7fuvweiuT6NG2bw==", "dev": true, "dependencies": { - "@babel/preset-flow": "^7.22.15", - "@babel/preset-react": "^7.22.15", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", - "@storybook/core-webpack": "7.6.19", - "@storybook/docs-tools": "7.6.19", - "@storybook/node-logger": "7.6.19", - "@storybook/react": "7.6.19", + "@storybook/core-webpack": "8.1.6", + "@storybook/docs-tools": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/react": "8.1.6", "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", "@types/node": "^18.0.0", "@types/semver": "^7.3.4", - "babel-plugin-add-react-displayname": "^0.0.5", + "find-up": "^5.0.0", "fs-extra": "^11.1.0", "magic-string": "^0.30.5", "react-docgen": "^7.0.0", - "react-refresh": "^0.14.0", + "resolve": "^1.22.8", "semver": "^7.3.7", + "tsconfig-paths": "^4.2.0", "webpack": "5" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@babel/core": "^7.22.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "typescript": { "optional": true } @@ -9686,9 +8754,9 @@ } }, "node_modules/@storybook/preview": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.19.tgz", - "integrity": "sha512-VqRPua2koOQTOteB+VvuKNXFYQ7IDEopaPpj9Nx+3kom+bqp0hWdAysWcm6CtKN2GGzBQm+5PvGibMNdawsaVg==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.1.6.tgz", + "integrity": "sha512-o9OgOmO10GyX1ZC7WiapYqGdst4TOCPLqWSu3H2nL4ZT7BQLUQfCy30kyoMO7KyxCgc5K5rcqG7qZ/N0tfUgRg==", "dev": true, "funding": { "type": "opencollective", @@ -9696,23 +8764,23 @@ } }, "node_modules/@storybook/preview-api": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.19.tgz", - "integrity": "sha512-04hdMSQucroJT4dBjQzRd7ZwH2hij8yx2nm5qd4HYGkd1ORkvlH6GOLph4XewNJl5Um3xfzFQzBhvkqvG0WaCQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", + "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.19", - "@storybook/client-logger": "7.6.19", - "@storybook/core-events": "7.6.19", - "@storybook/csf": "^0.1.2", + "@storybook/channels": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.19", + "@storybook/types": "8.1.6", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", "qs": "^6.10.0", - "synchronous-promise": "^2.0.15", + "tiny-invariant": "^1.3.1", "ts-dedent": "^2.0.0", "util-deprecate": "^1.0.2" }, @@ -9722,18 +8790,17 @@ } }, "node_modules/@storybook/react": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.19.tgz", - "integrity": "sha512-uKShAAp1/pRki1YnRjBveH/jAD3f8V0W2WP1LxTQqnKVFkl01mTbDZ/9ZIK6rVTSILUlmsk3fwsNyRbOKVgBGQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.1.6.tgz", + "integrity": "sha512-2CSc3MLeaY7QaYAQLwaXRboKkgQnWrSZAo/WTJcSHUr2YFxH5+iECB0Kci12GqaJklhhgmfTfVZ4Jo9ZJ6LQfg==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.19", - "@storybook/core-client": "7.6.19", - "@storybook/docs-tools": "7.6.19", + "@storybook/client-logger": "8.1.6", + "@storybook/docs-tools": "8.1.6", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.6.19", - "@storybook/react-dom-shim": "7.6.19", - "@storybook/types": "7.6.19", + "@storybook/preview-api": "8.1.6", + "@storybook/react-dom-shim": "8.1.6", + "@storybook/types": "8.1.6", "@types/escodegen": "^0.0.6", "@types/estree": "^0.0.51", "@types/node": "^18.0.0", @@ -9745,21 +8812,22 @@ "lodash": "^4.17.21", "prop-types": "^15.7.2", "react-element-to-jsx-string": "^15.0.0", + "semver": "^7.3.7", "ts-dedent": "^2.0.0", "type-fest": "~2.19", "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "typescript": "*" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "typescript": ">= 4.2.x" }, "peerDependenciesMeta": { "typescript": { @@ -9787,47 +8855,44 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.19.tgz", - "integrity": "sha512-tpt2AC1428d1gF4fetMkpkeFZ1WdDr1CLKoLbSInWQZ7i96nbnIMIA9raR/W8ai1bo55KSz9Bq5ytC/1Pac2qQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.1.6.tgz", + "integrity": "sha512-qP5nkAmpGFy/gshO+bVjRo1rgo/6UVDElgOd2dlUtYnfdPONiOfWko2XGYKKfxa6Cp7KU35JlZz/kHGqWG31zQ==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" } }, "node_modules/@storybook/react-webpack5": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.6.19.tgz", - "integrity": "sha512-QPnDv5eimvgc0zBIvc1H49iBUfZhs0hhrs9eO0+rAC6sIo5BiDcX9nQJZEuamRPVuLjqoRByj6vUpqGI25zASg==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-8.1.6.tgz", + "integrity": "sha512-jpRpa85efcv+9Kl1vIuwz+QC/Ug522Tx3oAT2FZTc1ZdIBrjeT+jY0tmEDjemRuadFMpjHvrXyW1HDItP5groQ==", "dev": true, "dependencies": { - "@storybook/builder-webpack5": "7.6.19", - "@storybook/preset-react-webpack": "7.6.19", - "@storybook/react": "7.6.19", + "@storybook/builder-webpack5": "8.1.6", + "@storybook/preset-react-webpack": "8.1.6", + "@storybook/react": "8.1.6", + "@storybook/types": "8.1.6", "@types/node": "^18.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@babel/core": "^7.22.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "typescript": "*" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "typescript": ">= 4.2.x" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "typescript": { "optional": true } @@ -9857,30 +8922,11 @@ "undici-types": "~5.26.4" } }, - "node_modules/@storybook/router": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.19.tgz", - "integrity": "sha512-q2/AvY8rG0znFEfbg50OIhkS5yQ6OmyzdCdztoEsDDdsbq87YPmsDj7k8Op1EkTa2T5CB8XhBOCQDtcj7gUUtg==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.6.19", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "node_modules/@storybook/react/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -9888,84 +8934,62 @@ "node": ">=10" } }, - "node_modules/@storybook/semver/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/semver/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@storybook/router": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.6.tgz", + "integrity": "sha512-tvuhB2uXHEKK640Epm1SqVzPhQ9lXYfF7FX6FleJgVYEvZpJpNTD4RojedQoLI6SUUSXNy1Vs2QV26VM0XIPHQ==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "@storybook/client-logger": "8.1.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/semver/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@storybook/source-loader": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-8.1.6.tgz", + "integrity": "sha512-lKJ3vUsETsKMR9lpCyrB51Js/1W94fZjIDXNnslgLpoxhCIT4MB1eDRNa6DGynTIzhajG3ZIGymqOj/gRr3xdg==", "dev": true, "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "@storybook/csf": "^0.1.7", + "@storybook/types": "8.1.6", + "estraverse": "^5.2.0", + "lodash": "^4.17.21", + "prettier": "^3.1.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/semver/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@storybook/source-loader/node_modules/prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", "dev": true, - "dependencies": { - "p-limit": "^2.2.0" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/source-loader": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-7.6.19.tgz", - "integrity": "sha512-Pbbq2RrS0Ct7e1MXVKW62a61Wh4iZQ66LWwksZKqW0bMM4Ohdw8v+OZI00y7Wk4+/u1gbUDplQk2k0JlueOrMw==", - "dev": true, - "dependencies": { - "@storybook/csf": "^0.1.2", - "@storybook/types": "7.6.19", - "estraverse": "^5.2.0", - "lodash": "^4.17.21", - "prettier": "^2.8.0" + "node": ">=14" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/@storybook/telemetry": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.19.tgz", - "integrity": "sha512-rA5xum4I36M57iiD3uzmW0MOdpl0vEpHWBSAa5hK0a0ALPeY9TgAsQlI/0dSyNYJ/K7aczEEN6d4qm1NC4u10A==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.6.tgz", + "integrity": "sha512-qNWjQPF6ufRvLCAavulhNYoqldDIeBvioFuCjLlwbw3BZw3ck7pwh1vZg4AJ0SAfzbnpnXPGrHe31gnxV0D6tw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.19", - "@storybook/core-common": "7.6.19", - "@storybook/csf-tools": "7.6.19", + "@storybook/client-logger": "8.1.6", + "@storybook/core-common": "8.1.6", + "@storybook/csf-tools": "8.1.6", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -10029,310 +9053,378 @@ "node": ">=8" } }, - "node_modules/@storybook/testing-library": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.2.2.tgz", - "integrity": "sha512-L8sXFJUHmrlyU2BsWWZGuAjv39Jl1uAqUHdxmN42JY15M4+XCMjGlArdCCjDe1wpTSW6USYISA9axjZojgtvnw==", - "deprecated": "In Storybook 8, this package functionality has been integrated to a new package called @storybook/test, which uses Vitest APIs for an improved experience. When upgrading to Storybook 8 with 'npx storybook@latest upgrade', you will get prompted and will get an automigration for the new package. Please migrate when you can.", - "dev": true, - "dependencies": { - "@testing-library/dom": "^9.0.0", - "@testing-library/user-event": "^14.4.0", - "ts-dedent": "^2.2.0" - } - }, - "node_modules/@storybook/theming": { + "node_modules/@storybook/test": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.6.tgz", - "integrity": "sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.1.6.tgz", + "integrity": "sha512-tyexfYPtOHP83pMHggoGdHadfqh/veLdS+APHxt12zmCNUobxOxnuWmImXThQiyLlXTWecreLvlMvgAIjziBsA==", "dev": true, - "peer": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@storybook/client-logger": "8.1.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "@storybook/core-events": "8.1.6", + "@storybook/instrumenter": "8.1.6", + "@storybook/preview-api": "8.1.6", + "@testing-library/dom": "^9.3.4", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/user-event": "^14.5.2", + "@vitest/expect": "1.3.1", + "@vitest/spy": "^1.3.1", + "util": "^0.12.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } } }, - "node_modules/@storybook/theming/node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "node_modules/@storybook/test/node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "optional": true, "peer": true, "dependencies": { - "@storybook/global": "^5.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@storybook/types": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.19.tgz", - "integrity": "sha512-DeGYrRPRMGTVfT7o2rEZtRzyLT2yKTI2exgpnxbwPWEFAduZCSfzBrcBXZ/nb5B0pjA9tUNWls1YzGkJGlkhpg==", + "node_modules/@storybook/test/node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@storybook/channels": "7.6.19", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@swc/core": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.25.tgz", - "integrity": "sha512-qdGEIdLVoTjEQ7w72UyyQ0wLFY4XbHfZiidmPHKJQsvSXzdpHXxPdlTCea/mY4AhMqo/M+pvkJSXJAxZnFl7qw==", + "node_modules/@storybook/test/node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, - "hasInstallScript": true, + "optional": true, + "peer": true, "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.7" + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.5.25", - "@swc/core-darwin-x64": "1.5.25", - "@swc/core-linux-arm-gnueabihf": "1.5.25", - "@swc/core-linux-arm64-gnu": "1.5.25", - "@swc/core-linux-arm64-musl": "1.5.25", - "@swc/core-linux-x64-gnu": "1.5.25", - "@swc/core-linux-x64-musl": "1.5.25", - "@swc/core-win32-arm64-msvc": "1.5.25", - "@swc/core-win32-ia32-msvc": "1.5.25", - "@swc/core-win32-x64-msvc": "1.5.25" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@swc/helpers": "*" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "@swc/helpers": { + "node-notifier": { "optional": true } } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.25.tgz", - "integrity": "sha512-YbD0SBgVJS2DM0vwJTU5m7+wOyCjHPBDMf3nCBJQzFZzOLzK11eRW7SzU2jhJHr9HI9sKcNFfN4lIC2Sj+4inA==", - "cpu": [ - "arm64" - ], + "node_modules/@storybook/test/node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "optional": true, - "os": [ - "darwin" - ], + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.25.tgz", - "integrity": "sha512-OhP4TROT6gQuozn+ah0Y4UidSdgDmxwtQq3lgCUIAxJYErJAQ82/Y0kve2UaNmkSGjOHU+/b4siHPrYTkXOk0Q==", - "cpu": [ - "x64" - ], + "node_modules/@storybook/test/node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "optional": true, - "os": [ - "darwin" - ], + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.25.tgz", - "integrity": "sha512-tNmUfrAHxN2gvYPyYNnHx2CYlPO7DGAUuK/bZrqawu++djcg+atAV3eI3XYJgmHId7/sYAlDQ9wjkrOLofFjVg==", - "cpu": [ - "arm" - ], + "node_modules/@storybook/test/node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "optional": true, - "os": [ - "linux" - ], + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.25.tgz", - "integrity": "sha512-stzpke+bRaNFM/HrZPRjX0aQZ86S/2DChVCwb8NAV1n5lu9mz1CS750y7WbbtX/KZjk92FsCeRy2qwkvjI0gWw==", - "cpu": [ - "arm64" - ], + "node_modules/@storybook/test/node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "optional": true, - "os": [ - "linux" - ], + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.25.tgz", - "integrity": "sha512-UckUfDYedish/bj2V1jgQDGgouLhyRpG7jgF3mp8jHir11V2K6JiTyjFoz99eOiclS3+hNdr4QLJ+ifrQMJNZw==", - "cpu": [ - "arm64" - ], + "node_modules/@storybook/test/node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "optional": true, - "os": [ - "linux" - ], + "peer": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.25.tgz", - "integrity": "sha512-LwbJEgNT3lXbvz4WFzVNXNvs8DvxpoXjMZk9K9Hig8tmZQJKHC2qZTGomcyK5EFzfj2HBuBXZnAEW8ZT9PcEaA==", - "cpu": [ - "x64" - ], + "node_modules/@storybook/test/node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "optional": true, - "os": [ - "linux" - ], + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.25.tgz", - "integrity": "sha512-rsepMTgml0EkswWkBpg3Wrjj5eqjwTzZN5omAn1klzXSZnClTrfeHvBuoIJYVr1yx+jmBkqySgME2p7+magUAw==", - "cpu": [ - "x64" - ], + "node_modules/@storybook/test/node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "optional": true, - "os": [ - "linux" - ], + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.25.tgz", - "integrity": "sha512-DJDsLBsRBV3uQBShRK2x6fqzABp9RLNVxDUpTTvUjc7qywJ8vS/yn+POK/zCyVEqLagf1z/8D5CEQ+RAIJq1NA==", - "cpu": [ - "arm64" - ], + "node_modules/@storybook/test/node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "optional": true, - "os": [ - "win32" - ], + "peer": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.25.tgz", - "integrity": "sha512-BARL1ulHol53MEKC1ZVWM3A3FP757UUgG5Q8v97za+4a1SaIgbwvAQyHDxMYWi9+ij+OapK8YnWjJcFa17g8dw==", - "cpu": [ - "ia32" - ], + "node_modules/@storybook/test/node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "optional": true, - "os": [ - "win32" - ], + "peer": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.25.tgz", - "integrity": "sha512-o+MHUWrQI9iR6EusEV8eNU2Ezi3KtlhUR4gfptQN5MbVzlgjTvQbhiKpE1GYOxp+0BLBbKRwITKOcdhxfEJ2Uw==", - "cpu": [ - "x64" - ], + "node_modules/@storybook/test/node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" + "peer": true, + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true - }, - "node_modules/@swc/types": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.7.tgz", - "integrity": "sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==", + "node_modules/@storybook/test/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@swc/counter": "^0.1.3" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@testing-library/dom": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", - "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "node_modules/@storybook/test/node_modules/@testing-library/jest-dom": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", + "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" + "@adobe/css-tools": "^4.3.2", + "@babel/runtime": "^7.9.2", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" }, "engines": { - "node": ">=14" + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + }, + "peerDependencies": { + "@jest/globals": ">= 28", + "@types/bun": "latest", + "@types/jest": ">= 28", + "jest": ">= 28", + "vitest": ">= 0.32" + }, + "peerDependenciesMeta": { + "@jest/globals": { + "optional": true + }, + "@types/bun": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "jest": { + "optional": true + }, + "vitest": { + "optional": true + } } }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "node_modules/@storybook/test/node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@storybook/test/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -10347,11 +9439,36 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@testing-library/dom/node_modules/chalk": { + "node_modules/@storybook/test/node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/@storybook/test/node_modules/babel-jest/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10363,65 +9480,56 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/test/node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@testing-library/jest-dom": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", - "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "node_modules/@storybook/test/node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">=8", - "npm": ">=6", - "yarn": ">=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/@storybook/test/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "optional": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "node_modules/@storybook/test/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", @@ -10434,96 +9542,119 @@ "node": ">=8" } }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@storybook/test/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/test/node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "optional": true, + "peer": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/@testing-library/react": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", - "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", + "node_modules/@storybook/test/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.0.0", - "@types/react-dom": "<18.0.0" - }, + "optional": true, + "peer": true, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react": "<18.0.0", - "react-dom": "<18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", - "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "node_modules/@storybook/test/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true + }, + "node_modules/@storybook/test/node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, + "optional": true, + "peer": true, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/@testing-library/react/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@storybook/test/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@storybook/test/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@testing-library/react/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/test/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@testing-library/react/node_modules/has-flag": { + "node_modules/@storybook/test/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -10532,3457 +9663,5719 @@ "node": ">=8" } }, - "node_modules/@testing-library/react/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/test/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/@testing-library/user-event": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", - "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "node_modules/@storybook/test/node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, - "engines": { - "node": ">=12", - "npm": ">=6" + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" + "engines": { + "node": ">=10" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "node_modules/@storybook/test/node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "node_modules/@storybook/test/node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, "engines": { - "node": ">=10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "node_modules/@storybook/test/node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@types/estree": "*" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "node_modules/@storybook/test/node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "node_modules/@storybook/test/node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@babel/types": "^7.0.0" - } - }, + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@storybook/test/node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/@storybook/test/node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@storybook/test/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/test/node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/test/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/test/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/test/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@storybook/test/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/test/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/test/node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@storybook/test/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/test/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/theming": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.6.tgz", + "integrity": "sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==", + "dev": true, + "dependencies": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@storybook/client-logger": "8.1.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/types": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", + "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "dev": true, + "dependencies": { + "@storybook/channels": "8.1.6", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@swc/core": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.7.tgz", + "integrity": "sha512-U4qJRBefIJNJDRCCiVtkfa/hpiZ7w0R6kASea+/KLp+vkus3zcLSB8Ub8SvKgTIxjWpwsKcZlPf5nrv4ls46SQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.2", + "@swc/types": "0.1.7" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.5.7", + "@swc/core-darwin-x64": "1.5.7", + "@swc/core-linux-arm-gnueabihf": "1.5.7", + "@swc/core-linux-arm64-gnu": "1.5.7", + "@swc/core-linux-arm64-musl": "1.5.7", + "@swc/core-linux-x64-gnu": "1.5.7", + "@swc/core-linux-x64-musl": "1.5.7", + "@swc/core-win32-arm64-msvc": "1.5.7", + "@swc/core-win32-ia32-msvc": "1.5.7", + "@swc/core-win32-x64-msvc": "1.5.7" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.7.tgz", + "integrity": "sha512-bZLVHPTpH3h6yhwVl395k0Mtx8v6CGhq5r4KQdAoPbADU974Mauz1b6ViHAJ74O0IVE5vyy7tD3OpkQxL/vMDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.7.tgz", + "integrity": "sha512-RpUyu2GsviwTc2qVajPL0l8nf2vKj5wzO3WkLSHAHEJbiUZk83NJrZd1RVbEknIMO7+Uyjh54hEh8R26jSByaw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.7.tgz", + "integrity": "sha512-cTZWTnCXLABOuvWiv6nQQM0hP6ZWEkzdgDvztgHI/+u/MvtzJBN5lBQ2lue/9sSFYLMqzqff5EHKlFtrJCA9dQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.7.tgz", + "integrity": "sha512-hoeTJFBiE/IJP30Be7djWF8Q5KVgkbDtjySmvYLg9P94bHg9TJPSQoC72tXx/oXOgXvElDe/GMybru0UxhKx4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.7.tgz", + "integrity": "sha512-+NDhK+IFTiVK1/o7EXdCeF2hEzCiaRSrb9zD7X2Z7inwWlxAntcSuzZW7Y6BRqGQH89KA91qYgwbnjgTQ22PiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.7.tgz", + "integrity": "sha512-25GXpJmeFxKB+7pbY7YQLhWWjkYlR+kHz5I3j9WRl3Lp4v4UD67OGXwPe+DIcHqcouA1fhLhsgHJWtsaNOMBNg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.7.tgz", + "integrity": "sha512-0VN9Y5EAPBESmSPPsCJzplZHV26akC0sIgd3Hc/7S/1GkSMoeuVL+V9vt+F/cCuzr4VidzSkqftdP3qEIsXSpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.7.tgz", + "integrity": "sha512-RtoNnstBwy5VloNCvmvYNApkTmuCe4sNcoYWpmY7C1+bPR+6SOo8im1G6/FpNem8AR5fcZCmXHWQ+EUmRWJyuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.7.tgz", + "integrity": "sha512-Xm0TfvcmmspvQg1s4+USL3x8D+YPAfX2JHygvxAnCJ0EHun8cm2zvfNBcsTlnwYb0ybFWXXY129aq1wgFC9TpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.7.tgz", + "integrity": "sha512-tp43WfJLCsKLQKBmjmY/0vv1slVywR5Q4qKjF5OIY8QijaEW7/8VwPyUyVoJZEnDgv9jKtUTG5PzqtIYPZGnyg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.7.tgz", + "integrity": "sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==", + "dev": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "12.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", + "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0", + "@types/react-dom": "<18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "<18.0.0", + "react-dom": "<18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/react/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/react/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/react/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, "node_modules/@types/babel__template": { "version": "7.4.4", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.3.tgz", + "integrity": "sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/detect-port": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz", + "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==", + "dev": true + }, + "node_modules/@types/diff": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.2.1.tgz", + "integrity": "sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==", + "dev": true + }, + "node_modules/@types/doctrine": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", + "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", + "dev": true + }, + "node_modules/@types/ejs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", + "dev": true + }, + "node_modules/@types/emscripten": { + "version": "1.39.13", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz", + "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==", + "dev": true + }, + "node_modules/@types/escodegen": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", + "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz", + "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "dev": true, + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dev": true, + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/is-empty": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.3.tgz", + "integrity": "sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "dev": true, + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", + "dev": true + }, + "node_modules/@types/lodash.clonedeep": { + "version": "4.5.9", + "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz", + "integrity": "sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/react": { + "version": "17.0.80", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", + "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "^0.16", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "17.0.25", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.25.tgz", + "integrity": "sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA==", + "dev": true, + "dependencies": { + "@types/react": "^17" + } + }, + "node_modules/@types/react-reconciler": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz", + "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-RS8XN5O159YQ6tu3tGZIQz1/9StMLTg/FCIPxwqh2gwVixJnlfIodtVx+fpXVMZHe7A58lAX1Q4XTgAGOQaCQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/styled-components": { + "version": "5.1.34", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz", + "integrity": "sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==", + "dev": true, + "dependencies": { + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/supports-color": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.3.tgz", + "integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==", + "dev": true + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "dev": true, + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/@types/webxr": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.16.tgz", + "integrity": "sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA==", + "dev": true, + "peer": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { - "@babel/types": "^7.20.7" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/concat-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.3.tgz", - "integrity": "sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "@types/node": "*" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitest/expect": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", + "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", "dev": true, "dependencies": { - "@types/node": "*" + "@vitest/spy": "1.3.1", + "@vitest/utils": "1.3.1", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@types/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", + "node_modules/@vitest/expect/node_modules/@vitest/spy": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", + "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", "dev": true, "dependencies": { - "@types/node": "*" + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "node_modules/@vitest/expect/node_modules/@vitest/utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", + "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", "dev": true, "dependencies": { - "@types/ms": "*" + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@types/detect-port": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz", - "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==", - "dev": true - }, - "node_modules/@types/doctrine": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", - "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", - "dev": true - }, - "node_modules/@types/ejs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", - "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", - "dev": true - }, - "node_modules/@types/emscripten": { - "version": "1.39.13", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz", - "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==", - "dev": true + "node_modules/@vitest/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/@types/escodegen": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", - "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", - "dev": true + "node_modules/@vitest/expect/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "node_modules/@vitest/expect/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@types/estree": "^1.0.0" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "node_modules/@vitest/expect/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "node_modules/@vitest/spy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", + "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", "dev": true, "dependencies": { - "@types/estree": "*" + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "node_modules/@vitest/utils": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", "dev": true, "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz", - "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==", + "node_modules/@vitest/utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/find-cache-dir": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz", - "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", - "dev": true + "node_modules/@vitest/utils/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "node_modules/@vitest/utils/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "dependencies": { - "@types/node": "*" + "@types/estree": "^1.0.0" } }, - "node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "node_modules/@vitest/utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@types/unist": "^2" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", - "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true }, - "node_modules/@types/is-empty": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.3.tgz", - "integrity": "sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==", + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, - "node_modules/@types/is-function": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.3.tgz", - "integrity": "sha512-/CLhCW79JUeLKznI6mbVieGbl4QU5Hfn+6udw1YHZoofASjbQ5zaP5LzAUZYDpRYEjS4/P+DhEgyJ/PQmGGTWw==", - "dev": true + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, "dependencies": { - "@types/istanbul-lib-report": "*" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "@xtuc/long": "4.2.2" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, - "node_modules/@types/lodash.clonedeep": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz", - "integrity": "sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==", + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@types/lodash": "*" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, - "node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@types/unist": "^2" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "node_modules/@types/mime-types": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", - "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", - "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, - "peer": true, "dependencies": { - "@types/node": "*" + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "node_modules/@types/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "node_modules/@types/react": { - "version": "17.0.80", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", - "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "^0.16", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "17.0.25", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.25.tgz", - "integrity": "sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA==", + "node_modules/@yarnpkg/esbuild-plugin-pnp": { + "version": "3.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", + "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", "dev": true, "dependencies": { - "@types/react": "^17" + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "esbuild": ">=0.10.0" } }, - "node_modules/@types/react-reconciler": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz", - "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==", + "node_modules/@yarnpkg/fslib": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", + "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", "dev": true, - "peer": true, "dependencies": { - "@types/react": "*" + "@yarnpkg/libzip": "^2.3.0", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, - "node_modules/@types/react-slider": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.6.tgz", - "integrity": "sha512-RS8XN5O159YQ6tu3tGZIQz1/9StMLTg/FCIPxwqh2gwVixJnlfIodtVx+fpXVMZHe7A58lAX1Q4XTgAGOQaCQg==", + "node_modules/@yarnpkg/fslib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@yarnpkg/libzip": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", + "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", "dev": true, "dependencies": { - "@types/react": "*" + "@types/emscripten": "^1.39.6", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "node_modules/@yarnpkg/libzip/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", "dev": true }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, + "peer": true, "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/styled-components": { - "version": "5.1.34", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz", - "integrity": "sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==", + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@types/supports-color": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.3.tgz", - "integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==", - "dev": true + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.9", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", - "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "dependencies": { - "@types/jest": "*" + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" } }, - "node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", - "dev": true - }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true - }, - "node_modules/@types/webpack-env": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.5.tgz", - "integrity": "sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==", - "dev": true - }, - "node_modules/@types/webxr": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.16.tgz", - "integrity": "sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "peer": true + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "debug": "4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">= 6.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "ajv": "^8.0.0" }, "peerDependenciesMeta": { - "typescript": { + "ajv": { "optional": true } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "dev": true, + "peer": true + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "type-fest": "^0.21.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", "dev": true, + "peer": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "node_modules/ansi-fragments/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/ansi-fragments/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true, - "bin": { - "semver": "bin/semver.js" - }, + "peer": true, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/ansi-fragments/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "peer": true + }, + "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-fragments/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, + "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6" + } + }, + "node_modules/ansi-fragments/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^4.1.0" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, + "engines": [ + "node >= 0.8.0" + ], "bin": { - "semver": "bin/semver.js" - }, + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "color-convert": "^1.9.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node": ">=4" + } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "node_modules/ansi-styles/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "color-name": "1.1.3" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "node_modules/ansi-styles/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "node_modules/app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", "dev": true }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "node_modules/appdirsjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } + "peer": true }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "deep-equal": "^2.0.5" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "@xtuc/long": "4.2.2" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/@yarnpkg/esbuild-plugin-pnp": { - "version": "3.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", - "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { - "tslib": "^2.4.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": ">=14.15.0" + "node": ">= 0.4" }, - "peerDependencies": { - "esbuild": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" } }, - "node_modules/@yarnpkg/fslib": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", - "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "dependencies": { - "@yarnpkg/libzip": "^2.3.0", - "tslib": "^1.13.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + "node": ">= 0.4" } }, - "node_modules/@yarnpkg/fslib/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@yarnpkg/libzip": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", - "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "@types/emscripten": "^1.39.6", - "tslib": "^1.13.0" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" }, "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@yarnpkg/libzip/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/abab": { + "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "peer": true }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "peer": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, "engines": { - "node": ">=6.5" + "node": "*" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", "dev": true, "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "tslib": "^2.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } + "peer": true }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "node_modules/attr-accept": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", + "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">=4" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "dependencies": { - "debug": "4" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/axe-core": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", "dev": true, "dependencies": { - "ajv": "^8.0.0" + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { - "ajv": "^8.0.0" + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "node_modules/babel-jest/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/babel-jest/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "dependencies": { + "@types/yargs-parser": "*" } }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", - "dev": true, - "peer": true - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "dev": true, - "peer": true, - "dependencies": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - } + "node_modules/babel-jest/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, - "node_modules/ansi-fragments/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "peer": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/ansi-fragments/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "node_modules/babel-jest/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, - "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, "engines": { - "node": ">=4" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/ansi-fragments/node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true, - "peer": true - }, - "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/babel-jest/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", "dev": true, - "peer": true, "engines": { - "node": ">=4" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/ansi-fragments/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "node_modules/babel-jest/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, - "peer": true, "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": ">=6" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/ansi-fragments/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/babel-jest/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/ansi-html": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", - "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "node_modules/babel-jest/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, "engines": { - "node": ">=8" + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=4" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/ansi-styles/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ansi-styles/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">= 8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/app-root-dir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", - "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", - "dev": true - }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", - "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", - "dev": true, - "peer": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "dependencies": { - "tslib": "^2.0.0" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "node_modules/babel-plugin-styled-components": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", + "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "lodash": "^4.17.21", + "picomatch": "^2.3.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "styled-components": ">= 2" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", "dev": true, - "engines": { - "node": ">=8" + "peer": true, + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "open": "^8.0.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12.0.0" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "engines": { + "node": ">=0.6" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": "*" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { - "tslib": "^2.0.1" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=4" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "node_modules/attr-accept": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", - "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, "engines": { - "node": ">=4" + "node": ">= 5.10.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/axe-core": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", - "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "node_modules/browser-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", + "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", + "dev": true + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "pako": "~0.2.0" } }, - "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "bin": { + "browserslist": "cli.js" }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/babel-jest/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node-int64": "^0.4.0" } }, - "node_modules/babel-jest/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "engines": { + "node": ">= 0.8" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", "dev": true, + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "callsites": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/babel-jest/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/babel-jest/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", "dev": true, + "peer": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" + "caller-callsite": "^2.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">=4" } }, - "node_modules/babel-jest/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6" } }, - "node_modules/babel-jest/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/babel-jest/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-jest/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "node_modules/caniuse-lite": { + "version": "1.0.30001628", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001628.tgz", + "integrity": "sha512-S3BnR4Kh26TBxbi5t5kpbcUlLJb9lhtDXISDPwOfI+JoC+ik0QksvkZtUVyikw3hjnkgkMPSJ8oIM9yMm9vflA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" + "node": ">=4" } }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/babel-plugin-add-react-displayname": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", - "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", - "dev": true - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=4" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">=10" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/babel-plugin-styled-components": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", - "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "lodash": "^4.17.21", - "picomatch": "^2.3.1" - }, - "peerDependencies": { - "styled-components": ">= 2" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true, - "peer": true, - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "get-func-name": "^2.0.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": "*" } }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 8.10.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "open": "^8.0.4" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">= 6" } }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "engines": { - "node": ">=0.6" + "node": ">=10" } }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, "engines": { - "node": "*" + "node": ">=12.13.0" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", "dev": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "consola": "^3.2.3" } }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "source-map": "~0.6.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 10.0" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=0.6" + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, "dependencies": { - "big-integer": "^1.6.44" + "string-width": "^4.2.0" }, "engines": { - "node": ">= 5.10.0" + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "fill-range": "^7.1.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/browser-assert": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", - "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", - "dev": true + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "node_modules/browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "pako": "~0.2.0" + "engines": { + "node": ">=8" } }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=8" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "dependencies": { - "node-int64": "^0.4.0" + "engines": { + "node": ">=0.8" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "node_modules/clone-deep/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/clone-deep/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "peer": true, "dependencies": { - "callsites": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "peer": true, "dependencies": { - "caller-callsite": "^2.0.0" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, + "peer": true + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 12" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "ms": "2.0.0" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001628", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001628.tgz", - "integrity": "sha512-S3BnR4Kh26TBxbi5t5kpbcUlLJb9lhtDXISDPwOfI+JoC+ik0QksvkZtUVyikw3hjnkgkMPSJ8oIM9yMm9vflA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "source-map": "^0.6.1" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/concat-with-sourcemaps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "node_modules/condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "peer": true, + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, + "peer": true, "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">= 0.8" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, + "peer": true + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "peer": true, "dependencies": { - "is-glob": "^4.0.1" + "ee-first": "1.1.1" }, "engines": { - "node": ">= 6" + "node": ">= 0.8" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "peer": true, "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, "engines": { - "node": ">=12.13.0" + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/chrome-launcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=10" + "dependencies": { + "safe-buffer": "5.2.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.6" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "engines": { - "node": ">=6.0" + "node": ">= 0.6" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", "dev": true, "dependencies": { - "consola": "^3.2.3" + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "dependencies": { - "source-map": "~0.6.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/create-jest/node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "restore-cursor": "^3.1.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/create-jest/node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, - "engines": { - "node": ">=6" + "optional": true, + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "node_modules/create-jest/node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "string-width": "^4.2.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/create-jest/node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/create-jest/node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "node_modules/create-jest/node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/create-jest/node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/create-jest/node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "type-detect": "4.0.8" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/create-jest/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "engines": { - "node": ">=0.8" + "optional": true, + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/create-jest/node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "isobject": "^3.0.1" + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/clone-deep/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/create-jest/node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/create-jest/node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/create-jest/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "optional": true, + "peer": true, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/create-jest/node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "optional": true, + "peer": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" }, - "engines": { - "node": ">=7.0.0" + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/create-jest/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/color-name-list": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/color-name-list/-/color-name-list-4.15.0.tgz", - "integrity": "sha512-4P3pFob8w6LNnku94oIacj8suCfhOLmY+25bmfoOwqFtuhLTD4Oux+/aUBdZLcvLK3fHrBe6XrzAU2IbwoWnQA==", + "node_modules/create-jest/node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "optional": true, + "peer": true, "engines": { - "node": ">=8", - "npm": ">=5" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/color-parse": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", - "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "node_modules/create-jest/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "color-name": "^1.0.0" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/color-rgba": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", - "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", + "node_modules/create-jest/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "color-parse": "^1.4.2", - "color-space": "^2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/color-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.1.tgz", - "integrity": "sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==", - "dev": true - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "node_modules/create-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "optional": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/color-stringify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/color-stringify/-/color-stringify-1.2.1.tgz", - "integrity": "sha512-DMEEe6iVahjHKTYCywfkLRArls2WopRc3e6ucR/HEL5eeF2v708bc5MumOn2VWblTyJrCIBpjRSzTbmNtlMcxA==", + "node_modules/create-jest/node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "color-name": "^1.0.0" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/create-jest/node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "color-name": "1.1.3" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/create-jest/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "delayed-stream": "~1.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, - "peer": true - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/create-jest/node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, "engines": { - "node": ">= 12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/create-jest/node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/create-jest/node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/create-jest/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "optional": true, + "peer": true, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/create-jest/node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "ms": "2.0.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/create-jest/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, - "engines": [ - "node >= 0.8" - ], + "optional": true, + "peer": true, "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/create-jest/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/create-jest/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "safe-buffer": "~5.1.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "node_modules/create-jest/node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/concat-with-sourcemaps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/condense-newlines": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", - "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==", + "node_modules/create-jest/node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-whitespace": "^0.3.0", - "kind-of": "^3.0.2" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/create-jest/node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "optional": true, "peer": true, "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/create-jest/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "optional": true, "peer": true, "dependencies": { - "ms": "2.0.0" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/connect/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/create-jest/node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "optional": true, "peer": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/connect/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "node_modules/create-jest/node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "optional": true, "peer": true, "dependencies": { - "ee-first": "1.1.1" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/connect/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/create-jest/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "optional": true, "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "node_modules/create-jest/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/create-jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "safe-buffer": "5.2.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/create-jest/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "optional": true, + "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "node_modules/create-jest/node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, + "optional": true, + "peer": true, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/core-js": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", - "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "node": ">=10" } }, - "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "node_modules/create-jest/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "browserslist": "^4.23.0" + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "engines": { + "node": ">=10" } }, - "node_modules/core-js-pure": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", - "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", + "node_modules/create-jest/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/create-jest/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/crelt": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "node_modules/create-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "node-fetch": "^2.6.12" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/cross-spawn": { @@ -14000,12 +15393,30 @@ } }, "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, + "dependencies": { + "type-fest": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/css-color-keywords": { @@ -14017,15 +15428,6 @@ "node": ">=4" } }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/css-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", @@ -14066,24 +15468,6 @@ "webpack": "^4.27.0 || ^5.0.0" } }, - "node_modules/css-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/css-loader/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -14445,6 +15829,18 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/deep-equal": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", @@ -14569,28 +15965,6 @@ "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", "dev": true }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dev": true, - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -14768,12 +16142,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -15125,6 +16493,7 @@ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, + "peer": true, "dependencies": { "stackframe": "^1.3.4" } @@ -15328,9 +16697,9 @@ } }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, "bin": { @@ -15340,28 +16709,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "node_modules/esbuild-plugin-alias": { @@ -15662,6 +17032,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-storybook": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.8.0.tgz", + "integrity": "sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==", + "dev": true, + "dependencies": { + "@storybook/csf": "^0.0.1", + "@typescript-eslint/utils": "^5.62.0", + "requireindex": "^1.2.0", + "ts-dedent": "^2.2.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "eslint": ">=6" + } + }, + "node_modules/eslint-plugin-storybook/node_modules/@storybook/csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", + "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -16165,48 +17562,6 @@ "node": ">=0.10.0" } }, - "node_modules/extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - } - }, - "node_modules/extract-zip/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/extract-zip/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -16313,45 +17668,6 @@ "bser": "2.1.1" } }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dev": true, - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", - "dev": true, - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "dev": true - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/fetch-retry": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", @@ -16578,15 +17894,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -16623,19 +17930,6 @@ "node": ">=0.4.0" } }, - "node_modules/flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", - "dev": true, - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -16755,24 +18049,6 @@ "node": ">=8" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -16797,20 +18073,6 @@ "node": ">=8" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", @@ -16986,6 +18248,15 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -17032,18 +18303,6 @@ "node": ">=8.0.0" } }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -17093,9 +18352,9 @@ } }, "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "dev": true }, "node_modules/glob": { @@ -17157,16 +18416,6 @@ "node": ">=10" } }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -17358,16 +18607,82 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-heading-rank": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz", + "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-heading-rank/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz", + "integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "*" } }, "node_modules/he": { @@ -17409,12 +18724,6 @@ "node": ">=8" } }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -17436,18 +18745,6 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", - "dev": true - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", - "dev": true - }, "node_modules/html-dom-parser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-2.0.0.tgz", @@ -17972,12 +19269,6 @@ "loose-envify": "^1.0.0" } }, - "node_modules/ip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", - "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", - "dev": true - }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -17988,12 +19279,15 @@ } }, "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", + "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-alphabetical": { @@ -18146,20 +19440,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "dev": true, - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -18291,12 +19571,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, "node_modules/is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -18431,15 +19705,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -18676,15 +19941,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -19880,6 +21136,8 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -19905,6 +21163,8 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "optional": true, + "peer": true, "engines": { "node": ">=8" } @@ -19914,6 +21174,8 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -19929,6 +21191,8 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -20374,6 +21638,8 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "optional": true, + "peer": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -21338,6 +22604,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -21355,6 +22622,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -21370,6 +22638,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -21386,6 +22655,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -21395,6 +22665,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -21879,17 +23150,6 @@ "node": ">=8" } }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -22394,12 +23654,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true - }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", @@ -22412,24 +23666,12 @@ "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", "dev": true }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==", - "dev": true - }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==", - "dev": true - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -22856,6 +24098,15 @@ "integrity": "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==", "dev": true }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -22933,9 +24184,9 @@ } }, "node_modules/markdown-to-jsx": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz", - "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz", + "integrity": "sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==", "dev": true, "engines": { "node": ">= 10" @@ -22960,64 +24211,6 @@ "css-mediaquery": "^0.1.2" } }, - "node_modules/material-colors": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", - "dev": true - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dev": true, - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-find-and-replace": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", @@ -25529,15 +26722,6 @@ "node": ">=6" } }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dev": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -25689,12 +26873,6 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, - "node_modules/nearest-color": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/nearest-color/-/nearest-color-0.4.4.tgz", - "integrity": "sha512-orhcaIORC10tf41Ld2wwlcC+FaAavHG87JHWB3eHH5p7v2k9Tzym2XNEZzLAm5YJwGv6Q38WWc7SOb+Qfu/4NQ==", - "dev": true - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -26655,6 +27833,15 @@ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/peek-stream": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", @@ -26666,12 +27853,6 @@ "through2": "^2.0.3" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", @@ -26982,24 +28163,6 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/postcss-loader/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -27443,6 +28606,22 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-fallback": { + "name": "prettier", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", @@ -27667,24 +28846,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "dependencies": { - "asap": "~2.0.3" - } - }, "node_modules/promise.series": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", @@ -27741,12 +28902,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -27759,143 +28914,57 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz", - "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==", - "dev": true, - "dependencies": { - "@types/mime-types": "^2.1.0", - "debug": "^4.1.0", - "extract-zip": "^1.6.6", - "https-proxy-agent": "^4.0.0", - "mime": "^2.0.3", - "mime-types": "^2.1.25", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^6.1.0" - }, - "engines": { - "node": ">=8.16.0" - } - }, - "node_modules/puppeteer-core/node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/puppeteer-core/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/puppeteer-core/node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, - "dependencies": { - "agent-base": "5", - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/puppeteer-core/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, - "node_modules/puppeteer-core/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/puppeteer-core/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "dependencies": { - "async-limiter": "~1.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==", - "dev": true + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "optional": true, + "peer": true }, "node_modules/qs": { "version": "6.12.1", @@ -28014,36 +29083,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "dev": true, - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-color": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", - "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", - "dev": true, - "dependencies": { - "@icons/material": "^0.2.4", - "lodash": "^4.17.15", - "lodash-es": "^4.17.15", - "material-colors": "^1.2.1", - "prop-types": "^15.5.10", - "reactcss": "^1.2.0", - "tinycolor2": "^1.4.1" - }, - "peerDependencies": { - "react": "*" - } - }, "node_modules/react-colorful": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", @@ -28171,13 +29210,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "peer": true - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true }, "node_modules/react-property": { @@ -28191,6 +29223,7 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -29136,15 +30169,6 @@ "react-dom": "*" } }, - "node_modules/reactcss": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", - "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", - "dev": true, - "dependencies": { - "lodash": "^4.0.1" - } - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -29471,71 +30495,164 @@ "jsesc": "bin/jsesc" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "node_modules/rehype-external-links": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", + "integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-is-element": "^3.0.0", + "is-absolute-url": "^4.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-external-links": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", - "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", + "node_modules/rehype-external-links/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, "dependencies": { - "extend": "^3.0.0", - "is-absolute-url": "^3.0.0", - "mdast-util-definitions": "^4.0.0", - "space-separated-tokens": "^1.0.0", - "unist-util-visit": "^2.0.0" + "@types/unist": "*" + } + }, + "node_modules/rehype-external-links/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/rehype-external-links/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-external-links/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "node_modules/rehype-external-links/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-external-links/node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "node_modules/rehype-external-links/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-external-links/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "node_modules/rehype-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", + "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "@types/hast": "^3.0.0", + "github-slugger": "^2.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/rehype-slug/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/rehype-slug/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/remark-gfm": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", @@ -29666,70 +30783,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-slug": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", - "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", - "dev": true, - "dependencies": { - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^1.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-slug/node_modules/mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-slug/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-slug/node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-slug/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-stringify": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.3.tgz", @@ -29811,6 +30864,15 @@ "dev": true, "peer": true }, + "node_modules/requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true, + "engines": { + "node": ">=0.10.5" + } + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -29900,27 +30962,6 @@ "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, - "node_modules/rgb-hex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-3.0.0.tgz", - "integrity": "sha512-8h7ZcwxCBDKvchSWbWngJuSCqJGQ6nDuLLg+QcRyQDbX9jMWt+PpPeXAhSla0GOooEomk3lCprUpGkMdsLjKyg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", - "dev": true - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", - "dev": true - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -30286,66 +31327,31 @@ }, "node_modules/scheduler": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, - "peerDependencies": { - "ajv": "^8.8.2" + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", @@ -30487,12 +31493,6 @@ "node": ">= 0.4" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -30587,21 +31587,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -30710,9 +31695,9 @@ } }, "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "dev": true, "funding": { "type": "github", @@ -30789,7 +31774,8 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/stacktrace-parser": { "version": "0.1.10", @@ -30842,12 +31828,12 @@ "dev": true }, "node_modules/storybook": { - "version": "7.6.19", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.19.tgz", - "integrity": "sha512-xWD1C4vD/4KMffCrBBrUpsLUO/9uNpm8BVW8+Vcb30gkQDfficZ0oziWkmLexpT53VSioa24iazGXMwBqllYjQ==", + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.1.6.tgz", + "integrity": "sha512-qouQEB+sSb9ktE6fGVoBy6CLEUq4NOqDUpt/EhnITaWqzUeAZSQXTcoHg9DXhTMiynnbfqsUcZuK9PZOjgt7/w==", "dev": true, "dependencies": { - "@storybook/cli": "7.6.19" + "@storybook/cli": "8.1.6" }, "bin": { "sb": "index.js", @@ -31177,30 +32163,6 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/style-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/style-mod": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", - "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", - "dev": true - }, "node_modules/style-to-js": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.1.tgz", @@ -31389,12 +32351,6 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "node_modules/synchronous-promise": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", - "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", - "dev": true - }, "node_modules/synckit": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz", @@ -31508,6 +32464,7 @@ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -31547,36 +32504,44 @@ } }, "node_modules/tempy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", "dev": true, "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "node_modules/tempy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tempy/node_modules/temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "dev": true, + "engines": { + "node": ">=14.16" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -31645,24 +32610,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser/node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", @@ -31793,11 +32740,14 @@ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", "dev": true }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "dev": true + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/tmpl": { "version": "1.0.5", @@ -31933,6 +32883,29 @@ "node": ">=6.10" } }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", @@ -32107,29 +33080,6 @@ "node": ">=4.2.0" } }, - "node_modules/ua-parser-js": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.38.tgz", - "integrity": "sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "engines": { - "node": "*" - } - }, "node_modules/ufo": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", @@ -32210,6 +33160,18 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unified": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", @@ -32373,15 +33335,18 @@ } }, "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, "dependencies": { - "crypto-random-string": "^2.0.0" + "crypto-random-string": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/unist-util-inspect": { @@ -32625,19 +33590,6 @@ } } }, - "node_modules/use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", - "dev": true, - "dependencies": { - "@juggle/resize-observer": "^3.3.1" - }, - "peerDependencies": { - "react": "16.8.0 - 18", - "react-dom": "16.8.0 - 18" - } - }, "node_modules/use-sidecar": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", @@ -32942,12 +33894,6 @@ "browser-process-hrtime": "^1.0.0" } }, - "node_modules/w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "dev": true - }, "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", @@ -33081,6 +34027,59 @@ } } }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/webpack-hot-middleware": { "version": "2.26.1", "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz", @@ -33128,24 +34127,6 @@ "acorn": "^8" } }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -33428,16 +34409,14 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "dependencies": { + "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "signal-exit": "^3.0.2" } }, "node_modules/write-json-file": { @@ -33497,17 +34476,6 @@ "semver": "bin/semver" } }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, "node_modules/write-pkg": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", @@ -33659,16 +34627,6 @@ "node": ">=8" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index d17ee1b0f..90cc101c0 100644 --- a/package.json +++ b/package.json @@ -47,22 +47,23 @@ "@dnd-kit/core": "^6.0.8", "@dnd-kit/sortable": "^7.0.2", "@lifesg/react-icons": "^1.5.0", - "@react-theming/storybook-addon": "^1.1.10", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-image": "^3.0.3", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", - "@storybook/addon-a11y": "^7.4.6", - "@storybook/addon-actions": "^7.4.6", - "@storybook/addon-essentials": "^7.4.6", - "@storybook/addon-interactions": "^7.4.6", - "@storybook/addon-links": "^7.4.6", - "@storybook/addon-storysource": "^7.6.4", - "@storybook/addon-themes": "^7.5.1", - "@storybook/react": "^7.4.6", - "@storybook/react-webpack5": "^7.4.6", - "@storybook/testing-library": "0.2.2", + "@storybook/addon-a11y": "^8.1.6", + "@storybook/addon-docs": "^8.1.6", + "@storybook/addon-essentials": "^8.1.6", + "@storybook/addon-interactions": "^8.1.6", + "@storybook/addon-links": "^8.1.6", + "@storybook/addon-storysource": "^8.1.6", + "@storybook/addon-themes": "^8.1.6", + "@storybook/addon-webpack5-compiler-swc": "^1.0.3", + "@storybook/blocks": "^8.1.6", + "@storybook/react": "^8.1.6", + "@storybook/react-webpack5": "^8.1.6", + "@storybook/test": "^8.1.6", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@types/jest": "^27.4.1", @@ -83,6 +84,7 @@ "eslint-plugin-mdx": "^2.0.4", "eslint-plugin-react": "^7.29.4", "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-storybook": "^0.8.0", "html-react-parser": "^2.0.0", "husky": "^7.0.4", "identity-obj-proxy": "^3.0.0", @@ -113,7 +115,7 @@ "rollup-plugin-peer-deps-external": "^2.2.4", "rollup-plugin-postcss": "^4.0.2", "rollup-plugin-typescript2": "^0.36.0", - "storybook": "^7.4.6", + "storybook": "^8.1.6", "style-loader": "^2.0.0", "styled-components": "^5.3.5", "typescript": "^4.8.2" From 27e356b490f1dcee62d61dc449259c3c9235bd70 Mon Sep 17 00:00:00 2001 From: Ruth Shirin Date: Mon, 10 Jun 2024 12:16:08 +0800 Subject: [PATCH 0166/1949] [CCUBE-1400][SR] Amended the import for button, amended the prop types and re-added the onDismiss prop to the props table. --- src/toast/toast.styles.tsx | 2 +- stories/toast/props-table.tsx | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index 427bc4150..e3dbfa896 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -1,4 +1,4 @@ -import { Button } from "@lifesg/react-design-system"; +import { Button } from "../button"; import { animated } from "react-spring"; import { ValidationElementAttributes } from "src/color"; import { PropertiesToType } from "src/util/utility-types"; diff --git a/stories/toast/props-table.tsx b/stories/toast/props-table.tsx index 00f7aadd5..3cff91385 100644 --- a/stories/toast/props-table.tsx +++ b/stories/toast/props-table.tsx @@ -38,7 +38,7 @@ const DATA: ApiTableSectionProps[] = [ The title of the Toast ), - propTypes: [`string | JSX.Element`], + propTypes: [`string`, `JSX.Element`], defaultValue: "", }, { @@ -49,7 +49,7 @@ const DATA: ApiTableSectionProps[] = [ display the content information. ), - propTypes: [`string | JSX.Element`], + propTypes: [`string`, `JSX.Element`], defaultValue: "", mandatory: true, }, @@ -77,6 +77,16 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["number"], defaultValue: "4000", }, + { + name: "onDismiss", + description: ( + <> + Called when the Toast is dismissed, either + by user action or from auto dismiss. + + ), + propTypes: ["() => void"], + }, { name: "fixed", description: ( From b32f02331a705af3ecd78f10f5cc8ae4934262bc Mon Sep 17 00:00:00 2001 From: shawn wee Date: Mon, 10 Jun 2024 13:05:41 +0800 Subject: [PATCH 0167/1949] [MISC][SW] upgrade postcss-import --- package-lock.json | 99 +++++------------------------------------------ package.json | 4 +- 2 files changed, 11 insertions(+), 92 deletions(-) diff --git a/package-lock.json b/package-lock.json index 26d7173bb..4502a0b00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,8 +72,8 @@ "lodash": "^4.17.21", "lottie-colorify": "^0.8.0", "lottie-react": "^2.3.1", - "postcss-import": "^12.0.1", - "postcss-loader": "^4.2.0", + "postcss": "^8.4.38", + "postcss-import": "^16.1.0", "prettier": "^2.6.1", "pretty": "^2.0.0", "pretty-quick": "^3.1.3", @@ -23334,15 +23334,6 @@ "node": ">=6" } }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/konva": { "version": "9.3.11", "resolved": "https://registry.npmjs.org/konva/-/konva-9.3.11.tgz", @@ -28058,56 +28049,20 @@ } }, "node_modules/postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.0.tgz", + "integrity": "sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==", "dev": true, "dependencies": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", + "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-import/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-import/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" + "node": ">=18.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-import/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-import/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "postcss": "^8.0.0" } }, "node_modules/postcss-load-config": { @@ -28139,42 +28094,6 @@ } } }, - "node_modules/postcss-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", - "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/postcss-merge-longhand": { "version": "5.1.7", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", diff --git a/package.json b/package.json index 90cc101c0..7c55dc37f 100644 --- a/package.json +++ b/package.json @@ -96,8 +96,8 @@ "lodash": "^4.17.21", "lottie-colorify": "^0.8.0", "lottie-react": "^2.3.1", - "postcss-import": "^12.0.1", - "postcss-loader": "^4.2.0", + "postcss": "^8.4.38", + "postcss-import": "^16.1.0", "prettier": "^2.6.1", "pretty": "^2.0.0", "pretty-quick": "^3.1.3", From b249c777023d5cad9c5ca61fa40771d0f94ef538 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Mon, 10 Jun 2024 14:28:43 +0800 Subject: [PATCH 0168/1949] [MOL-15775][AM] renamed defaultExpanded to initialExpanded set initialExpanded to true and updated the logic to cater for when the user wants to use removable(collapsible is false) user doesnt have to set defaultExpandable --- src/toggle/toggle.styles.tsx | 3 ++- src/toggle/toggle.tsx | 12 ++++++------ src/toggle/types.ts | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index 05783ebab..4aafe3bbc 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -36,6 +36,7 @@ interface ButtonStyleProps extends StyleProps { interface ChildrenStyleProps extends StyleProps { $isFinalItem?: boolean; + $expanded?: boolean; } // ============================================================================= @@ -333,7 +334,7 @@ export const Children = styled.div` ${TextStyleHelper.getTextStyle("BodySmall", "regular")} padding-top: 0.6875rem; padding-bottom: ${(props) => (props.$isFinalItem ? "0.6875rem" : "0.5rem")}; - display: ${(props) => (props.$selected ? "block" : "none")}; + display: ${(props) => (props.$expanded ? "block" : "none")}; ${applyHtmlContentStyle({ textSize: "BodySmall" })} ${(props) => { diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 1dd9c7244..bf4f9a31c 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -49,10 +49,10 @@ export const Toggle = ({ collapsible = true, errors, children: compositeSectionChildren, - defaultExpanded, + initialExpanded = true, } = compositeSection || {}; const [selected, setSelected] = useState(checked); - const [expanded, setExpanded] = useState(!!defaultExpanded); + const [expanded, setExpanded] = useState(initialExpanded); const [showErrors, setShowErrors] = useState(false); const [uniqueId] = useState(SimpleIdGenerator.generate()); @@ -68,10 +68,10 @@ export const Toggle = ({ }, [checked]); useEffect(() => { - if (selected !== undefined && defaultExpanded === undefined) { - setExpanded(selected); + if (selected) { + setExpanded(initialExpanded ? initialExpanded : true); } - }, [selected, defaultExpanded]); + }, [selected]); useEffect(() => { if (errors) { @@ -183,7 +183,7 @@ export const Toggle = ({ const renderCompositeChildren = () => { return ( diff --git a/src/toggle/types.ts b/src/toggle/types.ts index 59cb8520e..eb2efbfe6 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -53,5 +53,5 @@ export interface ToggleCompositeSectionProps { errors?: string[] | JSX.Element | undefined; /** The children inside the composite option */ children: React.ReactNode; - defaultExpanded?: boolean | undefined; + initialExpanded?: boolean | undefined; } From 1045795e64a1ab8edf981e742292d11aa06bc383 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Mon, 10 Jun 2024 14:29:42 +0800 Subject: [PATCH 0169/1949] [MOL-15775][AM] update props table --- stories/toggle/props-table.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index 6af71815a..a6fc765fa 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -152,7 +152,7 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["string", "JSX.Element"], }, { - name: "defaultExpanded", + name: "initialExpanded", description: ( <> specifies if the CompositeOption children have to be @@ -160,6 +160,7 @@ const DATA: ApiTableSectionProps[] = [ ), propTypes: ["boolean"], + defaultValue: `true`, }, { name: "collapsible", From 101b1cf3efd8918f62550784d88dd114c7f78923 Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Mon, 10 Jun 2024 15:16:57 +0800 Subject: [PATCH 0170/1949] [MOL-15775][AM] split ErrorContainerProps into diff props --- src/toggle/toggle.styles.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index 4aafe3bbc..c45662ea2 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -33,6 +33,9 @@ interface ButtonStyleProps extends StyleProps { $show?: boolean; $paddingTopRequired?: boolean; } +interface ErrorContainerProps extends StyleProps { + $show?: boolean; +} interface ChildrenStyleProps extends StyleProps { $isFinalItem?: boolean; @@ -311,7 +314,7 @@ export const ExpandButtonContainer = styled.button` padding-top: ${(props) => props.$paddingTopRequired ? "0.6875rem" : "0rem"}; `; -export const ErrorContainer = styled.div` +export const ErrorContainer = styled.div` width: 100%; color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; border: none; From 9a56430e88611a233b7a437908265529df8b571b Mon Sep 17 00:00:00 2001 From: Benedict Date: Mon, 10 Jun 2024 16:47:15 +0800 Subject: [PATCH 0171/1949] [MOL-15885][BC] Test branch ref for node18 image --- .github/workflows/trigger-gitlab-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/trigger-gitlab-pipeline.yml b/.github/workflows/trigger-gitlab-pipeline.yml index 214e584cb..d36c2732c 100644 --- a/.github/workflows/trigger-gitlab-pipeline.yml +++ b/.github/workflows/trigger-gitlab-pipeline.yml @@ -42,7 +42,7 @@ jobs: response=$(curl -sS --request POST \ --fail \ --form token=$GITLAB_TOKEN \ - --form "ref=main" \ + --form "ref=MOL-15885" \ --form "variables[PIPELINE_PROJECT_NAME]=$GITLAB_REPO_NAME" \ --form "variables[PIPELINE_PROJECT_URL]=$PIPELINE_PROJECT_URL" \ --form "variables[PIPELINE_EVENT]=$GITHUB_EVENT_NAME" \ From 7c8a9f3f69361a92d8b52eb956f22fb6523172ec Mon Sep 17 00:00:00 2001 From: Benedict Date: Mon, 10 Jun 2024 17:34:13 +0800 Subject: [PATCH 0172/1949] Revert "[MOL-15885][BC] Test branch ref for node18 image" This reverts commit 9a56430e88611a233b7a437908265529df8b571b. --- .github/workflows/trigger-gitlab-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/trigger-gitlab-pipeline.yml b/.github/workflows/trigger-gitlab-pipeline.yml index d36c2732c..214e584cb 100644 --- a/.github/workflows/trigger-gitlab-pipeline.yml +++ b/.github/workflows/trigger-gitlab-pipeline.yml @@ -42,7 +42,7 @@ jobs: response=$(curl -sS --request POST \ --fail \ --form token=$GITLAB_TOKEN \ - --form "ref=MOL-15885" \ + --form "ref=main" \ --form "variables[PIPELINE_PROJECT_NAME]=$GITLAB_REPO_NAME" \ --form "variables[PIPELINE_PROJECT_URL]=$PIPELINE_PROJECT_URL" \ --form "variables[PIPELINE_EVENT]=$GITHUB_EVENT_NAME" \ From d81ebf4b9600b79402cd8cc98817ab71de150843 Mon Sep 17 00:00:00 2001 From: Ruth Shirin Date: Mon, 10 Jun 2024 21:35:05 +0800 Subject: [PATCH 0173/1949] [CCUBE-1400][SR] Change arrangement of elements so that the action button will be aligned with the toast content in mobile view, changed breaking point from tablet to mobile view, amended name of actionButtonProp. --- src/toast/toast.styles.tsx | 12 +++++++++--- src/toast/types.ts | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index e3dbfa896..1a891d1b8 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -51,7 +51,7 @@ export const Wrapper = styled(animated.div)` align-items: center; gap: 2rem; - ${MediaQuery.MaxWidth.tablet} { + ${MediaQuery.MaxWidth.mobileL} { left: 0; } @@ -113,7 +113,8 @@ export const Title = styled(Text.H4)` export const Description = styled.div` display: flex; - + align-items: center; + position: relative; ${(props) => { return css` p { @@ -127,8 +128,9 @@ export const ActionButton = styled(Button.Small)` font-weight: 600; align-self: center; white-space: nowrap; + margin-left: auto; - ${MediaQuery.MaxWidth.tablet} { + ${MediaQuery.MaxWidth.mobileL} { align-self: start; margin-left: 2rem; } @@ -148,6 +150,10 @@ export const DismissButton = styled(ClickableIcon)` :hover { background: transparent; } + ${MediaQuery.MaxWidth.mobileL} { + align-self: center; + margin-left: 2rem; + } `; }}; `; diff --git a/src/toast/types.ts b/src/toast/types.ts index c7df2d9e8..458976a95 100644 --- a/src/toast/types.ts +++ b/src/toast/types.ts @@ -2,7 +2,7 @@ import React, { HTMLAttributes } from "react"; export type ToastType = "success" | "warning" | "error" | "info"; -export interface ActionButtonProps { +export interface ToastActionButtonProps { label: string; onClick: () => void; } @@ -24,5 +24,5 @@ export interface ToastProps /** Specifies if Toast should be fixed to top. Defaults to true */ fixed?: boolean | undefined; /** If given, will display an actionButton with the given title and run the given function upon clicking of the button */ - actionButton?: ActionButtonProps | undefined; + actionButton?: ToastActionButtonProps | undefined; } From ce19600e82953fbd38e4ea4a13c6e8bfd6bb1c92 Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 10 Jun 2024 22:24:21 +0800 Subject: [PATCH 0174/1949] [MISC][RL] Move examples to stories --- stories/text/b-advanced.mdx | 70 ++++++-------------------- stories/text/b-advanced.stories.tsx | 77 +++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 54 deletions(-) create mode 100644 stories/text/b-advanced.stories.tsx diff --git a/stories/text/b-advanced.mdx b/stories/text/b-advanced.mdx index ee9fc2f39..3a8924b82 100644 --- a/stories/text/b-advanced.mdx +++ b/stories/text/b-advanced.mdx @@ -1,8 +1,16 @@ -import { Meta, Unstyled } from "@storybook/blocks"; +import { Canvas, Meta, Story, Unstyled } from "@storybook/blocks"; import { Text } from "src/text"; -import { Heading3, Heading4, PreviewBox, Title } from "../storybook-common"; - - +import { + Heading3, + Heading4, + PreviewBox, + Secondary, + Title, +} from "../storybook-common"; +import * as TextStories from "./b-advanced.stories"; +import { PropsTable } from "./props-table"; + + Advanced Usage @@ -14,60 +22,20 @@ In certain use cases, you might need to use multiple `Text` components to achiev Including a hyperlink within a set of text. - - - { - - The quick brown fox  - - jumps over - -  the lazy dog - - } - - + Example 2 Including different weights within a set of text. All you need to do is to specify the `inline` prop for the child components. - - - { - - The quick  - - brown fox -   - - jumps over - -  the lazy dog - - } - - + Paragraph specification You can include a paragraph styled spacing between text blocks by specifying the `paragraph` prop. - - - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi - euismod quam eget ex tincidunt dapibus. Donec vitae leo vehicula, - fermentum urna vitae, gravida ex. - - - Aenean imperdiet faucibus velit, eu maximus libero facilisis ut. - Donec nulla nisi, fermentum eget lorem at, feugiat ultricies ex. - Aliquam volutpat nibh non suscipit rhoncus. - - - + Comparing to if you did not specify it. @@ -94,10 +62,4 @@ rendered. You may do so using the `as` prop. > E.g. `Text.Body` renders a `

    ` but if you can specify another element to be > rendered instead. Inspect the element to find out - - - This is the original -
    - This becomes a span under the hood -
    -
    + diff --git a/stories/text/b-advanced.stories.tsx b/stories/text/b-advanced.stories.tsx new file mode 100644 index 000000000..9f9b6f373 --- /dev/null +++ b/stories/text/b-advanced.stories.tsx @@ -0,0 +1,77 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Text } from "src/text"; + +const meta: Meta = { + title: "General/Text/Advanced Usage", +}; + +export default meta; + +export const Combined: StoryObj = { + render: () => { + return ( + + The quick brown fox  + + jumps over + +  the lazy dog + + ); + }, + tags: ["pattern"], +}; + +export const Inline: StoryObj = { + render: () => { + return ( + + The quick  + + brown fox + +   + + jumps over + +  the lazy dog + + ); + }, + tags: ["pattern"], +}; + +export const Paragraph: StoryObj = { + render: () => { + return ( + <> + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Morbi euismod quam eget ex tincidunt dapibus. Donec vitae + leo vehicula, fermentum urna vitae, gravida ex. + + + Aenean imperdiet faucibus velit, eu maximus libero facilisis + ut. Donec nulla nisi, fermentum eget lorem at, feugiat + ultricies ex. Aliquam volutpat nibh non suscipit rhoncus. + + + ); + }, + tags: ["pattern"], +}; + +export const RenderAs: StoryObj = { + render: () => { + return ( + <> + This is the original +
    + + This becomes a span under the hood + + + ); + }, + tags: ["pattern"], +}; From 957b501166e9bd7d5829df432ca3169f82088bbc Mon Sep 17 00:00:00 2001 From: shawn wee Date: Mon, 10 Jun 2024 20:11:03 +0800 Subject: [PATCH 0175/1949] [MISC][SW] fix Text story not loading --- stories/text/a-intro.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/text/a-intro.mdx b/stories/text/a-intro.mdx index 30b607377..74354fca2 100644 --- a/stories/text/a-intro.mdx +++ b/stories/text/a-intro.mdx @@ -3,7 +3,7 @@ import { Heading3, Secondary, Title } from "../storybook-common"; import * as TextStories from "./a-intro.stories"; import { PropsTable } from "./props-table"; - + Text From 4b3d17dc6c1232f3c0eba78a68bd0c52b1cf2bfb Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 10 Jun 2024 23:21:53 +0800 Subject: [PATCH 0176/1949] [MISC][RL] Document TextStyleHelper usage --- stories/text/b-advanced.mdx | 17 +++++++++++++++++ stories/text/b-advanced.stories.tsx | 12 ++++++++++++ stories/text/doc-elements.tsx | 7 ++++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/stories/text/b-advanced.mdx b/stories/text/b-advanced.mdx index 3a8924b82..781f943cf 100644 --- a/stories/text/b-advanced.mdx +++ b/stories/text/b-advanced.mdx @@ -63,3 +63,20 @@ rendered. You may do so using the `as` prop. > rendered instead. Inspect the element to find out + +CSS styling + +Use `TextStyleHelper.getTextStyle()` to apply the relevant font properties to +an element for the specified size and weight. This is useful for containers that +contain text children but do not require a text element. + +```ts +import { TextStyleHelper } from "@lifesg/react-design-system/text"; + +export const ButtonContainer = styled.button` + ${TextStyleHelper.getTextStyle("Body", "semibold")} + padding: 0.5rem; +`; +``` + + diff --git a/stories/text/b-advanced.stories.tsx b/stories/text/b-advanced.stories.tsx index 9f9b6f373..94d56703b 100644 --- a/stories/text/b-advanced.stories.tsx +++ b/stories/text/b-advanced.stories.tsx @@ -1,5 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Text } from "src/text"; +import { ButtonContainer } from "./doc-elements"; const meta: Meta = { title: "General/Text/Advanced Usage", @@ -75,3 +76,14 @@ export const RenderAs: StoryObj = { }, tags: ["pattern"], }; + +export const TextStyleHelper: StoryObj = { + render: () => { + return ( + + The quick brown fox jumps over the lazy dog + + ); + }, + tags: ["pattern"], +}; diff --git a/stories/text/doc-elements.tsx b/stories/text/doc-elements.tsx index 8528ad73d..a3bfcb69a 100644 --- a/stories/text/doc-elements.tsx +++ b/stories/text/doc-elements.tsx @@ -1,5 +1,5 @@ -import React from "react"; import styled, { css } from "styled-components"; +import { TextStyleHelper } from "../../src"; import { Color } from "../../src/color/color"; import { Text } from "../../src/text/text"; @@ -139,3 +139,8 @@ export const LinkDiv = styled.div` } } `; + +export const ButtonContainer = styled.button` + ${TextStyleHelper.getTextStyle("BodySmall", "bold")} + padding: 0.5rem; +`; From 8ef6db93bf025c7da08d3fb4d9af884cb3128026 Mon Sep 17 00:00:00 2001 From: shawn wee Date: Tue, 11 Jun 2024 09:55:46 +0800 Subject: [PATCH 0177/1949] [MISC][SW] bump remark-gfm version --- .storybook/main.ts | 11 +- package-lock.json | 10943 ++++++++++++++++++++++++++++++------------- package.json | 2 +- 3 files changed, 7637 insertions(+), 3319 deletions(-) diff --git a/.storybook/main.ts b/.storybook/main.ts index b2fb2d894..1b6cc841a 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -11,7 +11,16 @@ const config: StorybookConfig = { "@storybook/addon-a11y", "@storybook/addon-themes", "@storybook/addon-interactions", - "@storybook/addon-docs", + { + name: "@storybook/addon-docs", + options: { + mdxPluginOptions: { + mdxCompileOptions: { + remarkPlugins: [remarkGfm], + }, + }, + }, + }, { name: "@storybook/addon-storysource", options: { diff --git a/package-lock.json b/package-lock.json index 4502a0b00..fe2ea9a02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -85,7 +85,7 @@ "react-resize-detector": "^7.0.0", "react-responsive": "^9.0.0-beta.10", "react-spring": "~9.7.3", - "remark-gfm": "^3.0.1", + "remark-gfm": "^4.0.0", "rollup": "^3.29.4", "rollup-plugin-generate-package-json": "^3.2.0", "rollup-plugin-peer-deps-external": "^2.2.4", @@ -16062,6 +16062,19 @@ "node": ">= 4.0.0" } }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/diff": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", @@ -24203,21 +24216,36 @@ } }, "node_modules/mdast-util-find-and-replace": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", - "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", + "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-find-and-replace/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", @@ -24230,144 +24258,135 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", - "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==", + "node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-gfm-autolink-literal": "^1.0.0", - "mdast-util-gfm-footnote": "^1.0.0", - "mdast-util-gfm-strikethrough": "^1.0.0", - "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz", - "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==", + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, "dependencies": { "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-find-and-replace": "^2.0.0", - "micromark-util-character": "^1.0.0" + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-footnote": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz", - "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==", + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-util-normalize-identifier": "^1.0.0" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz", - "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==", + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz", - "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==", + "node_modules/mdast-util-gfm-autolink-literal/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/unist": "*" } }, - "node_modules/mdast-util-gfm-table/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/mdast-util-gfm-table/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, "funding": [ { @@ -24378,95 +24397,115 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], + ] + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dev": true, "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-table/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "node_modules/mdast-util-gfm-footnote/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm-footnote/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-from-markdown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz", - "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==", + "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0" + "@types/mdast": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, "funding": [ { @@ -24482,110 +24521,145 @@ "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/mdast-util-gfm/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-core-commonmark": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", - "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, - "dependencies": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdx-jsx": "^2.0.0", - "mdast-util-mdxjs-esm": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", - "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, "funding": [ { @@ -24598,177 +24672,228 @@ } ], "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-jsx": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz", - "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "ccount": "^2.0.0", - "mdast-util-from-markdown": "^1.1.0", - "mdast-util-to-markdown": "^1.3.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": { + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, "funding": [ { @@ -24781,201 +24906,204 @@ } ], "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-footnote/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-footnote/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" + "@types/unist": "^3.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "node_modules/mdast-util-gfm-footnote/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/mdast-util-gfm-footnote/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/mdast-util-gfm-footnote/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-from-markdown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", - "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0" + "@types/mdast": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdxjs-esm/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, "funding": [ { @@ -24991,299 +25119,3478 @@ "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/mdast": "^3.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-to-markdown": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", - "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-to-string": { + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-title": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, - "engines": { - "node": ">= 0.6" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "dev": true, - "peer": true - }, - "node_modules/memoizerific": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "map-or-similar": "^1.5.0" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/mdast-util-gfm-table/node_modules/mdast-util-from-markdown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-table/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-from-markdown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/mdast-util-gfm/node_modules/mdast-util-from-markdown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mdast-util-gfm/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", + "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", + "dev": true, + "dependencies": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", + "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression/node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/mdast-util-mdx-expression/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz", + "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "ccount": "^2.0.0", + "mdast-util-from-markdown": "^1.1.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx/node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx/node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/mdast-util-mdx/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", + "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm/node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/mdast-util-mdxjs-esm/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "dev": true, + "peer": true + }, + "node_modules/memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, + "dependencies": { + "map-or-similar": "^1.5.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/metro": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.9.tgz", + "integrity": "sha512-Bc57Xf3GO2Xe4UWQsBj/oW6YfLPABEu8jfDVDiNmJvoQW4CO34oDPuYKe4KlXzXhcuNsqOtSxpbjCRRVjhhREg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/parser": "^7.20.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.20.1", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.80.9", + "metro-cache": "0.80.9", + "metro-cache-key": "0.80.9", + "metro-config": "0.80.9", + "metro-core": "0.80.9", + "metro-file-map": "0.80.9", + "metro-resolver": "0.80.9", + "metro-runtime": "0.80.9", + "metro-source-map": "0.80.9", + "metro-symbolicate": "0.80.9", + "metro-transform-plugins": "0.80.9", + "metro-transform-worker": "0.80.9", + "mime-types": "^2.1.27", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "rimraf": "^3.0.2", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "throat": "^5.0.0", + "ws": "^7.5.1", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.9.tgz", + "integrity": "sha512-d76BSm64KZam1nifRZlNJmtwIgAeZhZG3fi3K+EmPOlrR8rDtBxQHDSN3fSGeNB9CirdTyabTMQCkCup6BXFSQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "hermes-parser": "0.20.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==", + "dev": true, + "peer": true + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "dev": true, + "peer": true, + "dependencies": { + "hermes-estree": "0.20.1" + } + }, + "node_modules/metro-cache": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.9.tgz", + "integrity": "sha512-ujEdSI43QwI+Dj2xuNax8LMo8UgKuXJEdxJkzGPU6iIx42nYa1byQ+aADv/iPh5sh5a//h5FopraW5voXSgm2w==", + "dev": true, + "peer": true, + "dependencies": { + "metro-core": "0.80.9", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-cache-key": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.9.tgz", + "integrity": "sha512-hRcYGhEiWIdM87hU0fBlcGr+tHDEAT+7LYNCW89p5JhErFt/QaAkVx4fb5bW3YtXGv5BTV7AspWPERoIb99CXg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-config": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.9.tgz", + "integrity": "sha512-28wW7CqS3eJrunRGnsibWldqgwRP9ywBEf7kg+uzUHkSFJNKPM1K3UNSngHmH0EZjomizqQA2Zi6/y6VdZMolg==", + "dev": true, + "peer": true, + "dependencies": { + "connect": "^3.6.5", + "cosmiconfig": "^5.0.5", + "jest-validate": "^29.6.3", + "metro": "0.80.9", + "metro-cache": "0.80.9", + "metro-core": "0.80.9", + "metro-runtime": "0.80.9" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/metro-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/metro-config/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/metro-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/metro-config/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "peer": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-config/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "peer": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "node_modules/metro-config/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/metro-config/node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">= 8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/metro-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/metro-config/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "peer": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/metro-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/metro": { + "node_modules/metro-config/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-core": { "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.9.tgz", - "integrity": "sha512-Bc57Xf3GO2Xe4UWQsBj/oW6YfLPABEu8jfDVDiNmJvoQW4CO34oDPuYKe4KlXzXhcuNsqOtSxpbjCRRVjhhREg==", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.9.tgz", + "integrity": "sha512-tbltWQn+XTdULkGdzHIxlxk4SdnKxttvQQV3wpqqFbHDteR4gwCyTR2RyYJvxgU7HELfHtrVbqgqAdlPByUSbg==", "dev": true, "peer": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "accepts": "^1.3.7", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.80.9" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-file-map": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.9.tgz", + "integrity": "sha512-sBUjVtQMHagItJH/wGU9sn3k2u0nrCl0CdR4SFMO1tksXLKbkigyQx4cbpcyPVOAmGTVuy3jyvBlELaGCAhplQ==", + "dev": true, + "peer": true, + "dependencies": { + "anymatch": "^3.0.3", "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", + "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.4", - "hermes-parser": "0.20.1", - "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.6.3", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.9", - "metro-cache": "0.80.9", - "metro-cache-key": "0.80.9", - "metro-config": "0.80.9", - "metro-core": "0.80.9", - "metro-file-map": "0.80.9", - "metro-resolver": "0.80.9", - "metro-runtime": "0.80.9", - "metro-source-map": "0.80.9", - "metro-symbolicate": "0.80.9", - "metro-transform-plugins": "0.80.9", - "metro-transform-worker": "0.80.9", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", + "micromatch": "^4.0.4", + "node-abort-controller": "^3.1.1", "nullthrows": "^1.1.1", - "rimraf": "^3.0.2", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "throat": "^5.0.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" + "walker": "^1.0.7" }, - "bin": { - "metro": "src/cli.js" + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/metro-file-map/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro-file-map/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-file-map/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/metro-file-map/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "peer": true + }, + "node_modules/metro-file-map/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/metro-minify-terser": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.9.tgz", + "integrity": "sha512-FEeCeFbkvvPuhjixZ1FYrXtO0araTpV6UbcnGgDUpH7s7eR5FG/PiJz3TsuuPP/HwCK19cZtQydcA2QrCw446A==", + "dev": true, + "peer": true, + "dependencies": { + "terser": "^5.15.0" }, "engines": { "node": ">=18" } }, - "node_modules/metro-babel-transformer": { + "node_modules/metro-resolver": { "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.9.tgz", - "integrity": "sha512-d76BSm64KZam1nifRZlNJmtwIgAeZhZG3fi3K+EmPOlrR8rDtBxQHDSN3fSGeNB9CirdTyabTMQCkCup6BXFSQ==", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.9.tgz", + "integrity": "sha512-wAPIjkN59BQN6gocVsAvvpZ1+LQkkqUaswlT++cJafE/e54GoVkMNCmrR4BsgQHr9DknZ5Um/nKueeN7kaEz9w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/metro-runtime": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.9.tgz", + "integrity": "sha512-8PTVIgrVcyU+X/rVCy/9yxNlvXsBCk5JwwkbAm/Dm+Abo6NBGtNjWF0M1Xo/NWCb4phamNWcD7cHdR91HhbJvg==", "dev": true, "peer": true, "dependencies": { - "@babel/core": "^7.20.0", - "hermes-parser": "0.20.1", - "nullthrows": "^1.1.1" + "@babel/runtime": "^7.0.0" }, "engines": { "node": ">=18" } }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", - "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==", + "node_modules/metro-source-map": { + "version": "0.80.9", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.9.tgz", + "integrity": "sha512-RMn+XS4VTJIwMPOUSj61xlxgBvPeY4G6s5uIn6kt6HB6A/k9ekhr65UkkDD7WzHYs3a9o869qU8tvOZvqeQzgw==", "dev": true, - "peer": true + "peer": true, + "dependencies": { + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.80.9", + "nullthrows": "^1.1.1", + "ob1": "0.80.9", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=18" + } }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", - "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "node_modules/metro-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, "peer": true, - "dependencies": { - "hermes-estree": "0.20.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/metro-cache": { + "node_modules/metro-symbolicate": { "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.9.tgz", - "integrity": "sha512-ujEdSI43QwI+Dj2xuNax8LMo8UgKuXJEdxJkzGPU6iIx42nYa1byQ+aADv/iPh5sh5a//h5FopraW5voXSgm2w==", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.9.tgz", + "integrity": "sha512-Ykae12rdqSs98hg41RKEToojuIW85wNdmSe/eHUgMkzbvCFNVgcC0w3dKZEhSsqQOXapXRlLtHkaHLil0UD/EA==", "dev": true, "peer": true, "dependencies": { - "metro-core": "0.80.9", - "rimraf": "^3.0.2" + "invariant": "^2.2.4", + "metro-source-map": "0.80.9", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" }, "engines": { "node": ">=18" } }, - "node_modules/metro-cache-key": { + "node_modules/metro-symbolicate/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-transform-plugins": { "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.9.tgz", - "integrity": "sha512-hRcYGhEiWIdM87hU0fBlcGr+tHDEAT+7LYNCW89p5JhErFt/QaAkVx4fb5bW3YtXGv5BTV7AspWPERoIb99CXg==", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.9.tgz", + "integrity": "sha512-UlDk/uc8UdfLNJhPbF3tvwajyuuygBcyp+yBuS/q0z3QSuN/EbLllY3rK8OTD9n4h00qZ/qgxGv/lMFJkwP4vg==", "dev": true, "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.20.0", + "nullthrows": "^1.1.1" + }, "engines": { "node": ">=18" } }, - "node_modules/metro-config": { + "node_modules/metro-transform-worker": { "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.9.tgz", - "integrity": "sha512-28wW7CqS3eJrunRGnsibWldqgwRP9ywBEf7kg+uzUHkSFJNKPM1K3UNSngHmH0EZjomizqQA2Zi6/y6VdZMolg==", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.9.tgz", + "integrity": "sha512-c/IrzMUVnI0hSVVit4TXzt3A1GiUltGVlzCmLJWxNrBGHGrJhvgePj38+GXl1Xf4Fd4vx6qLUkKMQ3ux73bFLQ==", "dev": true, "peer": true, "dependencies": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "jest-validate": "^29.6.3", + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.0", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", "metro": "0.80.9", + "metro-babel-transformer": "0.80.9", "metro-cache": "0.80.9", - "metro-core": "0.80.9", - "metro-runtime": "0.80.9" + "metro-cache-key": "0.80.9", + "metro-minify-terser": "0.80.9", + "metro-source-map": "0.80.9", + "metro-transform-plugins": "0.80.9", + "nullthrows": "^1.1.1" }, "engines": { "node": ">=18" } }, - "node_modules/metro-config/node_modules/ansi-styles": { + "node_modules/metro/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -25299,30 +28606,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/metro-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/metro-config/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/metro-config/node_modules/chalk": { + "node_modules/metro/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -25339,141 +28623,147 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/metro-config/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true, + "peer": true + }, + "node_modules/metro/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "peer": true, "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/metro-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/metro/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/metro-config/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "node_modules/metro/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "peer": true, - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "peer": true }, - "node_modules/metro-config/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/metro/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/metro-config/node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", + "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==", "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "peer": true }, - "node_modules/metro-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", + "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", "dev": true, "peer": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "hermes-estree": "0.20.1" } }, - "node_modules/metro-config/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "node_modules/metro/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "peer": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/metro-config/node_modules/pretty-format": { + "node_modules/metro/node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/metro-config/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/metro/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/metro-config/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "node_modules/metro/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "peer": true + }, + "node_modules/metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, "peer": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/metro-config/node_modules/supports-color": { + "node_modules/metro/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -25486,468 +28776,737 @@ "node": ">=8" } }, - "node_modules/metro-core": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.9.tgz", - "integrity": "sha512-tbltWQn+XTdULkGdzHIxlxk4SdnKxttvQQV3wpqqFbHDteR4gwCyTR2RyYJvxgU7HELfHtrVbqgqAdlPByUSbg==", + "node_modules/metro/node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true, + "peer": true + }, + "node_modules/metro/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "peer": true, "dependencies": { - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.9" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/metro-file-map": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.9.tgz", - "integrity": "sha512-sBUjVtQMHagItJH/wGU9sn3k2u0nrCl0CdR4SFMO1tksXLKbkigyQx4cbpcyPVOAmGTVuy3jyvBlELaGCAhplQ==", + "node_modules/metro/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "peer": true, - "dependencies": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.6.3", - "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">=12" } }, - "node_modules/metro-file-map/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ms": "2.0.0" + "debug": "^4.0.0", + "parse-entities": "^2.0.0" } }, - "node_modules/metro-file-map/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" } }, - "node_modules/metro-file-map/node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "dev": true, - "peer": true, "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/metro-file-map/node_modules/ms": { + "node_modules/micromark-extension-gfm-autolink-literal": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/metro-file-map/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", "dev": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/metro-minify-terser": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.9.tgz", - "integrity": "sha512-FEeCeFbkvvPuhjixZ1FYrXtO0araTpV6UbcnGgDUpH7s7eR5FG/PiJz3TsuuPP/HwCK19cZtQydcA2QrCw446A==", + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "terser": "^5.15.0" - }, - "engines": { - "node": ">=18" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro-resolver": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.9.tgz", - "integrity": "sha512-wAPIjkN59BQN6gocVsAvvpZ1+LQkkqUaswlT++cJafE/e54GoVkMNCmrR4BsgQHr9DknZ5Um/nKueeN7kaEz9w==", + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "peer": true, - "engines": { - "node": ">=18" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/metro-runtime": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.9.tgz", - "integrity": "sha512-8PTVIgrVcyU+X/rVCy/9yxNlvXsBCk5JwwkbAm/Dm+Abo6NBGtNjWF0M1Xo/NWCb4phamNWcD7cHdR91HhbJvg==", + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.0.0" - }, - "engines": { - "node": ">=18" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/metro-source-map": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.9.tgz", - "integrity": "sha512-RMn+XS4VTJIwMPOUSj61xlxgBvPeY4G6s5uIn6kt6HB6A/k9ekhr65UkkDD7WzHYs3a9o869qU8tvOZvqeQzgw==", + "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", "dev": true, - "peer": true, "dependencies": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.80.9", - "nullthrows": "^1.1.1", - "ob1": "0.80.9", - "source-map": "^0.5.6", - "vlq": "^1.0.0" + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, - "engines": { - "node": ">=18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/metro-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-symbolicate": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.9.tgz", - "integrity": "sha512-Ykae12rdqSs98hg41RKEToojuIW85wNdmSe/eHUgMkzbvCFNVgcC0w3dKZEhSsqQOXapXRlLtHkaHLil0UD/EA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.80.9", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=18" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro-symbolicate/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro-transform-plugins": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.9.tgz", - "integrity": "sha512-UlDk/uc8UdfLNJhPbF3tvwajyuuygBcyp+yBuS/q0z3QSuN/EbLllY3rK8OTD9n4h00qZ/qgxGv/lMFJkwP4vg==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro-transform-worker": { - "version": "0.80.9", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.9.tgz", - "integrity": "sha512-c/IrzMUVnI0hSVVit4TXzt3A1GiUltGVlzCmLJWxNrBGHGrJhvgePj38+GXl1Xf4Fd4vx6qLUkKMQ3ux73bFLQ==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "metro": "0.80.9", - "metro-babel-transformer": "0.80.9", - "metro-cache": "0.80.9", - "metro-cache-key": "0.80.9", - "metro-minify-terser": "0.80.9", - "metro-source-map": "0.80.9", - "metro-transform-plugins": "0.80.9", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro/node_modules/ci-info": { + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-chunked": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true, - "peer": true - }, - "node_modules/metro/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "peer": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/metro/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ms": "2.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "peer": true + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/metro/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", - "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, - "peer": true + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", - "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "hermes-estree": "0.20.1" + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/metro/node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", "dev": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, - "peer": true + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "node_modules/metro/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/metro/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "micromark-util-types": "^2.0.0" } }, - "node_modules/metro/node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "peer": true + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/metro/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", "dev": true, - "peer": true, "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/metro/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, "funding": [ { @@ -25960,14 +29519,14 @@ } ], "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, "funding": [ { @@ -25980,144 +29539,230 @@ } ], "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/micromark-extension-gfm": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", - "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "dev": true, "dependencies": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-footnote": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", - "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", + "node_modules/micromark-extension-gfm-tagfilter/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", "dev": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", - "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "micromark-core-commonmark": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", - "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/micromark-extension-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", - "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm/node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", - "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", + "node_modules/micromark-extension-gfm/node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", - "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", + "node_modules/micromark-extension-gfm/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-extension-gfm/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, "node_modules/micromark-extension-mdx-expression": { "version": "1.0.8", @@ -27441,540 +31086,868 @@ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" }, "engines": { "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, "engines": { - "node": ">=8" + "node": "14 || >=16.14" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/peek-stream": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", + "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" - }, + "buffer-from": "^1.0.0", + "duplexify": "^3.5.0", + "through2": "^2.0.3" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/pidtree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", + "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", "dev": true, - "dependencies": { - "p-limit": "^3.0.2" + "bin": { + "pidtree": "bin/pidtree.js" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" } }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" + "find-up": "^5.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "node_modules/polished": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", "dev": true, "dependencies": { - "p-finally": "^1.0.0" + "@babel/runtime": "^7.17.8" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "dependencies": { - "callsites": "^3.0.0" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dev": true, "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, "engines": { - "node": ">= 0.8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "dev": true, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/postcss-import": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.0.tgz", + "integrity": "sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, "engines": { - "node": ">=8" + "node": ">=18.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, "engines": { - "node": "14 || >=16.14" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": "*" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/peek-stream": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", - "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "duplexify": "^3.5.0", - "through2": "^2.0.3" - } - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8.6" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/pidtree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" + "dependencies": { + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=0.10" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" } }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, "dependencies": { - "find-up": "^5.0.0" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/polished": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", - "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.8" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0" }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, "peerDependencies": { - "postcss": "^8.2.2" + "postcss": "^8.2.15" } }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -27984,13 +31957,12 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -28000,11 +31972,14 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -28012,11 +31987,14 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-discard-duplicates": { + "node_modules/postcss-normalize-timing-functions": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -28024,11 +32002,15 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-discard-empty": { + "node_modules/postcss-normalize-unicode": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -28036,11 +32018,15 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-discard-overridden": { + "node_modules/postcss-normalize-url": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -28048,60 +32034,45 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-import": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.0.tgz", - "integrity": "sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==", + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=18.0.0" + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.0.0" + "postcss": "^8.2.15" } }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dev": true, "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "postcss": "^8.2.15" } }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -28110,16 +32081,13 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -28128,13 +32096,27 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-font-values": { + "node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -28143,15 +32125,13 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-gradients": { + "node_modules/postcss-unique-selectors": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.0.5" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -28160,1249 +32140,1282 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=10.13.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "node_modules/prettier-fallback": { + "name": "prettier", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=14" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/postcss-modules": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", - "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "node_modules/pretty": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", + "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==", + "dev": true, + "dependencies": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "dependencies": { - "generic-names": "^4.0.0", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, - "peerDependencies": { - "postcss": "^8.0.0" + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">= 0.8" } }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "node_modules/pretty-quick": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.3.1.tgz", + "integrity": "sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.4" + "execa": "^4.1.0", + "find-up": "^4.1.0", + "ignore": "^5.3.0", + "mri": "^1.2.0", + "picocolors": "^1.0.0", + "picomatch": "^3.0.1", + "tslib": "^2.6.2" + }, + "bin": { + "pretty-quick": "dist/cli.js" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=10.13" }, "peerDependencies": { - "postcss": "^8.1.0" + "prettier": "^2.0.0" } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/pretty-quick/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "dependencies": { - "icss-utils": "^5.0.0" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "node_modules/pretty-quick/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "engines": { + "node": ">=8" } }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "node_modules/pretty-quick/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "pump": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "node_modules/pretty-quick/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8.12.0" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "node_modules/pretty-quick/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "p-locate": "^4.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "node_modules/pretty-quick/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "p-try": "^2.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "node_modules/pretty-quick/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "p-limit": "^2.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "node_modules/pretty-quick/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.12" } }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 6" } }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dev": true, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.10" } }, - "node_modules/postcss-selector-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=6" } }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "optional": true, + "peer": true + }, + "node_modules/qs": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" }, "engines": { - "node": ">=10.13.0" + "node": ">=0.6" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prettier-fallback": { - "name": "prettier", - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", - "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, + "peer": true, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": ">=0.4.x" } }, - "node_modules/pretty": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", - "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==", + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "dev": true, + "peer": true, "dependencies": { - "condense-newlines": "^0.2.1", - "extend-shallow": "^2.0.1", - "js-beautify": "^1.6.12" - }, - "engines": { - "node": ">=0.10.0" + "inherits": "~2.0.3" } }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ramda": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", + "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" } }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "safe-buffer": "^5.1.0" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, "engines": { "node": ">= 0.8" } }, - "node_modules/pretty-quick": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.3.1.tgz", - "integrity": "sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg==", - "dev": true, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "dependencies": { - "execa": "^4.1.0", - "find-up": "^4.1.0", - "ignore": "^5.3.0", - "mri": "^1.2.0", - "picocolors": "^1.0.0", - "picomatch": "^3.0.1", - "tslib": "^2.6.2" - }, - "bin": { - "pretty-quick": "dist/cli.js" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" }, "engines": { - "node": ">=10.13" - }, - "peerDependencies": { - "prettier": "^2.0.0" + "node": ">=0.10.0" } }, - "node_modules/pretty-quick/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "node_modules/react-colorful": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", + "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/pretty-quick/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/react-devtools-core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.2.0.tgz", + "integrity": "sha512-vZK+/gvxxsieAoAyYaiRIVFxlajb7KXhgBDV7OsoMzaAE+IqGpoxusBjIgq5ibqA2IloKu0p9n7tE68z1xs18A==", "dev": true, + "peer": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "shell-quote": "^1.6.1", + "ws": "^7" } }, - "node_modules/pretty-quick/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/react-docgen": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-7.0.3.tgz", + "integrity": "sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==", "dev": true, "dependencies": { - "pump": "^3.0.0" + "@babel/core": "^7.18.9", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9", + "@types/babel__core": "^7.18.0", + "@types/babel__traverse": "^7.18.0", + "@types/doctrine": "^0.0.9", + "@types/resolve": "^1.20.2", + "doctrine": "^3.0.0", + "resolve": "^1.22.1", + "strip-indent": "^4.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.14.0" } }, - "node_modules/pretty-quick/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "node_modules/react-docgen-typescript": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", + "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", "dev": true, - "engines": { - "node": ">=8.12.0" + "peerDependencies": { + "typescript": ">= 4.3.x" } }, - "node_modules/pretty-quick/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "node_modules/react-docgen/node_modules/@types/doctrine": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz", + "integrity": "sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==", + "dev": true + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "dependencies": { - "p-locate": "^4.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "react": "17.0.2" } }, - "node_modules/pretty-quick/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/react-dropzone": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", + "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "attr-accept": "^2.2.2", + "file-selector": "^0.6.0", + "prop-types": "^15.8.1" }, "engines": { - "node": ">=6" + "node": ">= 10.13" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" } }, - "node_modules/pretty-quick/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/react-element-to-jsx-string": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", + "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "18.1.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", + "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" } }, - "node_modules/pretty-quick/node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "node_modules/react-element-to-jsx-string/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/react-intersection-observer": { + "version": "9.10.3", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.10.3.tgz", + "integrity": "sha512-9NYfKwPZRovB6QJee7fDg0zz/SyYrqXtn5xTZU0vwLtLVBtfu9aZt1pVmr825REE49VPDZ7Lm5SNHjJBOTZHpA==", "dev": true, - "engines": { - "node": ">=10" + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } } }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/react-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", + "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, + "peer": true, "engines": { - "node": ">= 0.6.0" + "node": ">=0.10.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise.series": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", - "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", "dev": true, + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, "engines": { - "node": ">=0.12" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", "dev": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/react-resize-detector": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-7.1.2.tgz", + "integrity": "sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw==", + "dev": true, "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "lodash": "^4.17.21" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/react-responsive": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", + "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", "dev": true, "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "hyphenate-style-name": "^1.0.0", + "matchmediaquery": "^0.3.0", + "prop-types": "^15.6.1", + "shallow-equal": "^1.2.1" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10" + }, + "peerDependencies": { + "react": ">=16.8.0" } }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/react-shallow-renderer": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", "dev": true, + "peer": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, + "node_modules/react-slider": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/react-slider/-/react-slider-2.0.6.tgz", + "integrity": "sha512-gJxG1HwmuMTJ+oWIRCmVWvgwotNCbByTwRkFZC6U4MBsHqJBmxwbYRJUmxy4Tke1ef8r9jfXjgkmY/uHOCEvbA==", "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18" } }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "node_modules/react-spring": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-9.7.3.tgz", + "integrity": "sha512-oTxDpFV5gzq7jQX6+bU0SVq+vX8VnuuT5c8Zwn6CpDErOPvCmV+DRkPiEBtaL3Ozgzwiy5yFx83N0h303j/r3A==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "@react-spring/core": "~9.7.3", + "@react-spring/konva": "~9.7.3", + "@react-spring/native": "~9.7.3", + "@react-spring/three": "~9.7.3", + "@react-spring/web": "~9.7.3", + "@react-spring/zdog": "~9.7.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/react-spring/node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "optional": true, - "peer": true - }, - "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "node_modules/react-spring/node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "peer": true, "dependencies": { - "side-channel": "^1.0.6" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/react-spring/node_modules/@react-spring/konva": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/konva/-/konva-9.7.3.tgz", + "integrity": "sha512-R9sY6SiPGYqz1383P5qppg5z57YfChVknOC1UxxaGxpw+WiZa8fZ4zmZobslrw+os3/+HAXZv8O+EvU/nQpf7g==", + "dev": true, + "dependencies": { + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "konva": ">=2.6", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-konva": "^16.8.0 || ^16.8.7-0 || ^16.9.0-0 || ^16.10.1-0 || ^16.12.0-0 || ^16.13.0-0 || ^17.0.0-0 || ^17.0.1-0 || ^17.0.2-0 || ^18.0.0-0" } }, - "node_modules/querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "node_modules/react-spring/node_modules/@react-spring/native": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/native/-/native-9.7.3.tgz", + "integrity": "sha512-4mpxX3FuEBCUT6ae2fjhxcJW6bhr2FBwFf274eXB7n+U30Gdg8Wo2qYwcUnmiAA0S3dvP8vLTazx3+CYWFShnA==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.x" + "dependencies": { + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "react": "^16.8.0 || >=17.0.0 || >=18.0.0", + "react-native": ">=0.58" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "node_modules/react-spring/node_modules/@react-spring/three": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.7.3.tgz", + "integrity": "sha512-Q1p512CqUlmMK8UMBF/Rj79qndhOWq4XUTayxMP9S892jiXzWQuj+xC3Xvm59DP/D4JXusXpxxqfgoH+hmOktA==", "dev": true, - "peer": true, "dependencies": { - "inherits": "~2.0.3" + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "@react-three/fiber": ">=6.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "three": ">=0.126" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/react-spring/node_modules/@react-three/fiber": { + "version": "8.16.8", + "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-8.16.8.tgz", + "integrity": "sha512-Lc8fjATtvQEfSd8d5iKdbpHtRm/aPMeFj7jQvp6TNHfpo8IQTW3wwcE1ZMrGGoUH+w2mnyS+0MK1NLPLnuzGkQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "peer": true, + "dependencies": { + "@babel/runtime": "^7.17.8", + "@types/react-reconciler": "^0.26.7", + "@types/webxr": "*", + "base64-js": "^1.5.1", + "buffer": "^6.0.3", + "its-fine": "^1.0.6", + "react-reconciler": "^0.27.0", + "react-use-measure": "^2.1.1", + "scheduler": "^0.21.0", + "suspend-react": "^0.1.3", + "zustand": "^3.7.1" + }, + "peerDependencies": { + "expo": ">=43.0", + "expo-asset": ">=8.4", + "expo-file-system": ">=11.0", + "expo-gl": ">=11.0", + "react": ">=18.0", + "react-dom": ">=18.0", + "react-native": ">=0.64", + "three": ">=0.133" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "expo-asset": { + "optional": true }, - { - "type": "consulting", - "url": "https://feross.org/support" + "expo-file-system": { + "optional": true + }, + "expo-gl": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true } - ] - }, - "node_modules/ramda": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", - "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/its-fine": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.2.5.tgz", + "integrity": "sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==", "dev": true, + "peer": true, "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" + "@types/react-reconciler": "^0.28.0" + }, + "peerDependencies": { + "react": ">=18.0" } }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/its-fine/node_modules/@types/react-reconciler": { + "version": "0.28.8", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz", + "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==", "dev": true, + "peer": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" + "@types/react": "*" } }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/react-reconciler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.27.0.tgz", + "integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==", + "dev": true, + "peer": true, "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "scheduler": "^0.21.0" }, "engines": { "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^18.0.0" } }, - "node_modules/react-colorful": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", - "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", + "node_modules/react-spring/node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "peer": true, + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/react-devtools-core": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.2.0.tgz", - "integrity": "sha512-vZK+/gvxxsieAoAyYaiRIVFxlajb7KXhgBDV7OsoMzaAE+IqGpoxusBjIgq5ibqA2IloKu0p9n7tE68z1xs18A==", + "node_modules/react-spring/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "peer": true, "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/react-docgen": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-7.0.3.tgz", - "integrity": "sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==", + "node_modules/react-spring/node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "dev": true, + "peer": true, "dependencies": { - "@babel/core": "^7.18.9", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", - "@types/babel__core": "^7.18.0", - "@types/babel__traverse": "^7.18.0", - "@types/doctrine": "^0.0.9", - "@types/resolve": "^1.20.2", - "doctrine": "^3.0.0", - "resolve": "^1.22.1", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=16.14.0" + "@types/prop-types": "*", + "csstype": "^3.0.2" } }, - "node_modules/react-docgen-typescript": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", - "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", + "node_modules/react-spring/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dev": true, - "peerDependencies": { - "typescript": ">= 4.3.x" + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" } }, - "node_modules/react-docgen/node_modules/@types/doctrine": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz", - "integrity": "sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==", - "dev": true - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "node_modules/react-spring/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "react": "17.0.2" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-spring/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/react-dropzone": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", - "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", + "node_modules/react-spring/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "attr-accept": "^2.2.2", - "file-selector": "^0.6.0", - "prop-types": "^15.8.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 10.13" + "node": ">=10" }, - "peerDependencies": { - "react": ">= 16.8 || 18.0.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/react-element-to-jsx-string": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", - "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", + "node_modules/react-spring/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "peer": true, "dependencies": { - "@base2/pretty-print-object": "1.0.1", - "is-plain-object": "5.0.0", - "react-is": "18.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, - "peerDependencies": { - "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", - "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" + "engines": { + "node": ">=12" } }, - "node_modules/react-element-to-jsx-string/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, - "node_modules/react-intersection-observer": { - "version": "9.10.3", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.10.3.tgz", - "integrity": "sha512-9NYfKwPZRovB6QJee7fDg0zz/SyYrqXtn5xTZU0vwLtLVBtfu9aZt1pVmr825REE49VPDZ7Lm5SNHjJBOTZHpA==", + "node_modules/react-spring/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, - "node_modules/react-property": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", - "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==", - "dev": true + "peer": true }, - "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "node_modules/react-spring/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "node_modules/react-spring/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "react-remove-scroll-bar": "^2.3.3", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, + "peer": true, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=8" } }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "node_modules/react-spring/node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "peer": true, "dependencies": { - "react-style-singleton": "^2.2.1", - "tslib": "^2.0.0" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/react-resize-detector": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-7.1.2.tgz", - "integrity": "sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw==", + "node_modules/react-spring/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "peer": true, "dependencies": { - "lodash": "^4.17.21" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/react-responsive": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", - "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", + "node_modules/react-spring/node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "hyphenate-style-name": "^1.0.0", - "matchmediaquery": "^0.3.0", - "prop-types": "^15.6.1", - "shallow-equal": "^1.2.1" - }, + "peer": true, "engines": { - "node": ">=0.10" + "node": ">=10" }, - "peerDependencies": { - "react": ">=16.8.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/react-shallow-renderer": { - "version": "16.15.0", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", - "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", + "node_modules/react-spring/node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "peer": true, "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/react-slider": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/react-slider/-/react-slider-2.0.6.tgz", - "integrity": "sha512-gJxG1HwmuMTJ+oWIRCmVWvgwotNCbByTwRkFZC6U4MBsHqJBmxwbYRJUmxy4Tke1ef8r9jfXjgkmY/uHOCEvbA==", + "node_modules/react-spring/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "peer": true, "dependencies": { - "prop-types": "^15.8.1" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, - "peerDependencies": { - "react": "^16 || ^17 || ^18" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/react-spring": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-9.7.3.tgz", - "integrity": "sha512-oTxDpFV5gzq7jQX6+bU0SVq+vX8VnuuT5c8Zwn6CpDErOPvCmV+DRkPiEBtaL3Ozgzwiy5yFx83N0h303j/r3A==", + "node_modules/react-spring/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "peer": true, "dependencies": { - "@react-spring/core": "~9.7.3", - "@react-spring/konva": "~9.7.3", - "@react-spring/native": "~9.7.3", - "@react-spring/three": "~9.7.3", - "@react-spring/web": "~9.7.3", - "@react-spring/zdog": "~9.7.3" + "minimist": "^1.2.6" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/react-spring/node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/react-spring/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "peer": true, "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/react-spring/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/react-spring/node_modules/pretty-format/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.14.2" } }, - "node_modules/react-spring/node_modules/@react-spring/konva": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/konva/-/konva-9.7.3.tgz", - "integrity": "sha512-R9sY6SiPGYqz1383P5qppg5z57YfChVknOC1UxxaGxpw+WiZa8fZ4zmZobslrw+os3/+HAXZv8O+EvU/nQpf7g==", + "node_modules/react-spring/node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - }, - "peerDependencies": { - "konva": ">=2.6", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-konva": "^16.8.0 || ^16.8.7-0 || ^16.9.0-0 || ^16.10.1-0 || ^16.12.0-0 || ^16.13.0-0 || ^17.0.0-0 || ^17.0.1-0 || ^17.0.2-0 || ^18.0.0-0" - } + "peer": true }, - "node_modules/react-spring/node_modules/@react-spring/native": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/native/-/native-9.7.3.tgz", - "integrity": "sha512-4mpxX3FuEBCUT6ae2fjhxcJW6bhr2FBwFf274eXB7n+U30Gdg8Wo2qYwcUnmiAA0S3dvP8vLTazx3+CYWFShnA==", + "node_modules/react-spring/node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dev": true, + "peer": true, "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - }, - "peerDependencies": { - "react": "^16.8.0 || >=17.0.0 || >=18.0.0", - "react-native": ">=0.58" + "asap": "~2.0.6" } }, - "node_modules/react-spring/node_modules/@react-spring/three": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.7.3.tgz", - "integrity": "sha512-Q1p512CqUlmMK8UMBF/Rj79qndhOWq4XUTayxMP9S892jiXzWQuj+xC3Xvm59DP/D4JXusXpxxqfgoH+hmOktA==", + "node_modules/react-spring/node_modules/react-konva": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/react-konva/-/react-konva-18.2.10.tgz", + "integrity": "sha512-ohcX1BJINL43m4ynjZ24MxFI1syjBdrXhqVxYVDw2rKgr3yuS0x/6m1Y2Z4sl4T/gKhfreBx8KHisd0XC6OT1g==", "dev": true, + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/lavrton" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/konva" + }, + { + "type": "github", + "url": "https://github.com/sponsors/lavrton" + } + ], + "peer": true, "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" + "@types/react-reconciler": "^0.28.2", + "its-fine": "^1.1.1", + "react-reconciler": "~0.29.0", + "scheduler": "^0.23.0" }, "peerDependencies": { - "@react-three/fiber": ">=6.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "three": ">=0.126" + "konva": "^8.0.1 || ^7.2.5 || ^9.0.0", + "react": ">=18.0.0", + "react-dom": ">=18.0.0" } }, - "node_modules/react-spring/node_modules/@react-three/fiber": { - "version": "8.16.8", - "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-8.16.8.tgz", - "integrity": "sha512-Lc8fjATtvQEfSd8d5iKdbpHtRm/aPMeFj7jQvp6TNHfpo8IQTW3wwcE1ZMrGGoUH+w2mnyS+0MK1NLPLnuzGkQ==", + "node_modules/react-spring/node_modules/react-konva/node_modules/@types/react-reconciler": { + "version": "0.28.8", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz", + "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==", "dev": true, "peer": true, "dependencies": { - "@babel/runtime": "^7.17.8", - "@types/react-reconciler": "^0.26.7", - "@types/webxr": "*", - "base64-js": "^1.5.1", - "buffer": "^6.0.3", - "its-fine": "^1.0.6", - "react-reconciler": "^0.27.0", - "react-use-measure": "^2.1.1", - "scheduler": "^0.21.0", - "suspend-react": "^0.1.3", - "zustand": "^3.7.1" - }, - "peerDependencies": { - "expo": ">=43.0", - "expo-asset": ">=8.4", - "expo-file-system": ">=11.0", - "expo-gl": ">=11.0", - "react": ">=18.0", - "react-dom": ">=18.0", - "react-native": ">=0.64", - "three": ">=0.133" - }, - "peerDependenciesMeta": { - "expo": { - "optional": true - }, - "expo-asset": { - "optional": true - }, - "expo-file-system": { - "optional": true - }, - "expo-gl": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "@types/react": "*" } }, - "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/its-fine": { + "node_modules/react-spring/node_modules/react-konva/node_modules/its-fine": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.2.5.tgz", "integrity": "sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==", @@ -29415,1116 +33428,1408 @@ "react": ">=18.0" } }, - "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/its-fine/node_modules/@types/react-reconciler": { - "version": "0.28.8", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz", - "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==", + "node_modules/react-spring/node_modules/react-konva/node_modules/react-reconciler": { + "version": "0.29.2", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.2.tgz", + "integrity": "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==", "dev": true, "peer": true, "dependencies": { - "@types/react": "*" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^18.3.1" } }, - "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/react-reconciler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.27.0.tgz", - "integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==", + "node_modules/react-spring/node_modules/react-konva/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, "peer": true, "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.21.0" + "loose-envify": "^1.1.0" + } + }, + "node_modules/react-spring/node_modules/react-native": { + "version": "0.74.2", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.2.tgz", + "integrity": "sha512-EBMBjPPL4/GjHMP4NqsZabT3gI5WU9cSmduABGAGrd8uIcmTZ5F2Ng9k6gFmRm7n8e8CULxDNu98ZpQfBjl7Bw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.6.3", + "@react-native-community/cli": "13.6.8", + "@react-native-community/cli-platform-android": "13.6.8", + "@react-native-community/cli-platform-ios": "13.6.8", + "@react-native/assets-registry": "0.74.84", + "@react-native/codegen": "0.74.84", + "@react-native/community-cli-plugin": "0.74.84", + "@react-native/gradle-plugin": "0.74.84", + "@react-native/js-polyfills": "0.74.84", + "@react-native/normalize-colors": "0.74.84", + "@react-native/virtualized-lists": "0.74.84", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "jest-environment-node": "^29.6.3", + "jsc-android": "^250231.0.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.80.3", + "metro-source-map": "^0.80.3", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "pretty-format": "^26.5.2", + "promise": "^8.3.0", + "react-devtools-core": "^5.0.0", + "react-refresh": "^0.14.0", + "react-shallow-renderer": "^16.15.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.24.0-canary-efb381bbf-20230505", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.2", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "18.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-spring/node_modules/react-native/node_modules/@react-native/virtualized-lists": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.84.tgz", + "integrity": "sha512-XcV+qdqt2WihaY4iRm/M1FdSy+18lecU9mRXNmy9YK8g9Th/8XbNtmmKI0qWBx3KxyuXMH/zd0ps05YTrX16kw==", + "dev": true, + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0" - } - }, - "node_modules/react-spring/node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "peer": true, - "dependencies": { - "type-detect": "4.0.8" + "@types/react": "^18.2.6", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/react-spring/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/react-spring/node_modules/react-native/node_modules/scheduler": { + "version": "0.24.0-canary-efb381bbf-20230505", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", + "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", "dev": true, "peer": true, "dependencies": { - "@sinonjs/commons": "^3.0.0" + "loose-envify": "^1.1.0" } }, - "node_modules/react-spring/node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "node_modules/react-spring/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true, - "peer": true, - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } + "peer": true }, - "node_modules/react-spring/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "node_modules/react-spring/node_modules/scheduler": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz", + "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", "dev": true, "peer": true, "dependencies": { - "@types/yargs-parser": "*" + "loose-envify": "^1.1.0" } }, - "node_modules/react-spring/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/react-spring/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/react-spring/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/react-spring/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/react-spring/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/react-spring/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "async-limiter": "~1.0.0" } }, - "node_modules/react-spring/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/react-spring/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "peer": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" } }, - "node_modules/react-spring/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true - }, - "node_modules/react-spring/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-spring/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/react-spring/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "peer": true, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/react-spring/node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", "dev": true, - "peer": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/react-spring/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "node": ">=10" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/react-spring/node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/react-use-measure": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz", + "integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==", "dev": true, "peer": true, - "engines": { - "node": ">=10" + "dependencies": { + "debounce": "^1.2.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "react": ">=16.13", + "react-dom": ">=16.13" } }, - "node_modules/react-spring/node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/react-zdog": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/react-zdog/-/react-zdog-1.2.2.tgz", + "integrity": "sha512-Ix7ALha91aOEwiHuxumCeYbARS5XNpc/w0v145oGkM6poF/CvhKJwzLhM5sEZbtrghMA+psAhOJkCTzJoseicA==", "dev": true, "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "react": "^18.2.0", + "react-dom": "^18.2.0", + "resize-observer-polyfill": "^1.5.1" } }, - "node_modules/react-spring/node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/react-zdog/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/react-spring/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/react-zdog/node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dev": true, "peer": true, "dependencies": { - "minimist": "^1.2.6" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, - "bin": { - "mkdirp": "bin/cmd.js" + "peerDependencies": { + "react": "^18.3.1" } }, - "node_modules/react-spring/node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "node_modules/react-zdog/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, "peer": true, "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, + "loose-envify": "^1.1.0" + } + }, + "node_modules/react-zoom-pan-pinch": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.4.4.tgz", + "integrity": "sha512-lGTu7D9lQpYEQ6sH+NSlLA7gicgKRW8j+D/4HO1AbSV2POvKRFzdWQ8eI0r3xmOsl4dYQcY+teV6MhULeg1xBw==", "engines": { - "node": ">= 10" + "node": ">=8", + "npm": ">=5" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" } }, - "node_modules/react-spring/node_modules/pretty-format/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, - "peer": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "pify": "^2.3.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/react-spring/node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, - "peer": true + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/react-spring/node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "peer": true, "dependencies": { - "asap": "~2.0.6" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/react-spring/node_modules/react-konva": { - "version": "18.2.10", - "resolved": "https://registry.npmjs.org/react-konva/-/react-konva-18.2.10.tgz", - "integrity": "sha512-ohcX1BJINL43m4ynjZ24MxFI1syjBdrXhqVxYVDw2rKgr3yuS0x/6m1Y2Z4sl4T/gKhfreBx8KHisd0XC6OT1g==", + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "funding": [ - { - "type": "patreon", - "url": "https://www.patreon.com/lavrton" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/konva" - }, - { - "type": "github", - "url": "https://github.com/sponsors/lavrton" - } - ], - "peer": true, "dependencies": { - "@types/react-reconciler": "^0.28.2", - "its-fine": "^1.1.1", - "react-reconciler": "~0.29.0", - "scheduler": "^0.23.0" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, - "peerDependencies": { - "konva": "^8.0.1 || ^7.2.5 || ^9.0.0", - "react": ">=18.0.0", - "react-dom": ">=18.0.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-spring/node_modules/react-konva/node_modules/@types/react-reconciler": { - "version": "0.28.8", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz", - "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==", + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "peer": true, "dependencies": { - "@types/react": "*" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/react-spring/node_modules/react-konva/node_modules/its-fine": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.2.5.tgz", - "integrity": "sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==", + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "peer": true, "dependencies": { - "@types/react-reconciler": "^0.28.0" + "p-locate": "^4.1.0" }, - "peerDependencies": { - "react": ">=18.0" + "engines": { + "node": ">=8" } }, - "node_modules/react-spring/node_modules/react-konva/node_modules/react-reconciler": { - "version": "0.29.2", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.2.tgz", - "integrity": "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==", + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "peer": true, "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "p-try": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" }, - "peerDependencies": { - "react": "^18.3.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-spring/node_modules/react-konva/node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "peer": true, "dependencies": { - "loose-envify": "^1.1.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/react-spring/node_modules/react-native": { - "version": "0.74.2", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.74.2.tgz", - "integrity": "sha512-EBMBjPPL4/GjHMP4NqsZabT3gI5WU9cSmduABGAGrd8uIcmTZ5F2Ng9k6gFmRm7n8e8CULxDNu98ZpQfBjl7Bw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/create-cache-key-function": "^29.6.3", - "@react-native-community/cli": "13.6.8", - "@react-native-community/cli-platform-android": "13.6.8", - "@react-native-community/cli-platform-ios": "13.6.8", - "@react-native/assets-registry": "0.74.84", - "@react-native/codegen": "0.74.84", - "@react-native/community-cli-plugin": "0.74.84", - "@react-native/gradle-plugin": "0.74.84", - "@react-native/js-polyfills": "0.74.84", - "@react-native/normalize-colors": "0.74.84", - "@react-native/virtualized-lists": "0.74.84", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "base64-js": "^1.5.1", - "chalk": "^4.0.0", - "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "jest-environment-node": "^29.6.3", - "jsc-android": "^250231.0.0", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.80.3", - "metro-source-map": "^0.80.3", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.3.0", - "react-devtools-core": "^5.0.0", - "react-refresh": "^0.14.0", - "react-shallow-renderer": "^16.15.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.24.0-canary-efb381bbf-20230505", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.2", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" - }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^18.2.6", - "react": "18.2.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=8" } }, - "node_modules/react-spring/node_modules/react-native/node_modules/@react-native/virtualized-lists": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.74.84.tgz", - "integrity": "sha512-XcV+qdqt2WihaY4iRm/M1FdSy+18lecU9mRXNmy9YK8g9Th/8XbNtmmKI0qWBx3KxyuXMH/zd0ps05YTrX16kw==", + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "peer": true, "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^18.2.6", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">= 6" } }, - "node_modules/react-spring/node_modules/react-native/node_modules/scheduler": { - "version": "0.24.0-canary-efb381bbf-20230505", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", - "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "peer": true, "dependencies": { - "loose-envify": "^1.1.0" + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "node_modules/react-spring/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", "dev": true, "peer": true }, - "node_modules/react-spring/node_modules/scheduler": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz", - "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", + "node_modules/recast": { + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", + "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", "dev": true, - "peer": true, "dependencies": { - "loose-envify": "^1.1.0" + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" } }, - "node_modules/react-spring/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "peer": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/react-spring/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/redent/node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "min-indent": "^1.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/react-spring/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, - "peer": true, "dependencies": { - "async-limiter": "~1.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-spring/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, - "peer": true, "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "regenerate": "^1.4.2" }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/react-spring/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "peer": true, - "engines": { - "node": ">=12" + "dependencies": { + "@babel/runtime": "^7.8.4" } }, - "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=4" } }, - "node_modules/react-use-measure": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz", - "integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==", + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/rehype-external-links": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", + "integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==", "dev": true, - "peer": true, "dependencies": { - "debounce": "^1.2.1" + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-is-element": "^3.0.0", + "is-absolute-url": "^4.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0" }, - "peerDependencies": { - "react": ">=16.13", - "react-dom": ">=16.13" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-zdog": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/react-zdog/-/react-zdog-1.2.2.tgz", - "integrity": "sha512-Ix7ALha91aOEwiHuxumCeYbARS5XNpc/w0v145oGkM6poF/CvhKJwzLhM5sEZbtrghMA+psAhOJkCTzJoseicA==", + "node_modules/rehype-external-links/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, - "peer": true, "dependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0", - "resize-observer-polyfill": "^1.5.1" + "@types/unist": "*" } }, - "node_modules/react-zdog/node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "node_modules/rehype-external-links/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/rehype-external-links/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "peer": true, "dependencies": { - "loose-envify": "^1.1.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-zdog/node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "node_modules/rehype-external-links/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, - "peer": true, "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "peerDependencies": { - "react": "^18.3.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/react-zdog/node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "node_modules/rehype-external-links/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true, "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/react-zoom-pan-pinch": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.4.4.tgz", - "integrity": "sha512-lGTu7D9lQpYEQ6sH+NSlLA7gicgKRW8j+D/4HO1AbSV2POvKRFzdWQ8eI0r3xmOsl4dYQcY+teV6MhULeg1xBw==", - "engines": { - "node": ">=8", - "npm": ">=5" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, - "peerDependencies": { - "react": "*", - "react-dom": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "node_modules/rehype-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", + "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", "dev": true, "dependencies": { - "pify": "^2.3.0" + "@types/hast": "^3.0.0", + "github-slugger": "^2.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "node_modules/rehype-slug/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "@types/unist": "*" } }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "node_modules/rehype-slug/node_modules/@types/unist": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/rehype-slug/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/rehype-slug/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/rehype-slug/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", "dev": true, "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/remark-gfm/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "@types/unist": "*" } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/remark-gfm/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-gfm/node_modules/mdast-util-from-markdown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + }, + "node_modules/remark-gfm/node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/remark-gfm/node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" }, - "engines": { - "node": ">= 6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/remark-gfm/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "@types/mdast": "^4.0.0" }, - "engines": { - "node": ">=8.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", + "node_modules/remark-gfm/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, - "peer": true + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/remark-gfm/node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/remark-gfm/node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "node_modules/recast": { - "version": "0.23.9", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", - "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", + "node_modules/remark-gfm/node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tiny-invariant": "^1.3.3", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/recast/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/remark-gfm/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "node_modules/remark-gfm/node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/redent/node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "node_modules/remark-gfm/node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "node_modules/remark-gfm/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "node_modules/remark-gfm/node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "node_modules/remark-gfm/node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "node_modules/remark-gfm/node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "node_modules/remark-gfm/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@babel/runtime": "^7.8.4" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "node_modules/remark-gfm/node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "node_modules/remark-gfm/node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "node_modules/remark-gfm/node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/remark-gfm/node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "node_modules/remark-gfm/node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" } }, - "node_modules/rehype-external-links": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", - "integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==", + "node_modules/remark-gfm/node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/hast": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-is-element": "^3.0.0", - "is-absolute-url": "^4.0.0", - "space-separated-tokens": "^2.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/rehype-external-links/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "node_modules/remark-gfm/node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/unist": "*" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/rehype-external-links/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "node_modules/remark-gfm/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/rehype-external-links/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "node_modules/remark-gfm/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/remark-gfm/node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "dev": true, "dependencies": { - "@types/unist": "^3.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-external-links/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "node_modules/remark-gfm/node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dev": true, "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-external-links/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "node_modules/remark-gfm/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, "dependencies": { "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-slug": { + "node_modules/remark-gfm/node_modules/unist-util-is": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", - "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "@types/hast": "^3.0.0", - "github-slugger": "^2.0.0", - "hast-util-heading-rank": "^3.0.0", - "hast-util-to-string": "^3.0.0", - "unist-util-visit": "^5.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-slug/node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/rehype-slug/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true - }, - "node_modules/rehype-slug/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "node_modules/remark-gfm/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { "@types/unist": "^3.0.0" @@ -30534,7 +34839,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-slug/node_modules/unist-util-visit": { + "node_modules/remark-gfm/node_modules/unist-util-visit": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", @@ -30549,7 +34854,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-slug/node_modules/unist-util-visit-parents": { + "node_modules/remark-gfm/node_modules/unist-util-visit-parents": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", @@ -30563,25 +34868,29 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "node_modules/remark-gfm/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-gfm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", - "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "node_modules/remark-gfm/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^2.0.0", - "micromark-extension-gfm": "^2.0.0", - "unified": "^10.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", diff --git a/package.json b/package.json index 7c55dc37f..a40862c50 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "react-resize-detector": "^7.0.0", "react-responsive": "^9.0.0-beta.10", "react-spring": "~9.7.3", - "remark-gfm": "^3.0.1", + "remark-gfm": "^4.0.0", "rollup": "^3.29.4", "rollup-plugin-generate-package-json": "^3.2.0", "rollup-plugin-peer-deps-external": "^2.2.4", From b80eb0f9b16534d5377c7be5f2da571e1758aa13 Mon Sep 17 00:00:00 2001 From: Ruth Shirin Date: Tue, 11 Jun 2024 14:19:45 +0800 Subject: [PATCH 0178/1949] [CCUBE-1400][SR] Removed the uneeded display and align self style. --- src/toast/toast.styles.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index 1a891d1b8..599ba4cf1 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -112,8 +112,6 @@ export const Title = styled(Text.H4)` `; export const Description = styled.div` - display: flex; - align-items: center; position: relative; ${(props) => { return css` From 1a6874e5c7c1511eaaa6dc9eacd826aaddad7948 Mon Sep 17 00:00:00 2001 From: Ruth Shirin Date: Tue, 11 Jun 2024 16:06:13 +0800 Subject: [PATCH 0179/1949] [CCUBE-1400][SR] Amending padding, height and other styles for the icon, the button, the content wrapper container. --- src/toast/toast.styles.tsx | 16 ++++++++-------- src/toast/toast.tsx | 22 +++++++++++----------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index 599ba4cf1..4e5179f14 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -71,24 +71,25 @@ export const ContentWrapper = styled.div` flex: 1; justify-content: space-between; - ${MediaQuery.MaxWidth.tablet} { + ${MediaQuery.MaxWidth.mobileL} { display: flex; flex-direction: column; gap: 0.75rem; } `; -export const TextIconWrapper = styled(animated.div)` +export const TextIconWrapper = styled.div` display: flex; flex-direction: row; - align-items: start; + align-items: flex-start; ${(props) => { return css` & > svg { flex-shrink: 0; width: 1.5rem; - height: 1.625rem; + height: 1.5rem; + margin-top: 0.0625rem; margin-right: 0.5rem; color: ${getValidationColorAttributes(props).Icon}; } @@ -112,7 +113,6 @@ export const Title = styled(Text.H4)` `; export const Description = styled.div` - position: relative; ${(props) => { return css` p { @@ -123,13 +123,13 @@ export const Description = styled.div` `; export const ActionButton = styled(Button.Small)` - font-weight: 600; align-self: center; - white-space: nowrap; + overflow-wrap: anywhere; margin-left: auto; + height: auto; ${MediaQuery.MaxWidth.mobileL} { - align-self: start; + align-self: flex-start; margin-left: 2rem; } `; diff --git a/src/toast/toast.tsx b/src/toast/toast.tsx index 076d00c78..0f978d74b 100644 --- a/src/toast/toast.tsx +++ b/src/toast/toast.tsx @@ -108,6 +108,16 @@ export const Toast = ({ } }; + const renderDesc = () => { + if (React.isValidElement(label)) { + return label; + } else if (title) { + return {label}; + } else { + return {label}; + } + }; + return ( - {!title ? ( - React.isValidElement(label) ? ( - label - ) : ( - {label} - ) - ) : React.isValidElement(label) ? ( - label - ) : ( - {label} - )} + {renderDesc()} )} From 757d828474ca101b4edac82819aae6a9f8a378b8 Mon Sep 17 00:00:00 2001 From: roll Date: Tue, 11 Jun 2024 23:40:23 +0800 Subject: [PATCH 0180/1949] [CCUBE-1400][RL] Update documentation --- stories/toast/props-table.tsx | 9 ++--- stories/toast/toast.mdx | 10 ++--- stories/toast/toast.stories.tsx | 71 ++++++++------------------------- 3 files changed, 24 insertions(+), 66 deletions(-) diff --git a/stories/toast/props-table.tsx b/stories/toast/props-table.tsx index 3cff91385..e67c92cdd 100644 --- a/stories/toast/props-table.tsx +++ b/stories/toast/props-table.tsx @@ -103,9 +103,7 @@ const DATA: ApiTableSectionProps[] = [ name: "actionButton", description: ( <> - Consist of label and onClick, - which dictates what the label of the button is and what - happens when the button is clicked on + Renders a call to action in the Toast ), propTypes: ["ActionButtonProps"], @@ -118,14 +116,13 @@ const DATA: ApiTableSectionProps[] = [ { name: "label", mandatory: true, - description: "The label of the button", + description: "The label of the action button", propTypes: ["string"], }, { name: "onClick", mandatory: true, - description: - "The function that should be rendered when the action button is clicked.", + description: "Called when the action button is clicked", propTypes: ["() => void"], }, ], diff --git a/stories/toast/toast.mdx b/stories/toast/toast.mdx index a02d2ceb1..81bf8101e 100644 --- a/stories/toast/toast.mdx +++ b/stories/toast/toast.mdx @@ -34,15 +34,13 @@ This example demonstrates the default positioning of the Toast. It remains fixed -Using JSX Element Titles/Labels +Advanced styling -This example demonstrates how the toast will be displayed when a JSX element is passed into the title & label. +If you require a custom display for the title or label, you can construct your layout and pass it into the component. - + -With an Action Button - -This example demonstrates how the action button works. +Action button diff --git a/stories/toast/toast.stories.tsx b/stories/toast/toast.stories.tsx index eebbbf104..791d11a24 100644 --- a/stories/toast/toast.stories.tsx +++ b/stories/toast/toast.stories.tsx @@ -1,10 +1,8 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Button } from "src/button"; -import { Toast } from "src/toast"; import { Text } from "src/text"; -import { Card } from "src/card"; -import { Color } from "src/color"; +import { Toast } from "src/toast"; type Component = typeof Toast; @@ -177,59 +175,24 @@ export const FixedPositioning: StoryObj = { }, }; -export const WithJSXTitleAndLabel: StoryObj = { +export const WithCustomDisplay: StoryObj = { render: () => { - const title = ( - - This is a JSX Element - - ); - - const label = ( - - The - - label - - and title were passed in as JSX Elements - - ); return ( - <> - -
    - -
    - -
    - - + + This is a JSX Element + + } + label={ + + This is a JSX element that contains a{" "} + link + + } + fixed={false} + /> ); }, }; From 145553efe05e6351fe003692539970c8aa8e2ffc Mon Sep 17 00:00:00 2001 From: Ruth Shirin Date: Wed, 12 Jun 2024 14:21:19 +0800 Subject: [PATCH 0181/1949] [CCUBE-1400][SR] Amending toast by removing margin left for the dismiss button, amending breaking point and removing line height. --- src/toast/toast.styles.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index 4e5179f14..85c11c95b 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -46,12 +46,11 @@ export const Wrapper = styled(animated.div)` right: 0; padding: 1rem; border-radius: 0.5rem; - line-height: 0; z-index: 10; align-items: center; gap: 2rem; - ${MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.tablet} { left: 0; } @@ -150,7 +149,6 @@ export const DismissButton = styled(ClickableIcon)` } ${MediaQuery.MaxWidth.mobileL} { align-self: center; - margin-left: 2rem; } `; }}; From a95e28f7a41278f771d1063c4592031fa25627af Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Thu, 13 Jun 2024 10:01:09 +0800 Subject: [PATCH 0182/1949] [MOL-15775][AM] Renaming and minor updates --- src/toggle/toggle.styles.tsx | 33 ++++++++---------- src/toggle/toggle.tsx | 67 +++++++++++++++--------------------- 2 files changed, 43 insertions(+), 57 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index c45662ea2..e7335a983 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -21,25 +21,20 @@ interface ContainerStyleProps extends StyleProps { $error?: boolean; } -interface IndicatorContainerStyleProps { +interface IndicatorLabelContainerStyleProps { $addPadding?: boolean; } interface LabelStyleProps extends StyleProps { - $maxLines?: { desktop?: number; mobile?: number }; + $maxLines?: { desktop?: number; mobile?: number; tablet?: number }; } -interface ButtonStyleProps extends StyleProps { - $show?: boolean; +interface ExpandButtonStyleProps extends StyleProps { $paddingTopRequired?: boolean; } -interface ErrorContainerProps extends StyleProps { - $show?: boolean; -} interface ChildrenStyleProps extends StyleProps { $isFinalItem?: boolean; - $expanded?: boolean; } // ============================================================================= @@ -175,6 +170,9 @@ export const Label = styled.label` overflow-wrap: break-word; -webkit-line-clamp: ${(props) => props.$maxLines?.desktop ?? "none"}; ${MediaQuery.MaxWidth.tablet} { + -webkit-line-clamp: ${(props) => props.$maxLines?.tablet ?? "none"}; + } + ${MediaQuery.MaxWidth.mobileL} { -webkit-line-clamp: ${(props) => props.$maxLines?.mobile ?? "none"}; } color: ${Color.Neutral[1]}; @@ -272,7 +270,7 @@ export const HeaderContainer = styled.div` }} `; -export const IndicatorLabelContainer = styled.div` +export const IndicatorLabelContainer = styled.div` display: flex; height: 100%; width: 100%; @@ -294,13 +292,13 @@ export const RemoveButton = styled.button` cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; `; -export const ExpandButtonContainer = styled.button` +export const ExpandButton = styled.button` svg { width: 1.125rem; height: 1.125rem; margin-left: 0.5rem; } - color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; + color: ${(props) => (props.disabled ? Color.Neutral[3] : Color.Primary)}; ${TextStyleHelper.getTextStyle("H4", "semibold")} width: 100%; justify-content: flex-end; @@ -308,36 +306,34 @@ export const ExpandButtonContainer = styled.button` padding-bottom: 0.6875rem; border: none; background: none; - cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; + cursor: ${(props) => (props.disabled ? "not-allowed" : "pointer")}; float: right; - display: ${(props) => (props.$show ? "flex" : "none")}; padding-top: ${(props) => props.$paddingTopRequired ? "0.6875rem" : "0rem"}; `; -export const ErrorContainer = styled.div` + +export const ErrorContainer = styled.div` width: 100%; color: ${(props) => (props.$disabled ? Color.Neutral[3] : Color.Primary)}; border: none; background: none; cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; - display: ${(props) => (props.$show ? "flex" : "none")}; padding-top: 0.6875rem; - padding-bottom: ${(props) => (!props.$show ? "0.6875rem" : "0.5rem")}; + padding-bottom: 0.5rem; `; export const AlertContainer = styled(Alert)` width: 100%; user-select: none; `; + export const ChildrenContainer = styled.div` padding: 0 1rem; `; export const Children = styled.div` - ${TextStyleHelper.getTextStyle("BodySmall", "regular")} padding-top: 0.6875rem; padding-bottom: ${(props) => (props.$isFinalItem ? "0.6875rem" : "0.5rem")}; - display: ${(props) => (props.$expanded ? "block" : "none")}; ${applyHtmlContentStyle({ textSize: "BodySmall" })} ${(props) => { @@ -361,6 +357,7 @@ export const ErrorText = styled(Text.H5)` color: ${(props) => props.$disabled ? Color.Neutral[3] : Color.Validation.Red.Text}; `; + export const ErrorListItem = styled.li` color: ${(props) => props.$disabled diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index bf4f9a31c..fc4aef6be 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -1,6 +1,6 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; -import { useEffect, useRef, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { ToggleIcon, ToggleIconType } from "../shared/toggle-icon/toggle-icon"; import { TextList } from "../text-list"; import { SimpleIdGenerator } from "../util"; @@ -12,7 +12,7 @@ import { ErrorContainer, ErrorListItem, ErrorText, - ExpandButtonContainer, + ExpandButton, HeaderContainer, IndicatorLabelContainer, Input, @@ -49,12 +49,15 @@ export const Toggle = ({ collapsible = true, errors, children: compositeSectionChildren, - initialExpanded = true, + initialExpanded, } = compositeSection || {}; const [selected, setSelected] = useState(checked); const [expanded, setExpanded] = useState(initialExpanded); - - const [showErrors, setShowErrors] = useState(false); + const showErrors = useMemo(() => { + const showErrorIfString = Array.isArray(errors) && errors?.length > 0; + const showErrorIfElement = !Array.isArray(errors) && !!errors; + return showErrorIfString || showErrorIfElement; + }, [errors]); const [uniqueId] = useState(SimpleIdGenerator.generate()); const generatedId = id ? `${id}` : `tg-${uniqueId}`; @@ -69,23 +72,10 @@ export const Toggle = ({ useEffect(() => { if (selected) { - setExpanded(initialExpanded ? initialExpanded : true); + setExpanded(initialExpanded ?? true); } }, [selected]); - useEffect(() => { - if (errors) { - const showErrorIfString = - !expanded && Array.isArray(errors) && errors?.length > 0; - const showErrorIfElement = !expanded && !Array.isArray(errors); - if (!selected) { - setShowErrors(!selected); - } else { - setShowErrors(showErrorIfString || showErrorIfElement); - } - } - }, [expanded, errors, selected]); - // ============================================================================= // EVENT HANDLERS // ============================================================================= @@ -182,29 +172,28 @@ export const Toggle = ({ const renderCompositeChildren = () => { return ( - - {compositeSectionChildren} - + (!collapsible || expanded) && ( + + {compositeSectionChildren} + + ) ); }; const renderExpandButton = () => { - const expandedWithoutErrors = !expanded && !showErrors; + const collapsedWithoutErrors = !expanded && !showErrors; return ( - - {expanded ? "Show less" : "Show more"} - {expanded ? : } - + collapsible && ( + + {expanded ? "Show less" : "Show more"} + {expanded ? : } + + ) ); }; @@ -271,7 +260,7 @@ export const Toggle = ({ { return ( + collapsible && !expanded && showErrors && ( Date: Thu, 13 Jun 2024 12:35:33 +0800 Subject: [PATCH 0183/1949] [MOL-15775][RL] Rename variables, refactor styles, apply accessibility tweaks --- src/toggle/toggle.styles.tsx | 34 +++++++++++++++++--------------- src/toggle/toggle.tsx | 38 +++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index e7335a983..26bf924ca 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -2,9 +2,10 @@ import styled, { css } from "styled-components"; import { Alert } from "../alert"; import { Color } from "../color"; import { MediaQuery } from "../media"; +import { applyHtmlContentStyle } from "../shared/html-content/html-content"; import { Text, TextStyleHelper } from "../text"; +import { TextList } from "../text-list"; import { ToggleStyleType } from "./types"; -import { applyHtmlContentStyle } from "../shared/html-content/html-content"; // ============================================================================= // STYLE INTERFACES, transient props are denoted with $ @@ -279,7 +280,7 @@ export const IndicatorLabelContainer = styled.div` +export const RemoveButton = styled.button` color: ${(props) => props.$disabled ? Color.Neutral[3] : Color.Validation.Red.Icon}; white-space: nowrap; @@ -293,23 +294,24 @@ export const RemoveButton = styled.button` `; export const ExpandButton = styled.button` - svg { - width: 1.125rem; - height: 1.125rem; - margin-left: 0.5rem; - } color: ${(props) => (props.disabled ? Color.Neutral[3] : Color.Primary)}; ${TextStyleHelper.getTextStyle("H4", "semibold")} width: 100%; - justify-content: flex-end; + display: flex; align-items: center; + justify-content: flex-end; padding-bottom: 0.6875rem; border: none; background: none; cursor: ${(props) => (props.disabled ? "not-allowed" : "pointer")}; - float: right; padding-top: ${(props) => props.$paddingTopRequired ? "0.6875rem" : "0rem"}; + + svg { + width: 1.125rem; + height: 1.125rem; + margin-left: 0.5rem; + } `; export const ErrorContainer = styled.div` @@ -327,7 +329,7 @@ export const AlertContainer = styled(Alert)` user-select: none; `; -export const ChildrenContainer = styled.div` +export const CompositeSectionContainer = styled.div` padding: 0 1rem; `; @@ -353,14 +355,14 @@ export const Children = styled.div` }} `; -export const ErrorText = styled(Text.H5)` +export const ErrorText = styled(Text.BodySmall)` color: ${(props) => props.$disabled ? Color.Neutral[3] : Color.Validation.Red.Text}; `; -export const ErrorListItem = styled.li` - color: ${(props) => - props.$disabled - ? Color.Neutral[3] - : Color.Validation.Red.Text} !important; +export const ErrorList = styled(TextList.Ul)` + li { + color: ${(props) => + props.$disabled ? Color.Neutral[3] : Color.Validation.Red.Text}; + } `; diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index fc4aef6be..a331cd287 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -2,15 +2,14 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; import { useEffect, useMemo, useRef, useState } from "react"; import { ToggleIcon, ToggleIconType } from "../shared/toggle-icon/toggle-icon"; -import { TextList } from "../text-list"; import { SimpleIdGenerator } from "../util"; import { AlertContainer, Children, - ChildrenContainer, + CompositeSectionContainer, Container, ErrorContainer, - ErrorListItem, + ErrorList, ErrorText, ExpandButton, HeaderContainer, @@ -53,10 +52,10 @@ export const Toggle = ({ } = compositeSection || {}; const [selected, setSelected] = useState(checked); const [expanded, setExpanded] = useState(initialExpanded); - const showErrors = useMemo(() => { - const showErrorIfString = Array.isArray(errors) && errors?.length > 0; - const showErrorIfElement = !Array.isArray(errors) && !!errors; - return showErrorIfString || showErrorIfElement; + const hasCompositeSectionError = useMemo(() => { + const hasErrorList = Array.isArray(errors) && errors?.length > 0; + const hasErrorElement = !Array.isArray(errors) && !!errors; + return hasErrorList || hasErrorElement; }, [errors]); const [uniqueId] = useState(SimpleIdGenerator.generate()); const generatedId = id ? `${id}` : `tg-${uniqueId}`; @@ -181,7 +180,7 @@ export const Toggle = ({ }; const renderExpandButton = () => { - const collapsedWithoutErrors = !expanded && !showErrors; + const collapsedWithoutErrors = !expanded && !hasCompositeSectionError; return ( collapsible && ( {expanded ? "Show less" : "Show more"} - {expanded ? : } + {expanded ? ( + + ) : ( + + )} ) ); @@ -254,13 +257,12 @@ export const Toggle = ({ Error - + {errors?.map((item, index) => { return ( - {item} - + ); })} - + ); }; @@ -280,7 +282,7 @@ export const Toggle = ({ return ( collapsible && !expanded && - showErrors && ( + hasCompositeSectionError && ( { return ( compositeSectionChildren && ( - + {renderCompositeChildren()} {renderError()} {renderExpandButton()} - + ) ); }; From 122f59ef913999f648b4c1cbb2442da751817960 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 13 Jun 2024 12:55:07 +0800 Subject: [PATCH 0184/1949] [MOL-15775][RL] Update documentation --- src/toggle/types.ts | 14 ++- stories/toggle/props-table.tsx | 81 ++++++-------- stories/toggle/toggle-5-composite-section.mdx | 6 +- .../toggle-5-composite-section.stories.tsx | 103 ++++++++++-------- stories/toggle/toggle-6-examples.mdx | 7 ++ stories/toggle/toggle-6-examples.stories.tsx | 32 +++++- stories/toggle/toggle.mdx | 11 +- stories/toggle/toggle.stories.tsx | 30 ----- 8 files changed, 140 insertions(+), 144 deletions(-) diff --git a/src/toggle/types.ts b/src/toggle/types.ts index eb2efbfe6..47b32722a 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -21,6 +21,7 @@ export interface ToggleProps styleType?: ToggleStyleType | undefined; /** The Toggle label */ children: React.ReactNode; + /** The number of lines visible. Additional lines will be truncated */ childrenMaxLines?: | { mobile?: number | undefined; @@ -40,18 +41,19 @@ export interface ToggleProps onChange?: | ((event: React.ChangeEvent) => void) | undefined; + /** The Toggle subsection */ compositeSection?: ToggleCompositeSectionProps | undefined; + /** Specifies if the remove button should be displayed */ removable?: boolean | undefined; onRemove?: (() => void) | undefined; } export interface ToggleCompositeSectionProps { - /** specifies to show or hide view more or less button when remove button is not present */ - collapsible?: boolean | undefined; - // showmore or less button - /** specifies the list of errors that has to be shown inside the composite-option container when the show less button is clicked*/ - errors?: string[] | JSX.Element | undefined; - /** The children inside the composite option */ children: React.ReactNode; + /** Specifies if the subsection is collapsible */ + collapsible?: boolean | undefined; + /** The initial expanded state. Only applicable if collapsible */ initialExpanded?: boolean | undefined; + /** Specifies errors to be displayed when the subsection is collapsed */ + errors?: string[] | JSX.Element | undefined; } diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index a6fc765fa..167a91b5b 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -40,14 +40,13 @@ const DATA: ApiTableSectionProps[] = [ { name: "children", mandatory: true, - description: "The main selector label ", + description: "The main selector label", propTypes: ["string"], }, { name: "childrenMaxLines", - description: ( - <>Maximum number of lines to be shown in the main label - ), + description: + "The number of lines visible in the main label. Additional lines will be truncated", propTypes: ["{desktop: number, mobile: number}"], }, { @@ -90,7 +89,7 @@ const DATA: ApiTableSectionProps[] = [ displayed below the main label. ), - propTypes: ["string", "() => JSX.Element", "JSX.Element"], + propTypes: ["string", "JSX.Element", "() => JSX.Element"], }, { name: "onChange", @@ -106,77 +105,61 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "removable", - description: ( - <> - Specifies if the element has Remove button on top. if - removable is true then collapsible will not - have anyeffect. it will always be true(hidden). set{" "} - show to true and{" "} - collapsible to false if the - children have to be shown without show more or less - button with removable button. - - ), + description: "Specifies if the remove button is displayed", propTypes: ["boolean"], defaultValue: `false`, }, { name: "onRemove", - description: ( - <> - Called when the Remove button is clicked - - ), + description: "Called when the remove button is clicked", propTypes: ["() => void"], }, { name: "compositeSection", - description: <>The section below the Toggle., - propTypes: ["compositeSectionProps"], + description: ( + <> + The subsection of the Toggle, displayed + below the main label and sublabel + + ), + propTypes: ["CompositeSectionProps"], }, ], }, { - name: "Props", + name: "CompositeSectionProps", attributes: [ { - name: "compositeSectionProps", - description: ( - <> - The description label of the{" "} - composite Option Section displayed below - the main label. - - ), + name: "children", + description: "The contents of the subsection", propTypes: ["string", "JSX.Element"], + mandatory: true, }, { - name: "initialExpanded", - description: ( - <> - specifies if the CompositeOption children have to be - shown - - ), + name: "collapsible", + description: "Specifies if the subsection is collapsible", propTypes: ["boolean"], defaultValue: `true`, }, { - name: "collapsible", + name: "initialExpanded", + description: + "Specifies the initial expanded state. Only applicable if the subsection is collapsible", + propTypes: ["boolean"], + }, + { + name: "errors", description: ( <> - specifies if show More Or{" "} - show Less Button is shown/hidden. + Specifies errors to be displayed when the subsection is + collapsed +
    +
    + If a list of strings is provided, an error alert is + automatically constructed ), - propTypes: ["boolean"], - }, - - { - name: "errorList", - description: - "Specifies if the internal errors should be displayed inside the container error list has to be displayed inside the container.", propTypes: ["string[]", "JSX.Element"], }, ], diff --git a/stories/toggle/toggle-5-composite-section.mdx b/stories/toggle/toggle-5-composite-section.mdx index 534415e24..420aca922 100644 --- a/stories/toggle/toggle-5-composite-section.mdx +++ b/stories/toggle/toggle-5-composite-section.mdx @@ -9,7 +9,7 @@ import { PropsTable } from "./props-table"; Composite section -The toggle can be extended to display inputs under an additional section. +The toggle can be extended to display content or inputs under an additional section. @@ -24,5 +24,5 @@ This additional section can be collapsed and expanded. When the section is collapsed, an error alert can be shown. - - + + diff --git a/stories/toggle/toggle-5-composite-section.stories.tsx b/stories/toggle/toggle-5-composite-section.stories.tsx index 10623c9ca..1550d371c 100644 --- a/stories/toggle/toggle-5-composite-section.stories.tsx +++ b/stories/toggle/toggle-5-composite-section.stories.tsx @@ -1,6 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Toggle } from "../../src"; import { Form } from "../../src/form"; +import { StoryContainer } from "../storybook-common"; import { Variants } from "./doc-elements"; type Component = typeof Toggle; @@ -148,65 +149,73 @@ export const RadioType: StoryObj = { export const Collapsible: StoryObj = { render: () => { return ( - , - collapsible: true, - }} - > - Sample text - + + , + collapsible: true, + }} + > + Sample text + + ); }, }; -export const CollapsibleWithError: StoryObj = { +export const CollapsedWithError: StoryObj = { render: () => { return ( - - ), - collapsible: true, - errors: ["Something went wrong"], - }} - > - Sample text - + + + ), + collapsible: true, + initialExpanded: false, + errors: ["Something went wrong"], + }} + > + Sample text + + ); }, }; -export const CollapsibleWithErrorAndDisabled: StoryObj = { +export const CollapsedWithErrorAndDisabled: StoryObj = { render: () => { return ( - - ), - collapsible: true, - errors: ["Something went wrong"], - }} - > - Sample text - + + + ), + collapsible: true, + initialExpanded: false, + errors: ["Something went wrong"], + }} + > + Sample text + + ); }, }; diff --git a/stories/toggle/toggle-6-examples.mdx b/stories/toggle/toggle-6-examples.mdx index e4f5c5611..92bad0044 100644 --- a/stories/toggle/toggle-6-examples.mdx +++ b/stories/toggle/toggle-6-examples.mdx @@ -23,3 +23,10 @@ A common use case is for users to add their own options to a list. The user can also remove this custom option afterwards. This variant cannot be collapsed. + +Interactive sublabel + +By default, clicking on the sublabel will activate the `Toggle`. If you require interactive content such as links, +you may opt out of this behaviour as such: + + diff --git a/stories/toggle/toggle-6-examples.stories.tsx b/stories/toggle/toggle-6-examples.stories.tsx index 86657fa16..f7ce9703b 100644 --- a/stories/toggle/toggle-6-examples.stories.tsx +++ b/stories/toggle/toggle-6-examples.stories.tsx @@ -1,7 +1,8 @@ import type { Meta, StoryObj } from "@storybook/react"; +import { useState } from "react"; import { Toggle } from "../../src"; import { Form } from "../../src/form"; -import { useState } from "react"; +import { Text } from "../../src/text"; type Component = typeof Toggle; @@ -94,3 +95,32 @@ export const DynamicOption: StoryObj = { ); }, }; + +export const InteractiveSublabel: StoryObj = { + render: () => { + return ( + ( +

    + Clicking here toggles the button. +
    + Clicking here does not and{" "} + + this link + {" "} + is accessible +
    +
    + )} + > + Hello +
    + ); + }, +}; diff --git a/stories/toggle/toggle.mdx b/stories/toggle/toggle.mdx index 79f8a2cad..d02a78657 100644 --- a/stories/toggle/toggle.mdx +++ b/stories/toggle/toggle.mdx @@ -38,17 +38,12 @@ Click on the links to see the variants in depth. - [With indicator](/docs/data-input-toggle-with-indicator--docs) - [No border](/docs/data-input-toggle-no-border--docs) - [With sub label](/docs/data-input-toggle-with-sub-label--docs) -- [Collapsible](/docs/data-input-toggle-collapsible--docs) - [Removable](/docs/data-input-toggle-removable--docs) +- [Composite section](/docs/data-input-toggle-with-composite-section--docs) -
    - -Interactive sublabel +You can find [commonly used patterns here](/docs/data-input-toggle-common-patterns--docs). -By default, clicking on the sublabel will activate the `Toggle`. If you require interactive content such as links, -you may opt out of this behaviour as such: - - +
    Component API diff --git a/stories/toggle/toggle.stories.tsx b/stories/toggle/toggle.stories.tsx index ce7569ec0..df3614192 100644 --- a/stories/toggle/toggle.stories.tsx +++ b/stories/toggle/toggle.stories.tsx @@ -1,5 +1,4 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { Text } from "src/text"; import { Toggle } from "src/toggle"; import { Headings, SimpleContainer, Wrapper } from "./doc-elements"; @@ -55,32 +54,3 @@ export const Behaviours: StoryObj = { ); }, }; - -export const InteractiveSublabel: StoryObj = { - render: () => { - return ( - ( -
    - Clicking here toggles the button. -
    - Clicking here does not and{" "} - - this link - {" "} - is accessible -
    -
    - )} - > - Hello -
    - ); - }, -}; From a4b6f82846e397ee37847f3d5ddd195c08644162 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 13 Jun 2024 21:57:38 +0800 Subject: [PATCH 0185/1949] [MISC][RL] Give precedence to mobile when hiding menu button --- src/navbar/navbar.tsx | 32 +++---- tests/navbar/navbar.spec.tsx | 177 ++++++++++++++++++++--------------- 2 files changed, 114 insertions(+), 95 deletions(-) diff --git a/src/navbar/navbar.tsx b/src/navbar/navbar.tsx index 1952be443..4209d5ba5 100644 --- a/src/navbar/navbar.tsx +++ b/src/navbar/navbar.tsx @@ -105,26 +105,18 @@ const Component = ( ); }; - const hasUncollapsibleActionButtons = () => { - if (actionButtons.mobile) { - const hasUncollapsibleItems = actionButtons.mobile.some( - (actionButton) => { - return actionButton.uncollapsible; - } + const hasCollapsibleActionButtons = () => { + const drawerActionButtons = + actionButtons.mobile || actionButtons.desktop; + if (drawerActionButtons) { + return ( + drawerActionButtons.length && + drawerActionButtons.some( + (actionButton) => !actionButton.uncollapsible + ) ); - - if (hasUncollapsibleItems) return true; } - if (actionButtons.desktop) { - const hasUncollapsibleItems = actionButtons.desktop.some( - (actionButton) => { - return actionButton.uncollapsible; - } - ); - - if (hasUncollapsibleItems) return true; - } return false; }; @@ -254,10 +246,10 @@ const Component = ( ); const renderMobileMenuButton = () => { + const drawerItems = items.mobile || items.desktop; if ( - (items.mobile && items.mobile.length > 0) || - (items.desktop && items.desktop.length > 0) || - (actionButtons && !hasUncollapsibleActionButtons()) + (drawerItems && drawerItems.length > 0) || + (actionButtons && hasCollapsibleActionButtons()) ) { return ( { @@ -7,8 +7,8 @@ describe("Navbar", () => { const rendered = render( ); @@ -22,7 +22,9 @@ describe("Navbar", () => { }); it("should render the mobile items even if mobile items are not specified", () => { - const rendered = render(); + const rendered = render( + + ); const { getByTestId } = rendered; @@ -36,7 +38,7 @@ describe("Navbar", () => { const rendered = render( @@ -47,7 +49,9 @@ describe("Navbar", () => { }); it("should render the primary brand", () => { - const rendered = render(); + const rendered = render( + + ); const { getByTestId } = rendered; expect(getByTestId("main__brand")).toBeInTheDocument(); @@ -57,7 +61,7 @@ describe("Navbar", () => { const rendered = render( { expect(getByTestId("main__brand-secondary")).toBeInTheDocument(); }); - it("should render the mobile menu button if there are items specified", () => { - const rendered = render(); - - const { getByTestId } = rendered; - expect(getByTestId("button__mobile-menu")).toBeInTheDocument(); - }); - - it("should not render the links and mobile menu button if there no items are specified", () => { - const rendered = render(); - - const { queryByTestId } = rendered; - expect(queryByTestId("link__1")).not.toBeInTheDocument(); - expect( - queryByTestId("button__mobile-menu") - ).not.toBeInTheDocument(); - }); - it("should not render the links and mobile menu button if hideNavElements is set to true", () => { const rendered = render( - + ); const { queryByTestId } = rendered; @@ -102,62 +89,102 @@ describe("Navbar", () => { ).not.toBeInTheDocument(); }); - it("should render the mobile menu items if no items are specified but there are action items specified", () => { - const rendered = render( - + describe("mobile menu button", () => { + it.each` + scenario | desktopItems | mobileItems | desktopButtons | mobileButtons + ${"there are no items"} | ${[]} | ${[]} | ${[]} | ${[]} + ${"desktop buttons are uncollapsed"} | ${[]} | ${undefined} | ${[MOCK_UNCOLLAPSIBLE_BUTTON()]} | ${undefined} + ${"mobile buttons are uncollapsed"} | ${[]} | ${undefined} | ${[MOCK_COLLAPSIBLE_BUTTON()]} | ${[MOCK_UNCOLLAPSIBLE_BUTTON()]} + `( + "should hide the mobile menu button given $scenario", + ({ + desktopItems, + mobileItems, + desktopButtons, + mobileButtons, + }) => { + render( + + ); + + expect( + screen.queryByTestId("button__mobile-menu") + ).not.toBeInTheDocument(); + } ); - const { getByTestId } = rendered; - expect(getByTestId("button__mobile-menu")).toBeInTheDocument(); - }); - - it("should not render the mobile menu items if no items are specified the action items are uncollapsible", () => { - const rendered = render( - + it.each` + scenario | desktopItems | mobileItems | desktopButtons | mobileButtons + ${"there are desktop items"} | ${MOCK_ITEMS()} | ${undefined} | ${[]} | ${undefined} + ${"there are mobile items"} | ${[]} | ${MOCK_ITEMS()} | ${[]} | ${undefined} + ${"desktop buttons are collapsed"} | ${[]} | ${undefined} | ${[MOCK_COLLAPSIBLE_BUTTON()]} | ${undefined} + ${"mobile buttons are collapsed"} | ${[]} | ${undefined} | ${[MOCK_UNCOLLAPSIBLE_BUTTON()]} | ${[MOCK_COLLAPSIBLE_BUTTON()]} + `( + "should show the mobile menu button given $scenario", + ({ + desktopItems, + mobileItems, + desktopButtons, + mobileButtons, + }) => { + render( + + ); + + expect( + screen.queryByTestId("button__mobile-menu") + ).toBeInTheDocument(); + } ); - - const { queryByTestId } = rendered; - expect( - queryByTestId("button__mobile-menu") - ).not.toBeInTheDocument(); }); }); }); + // ============================================================================= // MOCKS // ============================================================================= -const MOCK_ITEMS = [ - { - id: "first", - children: "First", - }, - { - id: "second", - children: "Second", - }, -]; +function MOCK_ITEMS() { + return [ + { + id: "first", + children: "First", + }, + { + id: "second", + children: "Second", + }, + ]; +} + +function MOCK_UNCOLLAPSIBLE_BUTTON() { + return { + type: "button", + args: { children: "Collapsible" }, + uncollapsible: true, + }; +} + +function MOCK_COLLAPSIBLE_BUTTON() { + return { + type: "button", + args: { children: "Uncollapsible" }, + }; +} From 1f0d3716b4f69755445f33af0e6575b1f6b5cfeb Mon Sep 17 00:00:00 2001 From: Raymond Tan Date: Tue, 4 Jun 2024 16:05:57 +0800 Subject: [PATCH 0186/1949] [BOOKINGSG-5642][RT] Add small variant to InputSelect and InputMultiSelect --- src/form/form-multi-select.tsx | 2 + src/form/form-select.tsx | 2 + src/input-multi-select/input-multi-select.tsx | 15 ++++- src/input-multi-select/types.ts | 2 + src/input-select/input-select.tsx | 16 ++++- src/input-select/types.ts | 2 + .../dropdown-list/dropdown-list.styles.tsx | 63 ++++++++++++++++--- src/shared/dropdown-list/dropdown-list.tsx | 38 ++++++++--- .../dropdown-list/dropdown-search.styles.tsx | 46 +++++++++----- src/shared/dropdown-list/dropdown-search.tsx | 12 ++-- src/shared/dropdown-list/types.ts | 7 +++ .../dropdown-wrapper.styles.tsx | 54 ++++++++++++---- .../dropdown-wrapper/dropdown-wrapper.tsx | 3 +- src/shared/dropdown-wrapper/types.ts | 3 + src/shared/input-wrapper/input-wrapper.tsx | 13 +++- .../form-multi-select/form-multi-select.mdx | 4 ++ .../form-multi-select.stories.tsx | 30 +++++++++ .../form/form-multi-select/props-table.tsx | 6 ++ stories/form/form-select/form-select.mdx | 4 ++ .../form/form-select/form-select.stories.tsx | 32 ++++++++++ stories/form/form-select/props-table.tsx | 6 ++ 21 files changed, 303 insertions(+), 57 deletions(-) diff --git a/src/form/form-multi-select.tsx b/src/form/form-multi-select.tsx index 8ff7f9489..48fae6a48 100644 --- a/src/form/form-multi-select.tsx +++ b/src/form/form-multi-select.tsx @@ -13,6 +13,7 @@ export const FormMultiSelect = ({ mobileCols, tabletCols, desktopCols, + variant, ...otherProps }: FormMultiSelectProps): JSX.Element => { return ( @@ -32,6 +33,7 @@ export const FormMultiSelect = ({ data-testid={testId || id} error={!!errorMessage} enableSearch={enableSearch} + variant={variant} {...otherProps} /> diff --git a/src/form/form-select.tsx b/src/form/form-select.tsx index 08f13d624..f1c968d50 100644 --- a/src/form/form-select.tsx +++ b/src/form/form-select.tsx @@ -13,6 +13,7 @@ export const FormSelect = ({ mobileCols, tabletCols, desktopCols, + variant, ...otherProps }: FormInputSelectProps): JSX.Element => { return ( @@ -32,6 +33,7 @@ export const FormSelect = ({ data-testid={testId || id} error={!!errorMessage} enableSearch={enableSearch} + variant={variant} {...otherProps} /> diff --git a/src/input-multi-select/input-multi-select.tsx b/src/input-multi-select/input-multi-select.tsx index 0cf99ed83..bb4575610 100644 --- a/src/input-multi-select/input-multi-select.tsx +++ b/src/input-multi-select/input-multi-select.tsx @@ -34,6 +34,7 @@ export const InputMultiSelect = ({ onBlur, optionsLoadState = "success", optionTruncationType = "end", + variant = "default", ...otherProps }: InputMultiSelectProps): JSX.Element => { // ============================================================================= @@ -159,12 +160,17 @@ export const InputMultiSelect = ({ const renderLabel = () => { if (!selected || selected.length === 0) { return ( - + {placeholder} ); } else { - return {getDisplayValue()}; + return ( + {getDisplayValue()} + ); } }; @@ -172,7 +178,7 @@ export const InputMultiSelect = ({ <> {renderLabel()} - + ); @@ -199,6 +205,7 @@ export const InputMultiSelect = ({ onRetry={onRetry} itemsLoadState={optionsLoadState} itemTruncationType={optionTruncationType} + variant={variant} /> ); } @@ -214,6 +221,7 @@ export const InputMultiSelect = ({ testId={testId} className={className} onBlur={handleWrapperBlur} + variant={variant} > ({ onBlur?.(); } }} + $variant={variant} {...otherProps} > {renderSelectorContent()} diff --git a/src/input-multi-select/types.ts b/src/input-multi-select/types.ts index 7e2b967ff..596d0689a 100644 --- a/src/input-multi-select/types.ts +++ b/src/input-multi-select/types.ts @@ -6,6 +6,7 @@ import { DropdownDisplayProps, DropdownSearchProps, DropdownStyleProps, + DropdownVariantType, } from "../shared/dropdown-list/types"; export interface InputMultiSelectProps @@ -18,6 +19,7 @@ export interface InputMultiSelectProps selectedOptions?: T[] | undefined; onSelectOptions?: ((options: T[]) => void) | undefined; onBlur?: (() => void) | undefined; + variant?: DropdownVariantType | undefined; } /** To be exposed for Form component inheritance */ diff --git a/src/input-select/input-select.tsx b/src/input-select/input-select.tsx index ae1b1d3c7..3dda7ae85 100644 --- a/src/input-select/input-select.tsx +++ b/src/input-select/input-select.tsx @@ -41,6 +41,7 @@ export const InputSelect = ({ hideNoResultsDisplay, renderCustomCallToAction, onBlur, + variant = "default", ...otherProps }: InputSelectProps): JSX.Element => { // ============================================================================= @@ -165,7 +166,10 @@ export const InputSelect = ({ const renderLabel = () => { if (!selected) { return ( - + {placeholder} ); @@ -173,7 +177,10 @@ export const InputSelect = ({ return renderCustomSelectedOption(selected); } else { return ( - + {truncateValue(getDisplayValue())} ); @@ -187,7 +194,7 @@ export const InputSelect = ({ {!otherProps.readOnly && ( - + )} @@ -215,6 +222,7 @@ export const InputSelect = ({ renderListItem={renderListItem} hideNoResultsDisplay={hideNoResultsDisplay} renderCustomCallToAction={renderCustomCallToAction} + variant={variant} /> ); } @@ -231,6 +239,7 @@ export const InputSelect = ({ readOnly={otherProps.readOnly} testId={testId} onBlur={handleWrapperBlur} + variant={variant} > ({ onBlur?.(); } }} + $variant={variant} {...otherProps} > {renderSelectorContent()} diff --git a/src/input-select/types.ts b/src/input-select/types.ts index bddea4173..c1f727510 100644 --- a/src/input-select/types.ts +++ b/src/input-select/types.ts @@ -2,6 +2,7 @@ import { DropdownDisplayProps, DropdownSearchProps, DropdownStyleProps, + DropdownVariantType, ItemsLoadStateType, TruncateType, } from "../shared/dropdown-list/types"; @@ -55,6 +56,7 @@ export interface InputSelectProps /** Function to render selected custom component */ renderCustomSelectedOption?: ((option: T) => JSX.Element) | undefined; onBlur?: (() => void) | undefined; + variant?: DropdownVariantType | undefined; } /** To be exposed for Form component inheritance */ diff --git a/src/shared/dropdown-list/dropdown-list.styles.tsx b/src/shared/dropdown-list/dropdown-list.styles.tsx index 90742b0ea..e72e6551d 100644 --- a/src/shared/dropdown-list/dropdown-list.styles.tsx +++ b/src/shared/dropdown-list/dropdown-list.styles.tsx @@ -4,8 +4,13 @@ import styled, { css } from "styled-components"; import { Checkbox } from "../../checkbox"; import { Color } from "../../color"; import { MediaQuery } from "../../media"; -import { Text, TextStyleHelper } from "../../text"; -import { LabelDisplayType, TruncateType } from "./types"; +import { TextStyleHelper } from "../../text"; +import { + DropdownVariantType, + IconProps, + LabelDisplayType, + TruncateType, +} from "./types"; // ============================================================================= // STYLE INTERFACE @@ -21,12 +26,18 @@ interface ListItemProps { interface ListItemSelectorProps { $multiSelect?: boolean; $hasNextLineLabel?: boolean; + $variant?: DropdownVariantType; } interface LabelProps { $truncateType?: TruncateType; $maxLines?: number; $labelDisplayType?: LabelDisplayType; + $variant?: DropdownVariantType; +} + +interface ResultStateProps { + $variant?: DropdownVariantType; } // ============================================================================= @@ -87,6 +98,19 @@ export const ListItem = styled.li` }} `; +const getMinHeight = (props: ListItemSelectorProps) => { + let minHeight = 3.5; + if (props.$variant === "small") { + minHeight = 3.25; + } + + if (props.$hasNextLineLabel) { + minHeight = 4.255; + } + + return minHeight; +}; + export const ListItemSelector = styled.button` display: flex; ${(props) => { @@ -97,7 +121,7 @@ export const ListItemSelector = styled.button` } else { return css` padding: 0 1rem; - min-height: ${props.$hasNextLineLabel ? "4.255rem" : "3.5rem"}; + min-height: ${getMinHeight(props)}rem; align-items: center; `; } @@ -134,7 +158,11 @@ const lineClampCss = css` `; export const PrimaryText = styled.div` - ${TextStyleHelper.getTextStyle("Body", "regular")} + ${(props) => + TextStyleHelper.getTextStyle( + props.$variant === "small" ? "BodySmall" : "Body", + "regular" + )} color: ${Color.Neutral[1]}; width: 100%; @@ -223,8 +251,12 @@ export const SelectAllContainer = styled.div` padding: 1rem 0 0.5rem 0; `; -export const DropdownCommonButton = styled.button` - ${TextStyleHelper.getTextStyle("Body", "semibold")} +export const DropdownCommonButton = styled.button` + ${(props) => + TextStyleHelper.getTextStyle( + props.$variant === "small" ? "BodySmall" : "Body", + "semibold" + )} background-color: transparent; background-repeat: no-repeat; border: none; @@ -245,11 +277,22 @@ export const ResultStateContainer = styled.div` align-items: center; `; -export const ResultStateText = styled(Text.Body)``; +export const ResultStateText = styled.div` + ${(props) => + TextStyleHelper.getTextStyle( + props.$variant === "small" ? "BodySmall" : "Body", + "regular" + )} +`; -export const LabelIcon = styled(ExclamationCircleFillIcon)` +export const LabelIcon = styled(ExclamationCircleFillIcon)` + ${(props) => { + const size = props.$variant === "small" ? 1 : 1.5; + return css` + height: ${size}rem; + width: ${size}rem; + `; + }} margin-right: 0.625rem; - height: 1.5rem; - width: 1.5rem; color: ${Color.Validation.Red.Icon}; `; diff --git a/src/shared/dropdown-list/dropdown-list.tsx b/src/shared/dropdown-list/dropdown-list.tsx index 458de4df9..497666421 100644 --- a/src/shared/dropdown-list/dropdown-list.tsx +++ b/src/shared/dropdown-list/dropdown-list.tsx @@ -53,6 +53,7 @@ export const DropdownList = ({ onBlur, hideNoResultsDisplay, renderCustomCallToAction, + variant = "default", ...otherProps }: DropdownListProps): JSX.Element => { // ============================================================================= @@ -348,6 +349,7 @@ export const DropdownList = ({ {itemTruncationType === "middle" && shouldTruncateTitle @@ -391,6 +393,7 @@ export const DropdownList = ({ tabIndex={visible ? 0 : -1} $multiSelect={multiSelect} onBlur={handleBlur} + $variant={variant} > {multiSelect && ( ({ aria-label="search-input" tabIndex={visible ? 0 : -1} onClear={handleOnClear} + variant={variant} /> ); } @@ -438,7 +442,11 @@ export const DropdownList = ({ ) { return ( - + {selectedItems.length === 0 ? "Select all" : "Clear all"} @@ -460,8 +468,13 @@ export const DropdownList = ({ key="noResults" data-testid="list-no-results" > - - No results found. + + + No results found. + ); } @@ -469,10 +482,14 @@ export const DropdownList = ({ const renderLoading = () => { if (onRetry && itemsLoadState === "loading") { + const spinnerSize = variant === "small" ? 16 : 24; + return ( - - Loading... + + + Loading... + ); } @@ -482,11 +499,18 @@ export const DropdownList = ({ if (onRetry && itemsLoadState === "fail") { return ( - - Failed to load. + + + Failed to load. + +   Try again. diff --git a/src/shared/dropdown-list/dropdown-search.styles.tsx b/src/shared/dropdown-list/dropdown-search.styles.tsx index 81b951b66..a55e6f54c 100644 --- a/src/shared/dropdown-list/dropdown-search.styles.tsx +++ b/src/shared/dropdown-list/dropdown-search.styles.tsx @@ -1,9 +1,20 @@ import { CrossIcon } from "@lifesg/react-icons/cross"; import { MagnifierIcon } from "@lifesg/react-icons/magnifier"; -import styled from "styled-components"; +import styled, { css } from "styled-components"; import { Color } from "../../color"; import { ClickableIcon } from "../clickable-icon"; -import { BasicInput } from "../input-wrapper/input-wrapper"; +import { BasicInput, InputStyleProps } from "../input-wrapper/input-wrapper"; +import { DropdownVariantType, IconProps } from "./types"; + +const getIconSize = (variant?: DropdownVariantType) => { + return variant === "small" ? 1 : 1.375; +}; +const getCssHeightAndWidth = (variant?: DropdownVariantType) => { + return css` + height: ${getIconSize(variant)}rem; + width: ${getIconSize(variant)}rem; + `; +}; export const Container = styled.li` background: ${Color.Neutral[7]}; @@ -12,29 +23,36 @@ export const Container = styled.li` align-items: center; `; -export const SearchInput = styled(BasicInput)` - height: 3rem; +export const SearchInput = styled(BasicInput)` + height: ${(props) => (props.$variant === "small" ? 2.5 : 3)}rem; flex: 1; padding: 0 0.5rem 0 0; width: 100%; `; -export const SearchIcon = styled(MagnifierIcon)` - height: 1.375rem; - width: 1.375rem; +export const SearchIcon = styled(MagnifierIcon)` + ${(props) => { + return getCssHeightAndWidth(props.$variant); + }} margin: 0 0.5rem; color: ${Color.Neutral[3]}; `; -export const CancelButton = styled(ClickableIcon)` +export const CancelButton = styled(ClickableIcon)` + ${(props) => { + return getCssHeightAndWidth(props.$variant); + }} padding: 0; margin: 0 0.5rem; color: ${Color.Neutral[3]}; cursor: pointer; -`; - -export const CancelIcon = styled(CrossIcon)` - height: 1.375rem; - width: 1.375rem; - color: ${Color.Neutral[3]}; + ${(props) => { + if (props.$variant === "small") + // override svg style in ClickableIcon + return css` + svg { + ${getCssHeightAndWidth(props.$variant)} + } + `; + }} `; diff --git a/src/shared/dropdown-list/dropdown-search.tsx b/src/shared/dropdown-list/dropdown-search.tsx index 9ff331d17..265bbe7ad 100644 --- a/src/shared/dropdown-list/dropdown-search.tsx +++ b/src/shared/dropdown-list/dropdown-search.tsx @@ -1,15 +1,17 @@ import React, { forwardRef } from "react"; import { CancelButton, - CancelIcon, Container, SearchIcon, SearchInput, } from "./dropdown-search.styles"; +import { DropdownVariantType } from "./types"; +import { CrossIcon } from "@lifesg/react-icons"; interface Props extends React.HTMLAttributes { value: string /** override to cast type */; onClear?: () => void | undefined; + variant?: DropdownVariantType | undefined; } const Component = ( @@ -17,17 +19,19 @@ const Component = ( ref: React.Ref ): JSX.Element => { const { onClear, ...otherProps } = props; + return ( - - + + {otherProps.value && ( - + )} diff --git a/src/shared/dropdown-list/types.ts b/src/shared/dropdown-list/types.ts index 3224d1f4e..1e030eecc 100644 --- a/src/shared/dropdown-list/types.ts +++ b/src/shared/dropdown-list/types.ts @@ -1,6 +1,7 @@ export type TruncateType = "middle" | "end"; export type ItemsLoadStateType = "loading" | "fail" | "success"; export type LabelDisplayType = "inline" | "next-line"; +export type DropdownVariantType = "small" | "default"; export interface ListItemRenderArgs { selected: boolean; @@ -74,6 +75,8 @@ export interface DropdownListProps itemMaxLines?: number | undefined; /** Specifying flex direction within item */ labelDisplayType?: LabelDisplayType | undefined; + /** Specifies the variant type. Small type will have shorter height. Values: "default" | "small" */ + variant?: DropdownVariantType | undefined; onDismiss?: ((setSelectorFocus?: boolean | undefined) => void) | undefined; onSelectAll?: (() => void) | undefined; @@ -84,3 +87,7 @@ export interface DropdownListProps export interface ListItemSelectorProps { onClick?: (() => void) | undefined; } + +export interface IconProps { + $variant?: DropdownVariantType | undefined; +} diff --git a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx index 9557800fb..000bbece8 100644 --- a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx +++ b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx @@ -2,9 +2,9 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import styled, { css, keyframes } from "styled-components"; import { Color } from "../../color"; import { DesignToken } from "../../design-token"; -import { Text, TextStyle } from "../../text"; +import { TextStyle, TextStyleHelper } from "../../text"; import { Transition } from "../../transition"; -import { TruncateType } from "../dropdown-list/types"; +import { DropdownVariantType, TruncateType } from "../dropdown-list/types"; // ============================================================================= // STYLE INTERFACE @@ -18,6 +18,11 @@ export interface DropdownWrapperStyleProps { export interface ValueLabelStyleProps { truncateType?: TruncateType; + $variant?: DropdownVariantType | undefined; +} + +export interface SelectorStyleProps { + $variant?: DropdownVariantType | undefined; } // ============================================================================= @@ -25,20 +30,30 @@ export interface ValueLabelStyleProps { // ============================================================================= const BORDER_RADIUS = "4px"; -export const Wrapper = styled.div` +const getHeight = (variant?: DropdownVariantType | undefined) => { + return variant === "small" ? 2.5 : 3; +}; + +export const Wrapper = styled.div` position: relative; - min-height: 3rem; - height: 3rem; // Need this to persist the height when expanding or collapsing list width: 100%; + ${(props) => { + const height = getHeight(props.$variant); + return css` + min-height: ${height}rem; + height: ${height}rem; // Need this to persist the height when expanding or collapsing list + `; + }} `; -export const baseSelectorCSS = css` +export const baseSelectorCSS = css` display: flex; position: relative; align-items: center; justify-content: space-between; padding: 0 1rem; - height: calc(3rem - 2px); // exclude top and bottom borders + // exclude top and bottom borders + height: calc(${(props) => getHeight(props.$variant)}rem - 2px); width: 100%; border-radius: ${BORDER_RADIUS}; border: none; @@ -54,12 +69,12 @@ export const baseSelectorCSS = css` } `; -export const Selector = styled.button` +export const Selector = styled.button` ${baseSelectorCSS} cursor: pointer; `; -export const SelectorDiv = styled.div` +export const SelectorDiv = styled.div` ${baseSelectorCSS} `; @@ -153,10 +168,18 @@ export const IconContainer = styled.div` margin-left: 1rem; `; -export const StyledChevronIcon = styled(ChevronDownIcon)` +export const StyledChevronIcon = styled(ChevronDownIcon)` color: ${Color.Neutral[3]}; - height: ${TextStyle.Body.fontSize}rem; - width: ${TextStyle.Body.fontSize}rem; + ${(props) => { + let size = TextStyle.Body.fontSize; + if (props.$variant === "small") { + size = TextStyle.BodySmall.fontSize; + } + return css` + height: ${size}rem; + width: ${size}rem; + `; + }} `; export const Divider = styled.div` @@ -171,7 +194,12 @@ export const LabelContainer = styled.div` word-break: break-all; `; -export const ValueLabel = styled(Text.Body)` +export const ValueLabel = styled.div` + ${(props) => + TextStyleHelper.getTextStyle( + props.$variant === "small" ? "BodySmall" : "Body", + "regular" + )} text-align: left; line-height: 1.375rem; ${(props) => { diff --git a/src/shared/dropdown-wrapper/dropdown-wrapper.tsx b/src/shared/dropdown-wrapper/dropdown-wrapper.tsx index eb602a0b0..81132bd7e 100644 --- a/src/shared/dropdown-wrapper/dropdown-wrapper.tsx +++ b/src/shared/dropdown-wrapper/dropdown-wrapper.tsx @@ -12,6 +12,7 @@ export const DropdownWrapper = ({ onBlur, readOnly, className, + variant, }: DropdownSelectorProps): JSX.Element => { // ============================================================================= // CONST, STATE, REFS @@ -43,7 +44,7 @@ export const DropdownWrapper = ({ // RENDER FUNCTIONS // ============================================================================= return ( - + ` * standalone native input with stripped-down styles, intended to be used in * combination with `InputWrapper` or other wrappers to build composite widgets */ -export const BasicInput = styled.input` - ${TextStyleHelper.getTextStyle("Body", "regular")} +export const BasicInput = styled.input` + ${(props) => + TextStyleHelper.getTextStyle( + props.$variant === "small" ? "BodySmall" : "Body", + "regular" + )} color: ${Color.Neutral[1]}; display: block; background: transparent; diff --git a/stories/form/form-multi-select/form-multi-select.mdx b/stories/form/form-multi-select/form-multi-select.mdx index a6b722b15..e1a7a8eb0 100644 --- a/stories/form/form-multi-select/form-multi-select.mdx +++ b/stories/form/form-multi-select/form-multi-select.mdx @@ -38,6 +38,10 @@ import { InputMultiSelect } from "@lifesg/react-design-system/input-multi-select +There is 2 variants, `default` and `small` that can be denoted using the `variant` prop. + + + Component API diff --git a/stories/form/form-multi-select/form-multi-select.stories.tsx b/stories/form/form-multi-select/form-multi-select.stories.tsx index 522df1f76..145afb0e4 100644 --- a/stories/form/form-multi-select/form-multi-select.stories.tsx +++ b/stories/form/form-multi-select/form-multi-select.stories.tsx @@ -141,3 +141,33 @@ export const StandaloneUsage: StoryObj = { ); }, }; + +export const StandaloneUsageVariant: StoryObj = { + render: () => { + return ( + + + + item.value} + listExtractor={(item) => item.label} + placeholder="Searchable multi select" + enableSearch + /> +
    + + item.value} + listExtractor={(item) => item.label} + placeholder="Searchable multi select" + enableSearch + /> +
    +
    + ); + }, +}; diff --git a/stories/form/form-multi-select/props-table.tsx b/stories/form/form-multi-select/props-table.tsx index c7700425b..1f99b9bc3 100644 --- a/stories/form/form-multi-select/props-table.tsx +++ b/stories/form/form-multi-select/props-table.tsx @@ -126,6 +126,12 @@ const DATA: ApiTableSectionProps[] = [ description: "Called when a search is being executed", propTypes: ["() => void"], }, + { + name: "variant", + description: "Style option: The size of the component.", + propTypes: [`"small"`, `"default"`], + defaultValue: `"default"`, + }, ], }, ...SHARED_FORM_PROPS_DATA, diff --git a/stories/form/form-select/form-select.mdx b/stories/form/form-select/form-select.mdx index f7ab6e11c..38a0fb08e 100644 --- a/stories/form/form-select/form-select.mdx +++ b/stories/form/form-select/form-select.mdx @@ -51,6 +51,10 @@ import { InputSelect } from "@lifesg/react-design-system/input-select"; +There is 2 variants, `default` and `small` that can be denoted using the `variant` prop. + + + Component API diff --git a/stories/form/form-select/form-select.stories.tsx b/stories/form/form-select/form-select.stories.tsx index 40a6e784e..aaefe144f 100644 --- a/stories/form/form-select/form-select.stories.tsx +++ b/stories/form/form-select/form-select.stories.tsx @@ -254,3 +254,35 @@ export const StandaloneUsage: StoryObj = { ); }, }; + +export const StandaloneUsageVariant: StoryObj = { + render: () => { + return ( + + + + item.value} + listExtractor={(item) => item.label} + displayValueExtractor={(item) => item.label} + placeholder="Searchable select" + enableSearch + /> +

    + + item.value} + listExtractor={(item) => item.label} + displayValueExtractor={(item) => item.label} + placeholder="Searchable select" + enableSearch + /> +
    +
    + ); + }, +}; diff --git a/stories/form/form-select/props-table.tsx b/stories/form/form-select/props-table.tsx index 80252227b..6fd7736ce 100644 --- a/stories/form/form-select/props-table.tsx +++ b/stories/form/form-select/props-table.tsx @@ -170,6 +170,12 @@ const DATA: ApiTableSectionProps[] = [ "(hideOptions: () => void, options: T[]) => JSX.Element", ], }, + { + name: "variant", + description: "Style option: The size of the component.", + propTypes: [`"small"`, `"default"`], + defaultValue: `"default"`, + }, ], }, { From 5f70aa2f65915aac12f1e4bbb1e670f5da05cd31 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 14 Jun 2024 14:03:32 +0800 Subject: [PATCH 0187/1949] [BOOKINGSG-5642][RL] Update documentation --- .../form-multi-select/form-multi-select.mdx | 8 ++-- .../form-multi-select.stories.tsx | 37 +++++++------------ .../form/form-multi-select/props-table.tsx | 2 +- stories/form/form-select/form-select.mdx | 8 ++-- .../form/form-select/form-select.stories.tsx | 26 ++++--------- stories/form/form-select/props-table.tsx | 2 +- 6 files changed, 30 insertions(+), 53 deletions(-) diff --git a/stories/form/form-multi-select/form-multi-select.mdx b/stories/form/form-multi-select/form-multi-select.mdx index e1a7a8eb0..4fca9f298 100644 --- a/stories/form/form-multi-select/form-multi-select.mdx +++ b/stories/form/form-multi-select/form-multi-select.mdx @@ -28,6 +28,10 @@ column props to span across the specified columns in grid layouts. +Small variant + + + Using the field as a standalone In the case that you require the multi select field as a standalone, you can do this. @@ -38,10 +42,6 @@ import { InputMultiSelect } from "@lifesg/react-design-system/input-multi-select -There is 2 variants, `default` and `small` that can be denoted using the `variant` prop. - - - Component API diff --git a/stories/form/form-multi-select/form-multi-select.stories.tsx b/stories/form/form-multi-select/form-multi-select.stories.tsx index 145afb0e4..ae3c4d8e4 100644 --- a/stories/form/form-multi-select/form-multi-select.stories.tsx +++ b/stories/form/form-multi-select/form-multi-select.stories.tsx @@ -108,32 +108,17 @@ export const RenderingInGridLayout: StoryObj = { }, }; -export const StandaloneUsage: StoryObj = { +export const SmallVariant: StoryObj = { render: () => { return ( - item.value} - listExtractor={(item) => item.label} - placeholder="Default multi select" - /> -
    - item.value} - listExtractor={(item) => item.label} - placeholder="Searchable multi select" - enableSearch - /> -
    - item.value} listExtractor={(item) => item.label} - placeholder="Searchable multi select" - selectedOptions={[{ value: "B", label: "Option B" }]} enableSearch />
    @@ -142,14 +127,19 @@ export const StandaloneUsage: StoryObj = { }, }; -export const StandaloneUsageVariant: StoryObj = { +export const StandaloneUsage: StoryObj = { render: () => { return ( - item.value} + listExtractor={(item) => item.label} + placeholder="Default multi select" + /> +
    + item.value} listExtractor={(item) => item.label} @@ -157,13 +147,12 @@ export const StandaloneUsageVariant: StoryObj = { enableSearch />
    - item.value} listExtractor={(item) => item.label} placeholder="Searchable multi select" + selectedOptions={[{ value: "B", label: "Option B" }]} enableSearch />
    diff --git a/stories/form/form-multi-select/props-table.tsx b/stories/form/form-multi-select/props-table.tsx index 1f99b9bc3..114f77acf 100644 --- a/stories/form/form-multi-select/props-table.tsx +++ b/stories/form/form-multi-select/props-table.tsx @@ -128,7 +128,7 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "variant", - description: "Style option: The size of the component.", + description: "The display variant of the component", propTypes: [`"small"`, `"default"`], defaultValue: `"default"`, }, diff --git a/stories/form/form-select/form-select.mdx b/stories/form/form-select/form-select.mdx index 38a0fb08e..9500b09a4 100644 --- a/stories/form/form-select/form-select.mdx +++ b/stories/form/form-select/form-select.mdx @@ -41,6 +41,10 @@ column props to span across the specified columns in grid layouts. +Small variant + + + Using the field as a standalone In the case that you require the select field as a standalone, you can do this. @@ -51,10 +55,6 @@ import { InputSelect } from "@lifesg/react-design-system/input-select"; -There is 2 variants, `default` and `small` that can be denoted using the `variant` prop. - - - Component API diff --git a/stories/form/form-select/form-select.stories.tsx b/stories/form/form-select/form-select.stories.tsx index aaefe144f..b98579417 100644 --- a/stories/form/form-select/form-select.stories.tsx +++ b/stories/form/form-select/form-select.stories.tsx @@ -228,25 +228,18 @@ export const RenderingInGridLayout: StoryObj = { }, }; -export const StandaloneUsage: StoryObj = { +export const SmallVariant: StoryObj = { render: () => { return ( - item.value} - listExtractor={(item) => item.label} - displayValueExtractor={(item) => item.label} - placeholder="Default select" - /> -
    - item.value} listExtractor={(item) => item.label} displayValueExtractor={(item) => item.label} - placeholder="Searchable select" enableSearch />
    @@ -255,25 +248,20 @@ export const StandaloneUsage: StoryObj = { }, }; -export const StandaloneUsageVariant: StoryObj = { +export const StandaloneUsage: StoryObj = { render: () => { return ( - item.value} listExtractor={(item) => item.label} displayValueExtractor={(item) => item.label} - placeholder="Searchable select" - enableSearch + placeholder="Default select" /> -

    - +
    item.value} listExtractor={(item) => item.label} diff --git a/stories/form/form-select/props-table.tsx b/stories/form/form-select/props-table.tsx index 6fd7736ce..73b579018 100644 --- a/stories/form/form-select/props-table.tsx +++ b/stories/form/form-select/props-table.tsx @@ -172,7 +172,7 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "variant", - description: "Style option: The size of the component.", + description: "The display variant of the component", propTypes: [`"small"`, `"default"`], defaultValue: `"default"`, }, From 7cb3c51424993d944bbbf5a755e5a857d90478d8 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 14 Jun 2024 14:09:29 +0800 Subject: [PATCH 0188/1949] [MISC][RL] Bump v2.6.0-canary.4 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index fe2ea9a02..875b2d871 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.3", + "version": "2.6.0-canary.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.3", + "version": "2.6.0-canary.4", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index a40862c50..72fd55a06 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.3", + "version": "2.6.0-canary.4", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From db5ad7118414531f89abdae9de152e5b37e09401 Mon Sep 17 00:00:00 2001 From: Ruth Shirin Date: Wed, 19 Jun 2024 14:35:01 +0800 Subject: [PATCH 0189/1949] [CCUBE-1400][SR] Amended the touch area of the cross button & ammended the button to prevent the button label from wrapping. --- src/toast/toast.styles.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index 85c11c95b..d5dc8f598 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -69,6 +69,7 @@ export const ContentWrapper = styled.div` gap: 2rem; flex: 1; justify-content: space-between; + margin-right: 4rem; ${MediaQuery.MaxWidth.mobileL} { display: flex; @@ -123,9 +124,10 @@ export const Description = styled.div` export const ActionButton = styled(Button.Small)` align-self: center; - overflow-wrap: anywhere; margin-left: auto; height: auto; + width: fit-content; + flex-shrink: 0; ${MediaQuery.MaxWidth.mobileL} { align-self: flex-start; @@ -136,6 +138,7 @@ export const ActionButton = styled(Button.Small)` export const DismissButton = styled(ClickableIcon)` padding: 0.75rem; margin: -0.75rem; + align-items: stretch; ${(props) => { return css` From 5eae4fea6d7a018e40b95715aafd18fd421f6e4e Mon Sep 17 00:00:00 2001 From: Wei Li Date: Wed, 12 Jun 2024 14:14:16 +0800 Subject: [PATCH 0190/1949] [CCUBE-1414][WL] install fabricjs --- package-lock.json | 717 +++++++++++++++++++++++++++++++++++++++++----- package.json | 6 +- 2 files changed, 647 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index 875b2d871..0e1e72856 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@floating-ui/dom": "^1.5.4", "@floating-ui/react": "^0.26.6", + "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", "react-zoom-pan-pinch": "^3.3.0" @@ -42,6 +43,7 @@ "@storybook/test": "^8.1.6", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", + "@types/fabric": "^5.3.7", "@types/jest": "^27.4.1", "@types/lodash": "^4.14.180", "@types/react": "^17.0.43", @@ -4939,6 +4941,59 @@ "styled-components": "^5.3.5" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@mdx-js/react": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", @@ -11315,6 +11370,12 @@ "@types/send": "*" } }, + "node_modules/@types/fabric": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@types/fabric/-/fabric-5.3.7.tgz", + "integrity": "sha512-Fd2oN4zg/E6X+85HbmWSpswzcu3rvDfmwtvz1SH0j2av9OFHZDRrkLQ3K16nl6w+mSflrcTfmB719I7wXkfIsw==", + "dev": true + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -12251,7 +12312,7 @@ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true + "devOptional": true }, "node_modules/abbrev": { "version": "2.0.0", @@ -12292,7 +12353,7 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, + "devOptional": true, "bin": { "acorn": "bin/acorn" }, @@ -12304,7 +12365,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, + "devOptional": true, "dependencies": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" @@ -12323,7 +12384,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } @@ -12341,7 +12402,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "4" }, @@ -12553,7 +12614,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -12611,6 +12672,26 @@ "dev": true, "peer": true }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -12862,7 +12943,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "devOptional": true }, "node_modules/attr-accept": { "version": "2.2.2", @@ -13296,7 +13377,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "devOptional": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -13447,7 +13528,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13475,7 +13556,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true + "devOptional": true }, "node_modules/browserify-zlib": { "version": "0.1.4", @@ -13702,6 +13783,21 @@ } ] }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/case-sensitive-paths-webpack-plugin": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", @@ -13854,7 +13950,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" } @@ -14171,6 +14267,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -14187,7 +14292,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, + "devOptional": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -14281,7 +14386,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "devOptional": true }, "node_modules/concat-with-sourcemaps": { "version": "1.1.0", @@ -14409,6 +14514,12 @@ "node": "^14.18.0 || >=16.10.0" } }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -15669,7 +15780,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, + "devOptional": true, "dependencies": { "cssom": "~0.3.6" }, @@ -15681,7 +15792,7 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true + "devOptional": true }, "node_modules/csstype": { "version": "3.1.3", @@ -15771,7 +15882,7 @@ "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, + "devOptional": true, "dependencies": { "ms": "2.1.2" }, @@ -15798,7 +15909,7 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true + "devOptional": true }, "node_modules/decode-named-character-reference": { "version": "1.0.2", @@ -15823,6 +15934,18 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -15969,11 +16092,17 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, "node_modules/denodeify": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", @@ -16018,6 +16147,15 @@ "node": ">=8" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -16793,7 +16931,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, + "devOptional": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -17246,7 +17384,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, + "devOptional": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -17283,7 +17421,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=4.0" } @@ -17322,7 +17460,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -17575,6 +17713,266 @@ "node": ">=0.10.0" } }, + "node_modules/fabric": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/fabric/-/fabric-5.3.0.tgz", + "integrity": "sha512-AVayKuzWoXM5cTn7iD3yNWBlfEa8r1tHaOe2g8NsZrmWKAHjryTxT/j6f9ncRfOWOF0I1Ci1AId3y78cC+GExQ==", + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "canvas": "^2.8.0", + "jsdom": "^19.0.0" + } + }, + "node_modules/fabric/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/fabric/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "optional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fabric/node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "optional": true + }, + "node_modules/fabric/node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "optional": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fabric/node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "optional": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fabric/node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "optional": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fabric/node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "optional": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fabric/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "optional": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fabric/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fabric/node_modules/jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "optional": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/fabric/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "optional": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fabric/node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "optional": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fabric/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/fabric/node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "optional": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fabric/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/fabric/node_modules/whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "optional": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fabric/node_modules/ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "optional": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/fabric/node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "optional": true, + "engines": { + "node": ">=12" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -18086,6 +18484,20 @@ "node": ">=8" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "optional": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", @@ -18137,7 +18549,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, + "devOptional": true, "dependencies": { "minipass": "^3.0.0" }, @@ -18149,7 +18561,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, + "devOptional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -18161,7 +18573,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "devOptional": true }, "node_modules/fs-monkey": { "version": "1.0.6", @@ -18173,7 +18585,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "devOptional": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -18225,6 +18637,56 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/generic-names": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", @@ -18620,6 +19082,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -18935,7 +19403,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, + "devOptional": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -19235,7 +19703,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, + "devOptional": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -19245,7 +19713,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "devOptional": true }, "node_modules/ini": { "version": "1.3.8", @@ -19752,7 +20220,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "devOptional": true }, "node_modules/is-reference": { "version": "1.2.1", @@ -24151,7 +24619,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, + "devOptional": true, "dependencies": { "semver": "^6.0.0" }, @@ -30332,7 +30800,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.6" } @@ -30341,7 +30809,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, + "devOptional": true, "dependencies": { "mime-db": "1.52.0" }, @@ -30358,6 +30826,18 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -30380,7 +30860,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -30401,7 +30881,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -30410,7 +30890,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, + "devOptional": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -30423,7 +30903,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, + "devOptional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -30435,13 +30915,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "devOptional": true }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, + "devOptional": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -30477,7 +30957,13 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "devOptional": true + }, + "node_modules/nan": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "optional": true }, "node_modules/nanoid": { "version": "3.3.7", @@ -30566,7 +31052,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, + "devOptional": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -30592,19 +31078,19 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "devOptional": true }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "devOptional": true }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, + "devOptional": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -30724,6 +31210,19 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -30747,7 +31246,7 @@ "version": "2.2.10", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", - "dev": true + "devOptional": true }, "node_modules/nypm": { "version": "0.3.8", @@ -31075,7 +31574,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, + "devOptional": true, "dependencies": { "wrappy": "1" } @@ -31363,7 +31862,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "devOptional": true }, "node_modules/parseurl": { "version": "1.3.3", @@ -31403,7 +31902,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -32470,7 +32969,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "devOptional": true }, "node_modules/pump": { "version": "3.0.0", @@ -32507,7 +33006,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -32560,7 +33059,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "devOptional": true }, "node_modules/queue": { "version": "6.0.2", @@ -33870,7 +34369,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -35105,7 +35604,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "devOptional": true }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", @@ -35195,7 +35694,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, + "devOptional": true, "dependencies": { "glob": "^7.1.3" }, @@ -35211,7 +35710,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, + "devOptional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -35496,7 +35995,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -35539,13 +36038,13 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "devOptional": true }, "node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, + "devOptional": true, "dependencies": { "xmlchars": "^2.2.0" }, @@ -35598,7 +36097,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, + "devOptional": true, "bin": { "semver": "bin/semver.js" } @@ -35686,8 +36185,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "peer": true + "devOptional": true }, "node_modules/set-function-length": { "version": "1.2.2", @@ -35813,7 +36311,38 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "devOptional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } }, "node_modules/sisteransi": { "version": "1.0.5", @@ -36082,7 +36611,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, + "devOptional": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -36292,7 +36821,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -36577,7 +37106,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "devOptional": true }, "node_modules/synckit": { "version": "0.9.0", @@ -36613,7 +37142,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, + "devOptional": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -36664,7 +37193,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "devOptional": true }, "node_modules/telejson": { "version": "7.2.0", @@ -37060,7 +37589,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, + "devOptional": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -37075,7 +37604,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 4.0.0" } @@ -37785,7 +38314,7 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, + "devOptional": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -37857,7 +38386,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "devOptional": true }, "node_modules/utila": { "version": "0.4.0", @@ -38117,7 +38646,7 @@ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, + "devOptional": true, "dependencies": { "browser-process-hrtime": "^1.0.0" } @@ -38492,6 +39021,44 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wide-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -38634,7 +39201,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "devOptional": true }, "node_modules/write-file-atomic": { "version": "2.4.3", @@ -38764,7 +39331,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "devOptional": true }, "node_modules/xtend": { "version": "4.0.2", @@ -38903,4 +39470,4 @@ } } } -} +} \ No newline at end of file diff --git a/package.json b/package.json index 72fd55a06..58d2a016c 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,9 @@ "test-watch": "jest --watch", "prepare": "(test -d ./.git && npx husky install) || true", "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build" + "build-storybook": "storybook build", + "build-fabric": "test -d ./node_modules/fabric && cd ./node_modules/fabric && node build.js modules=ALL exclude=assessors || true", + "postinstall": "npm run build-fabric" }, "repository": { "type": "git", @@ -35,6 +37,7 @@ "dependencies": { "@floating-ui/dom": "^1.5.4", "@floating-ui/react": "^0.26.6", + "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", "react-zoom-pan-pinch": "^3.3.0" @@ -66,6 +69,7 @@ "@storybook/test": "^8.1.6", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", + "@types/fabric": "^5.3.7", "@types/jest": "^27.4.1", "@types/lodash": "^4.14.180", "@types/react": "^17.0.43", From cb1794ac759b10d8842c367b9baf6f617956cc1d Mon Sep 17 00:00:00 2001 From: Wei Li Date: Fri, 14 Jun 2024 11:45:24 +0800 Subject: [PATCH 0191/1949] [CCUBE-1414][WL] create e-signature component --- src/e-signature/e-signature-canvas.tsx | 139 +++++++++++++++++++++ src/e-signature/e-signature.styles.ts | 166 +++++++++++++++++++++++++ src/e-signature/e-signature.tsx | 137 ++++++++++++++++++++ src/e-signature/index.ts | 1 + src/e-signature/types.ts | 21 ++++ src/form/form-e-signature.tsx | 37 ++++++ src/form/index.ts | 2 + src/form/types.ts | 5 + 8 files changed, 508 insertions(+) create mode 100644 src/e-signature/e-signature-canvas.tsx create mode 100644 src/e-signature/e-signature.styles.ts create mode 100644 src/e-signature/e-signature.tsx create mode 100644 src/e-signature/index.ts create mode 100644 src/e-signature/types.ts create mode 100644 src/form/form-e-signature.tsx diff --git a/src/e-signature/e-signature-canvas.tsx b/src/e-signature/e-signature-canvas.tsx new file mode 100644 index 000000000..7c80f2fee --- /dev/null +++ b/src/e-signature/e-signature-canvas.tsx @@ -0,0 +1,139 @@ +import { fabric } from "fabric"; +import { + Ref, + forwardRef, + useCallback, + useEffect, + useImperativeHandle, + useRef, +} from "react"; +import { useTheme } from "styled-components"; +import { Color } from "../color"; +import { + SignatureCanvas, + SignatureCanvasContainer, +} from "./e-signature.styles"; +import { ESignatureCanvasProps, ESignatureCanvasRef } from "./types"; +import { BaseTheme } from "../theme"; + +const Component = ( + props: ESignatureCanvasProps, + ref: Ref +) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const { baseImageDataURL } = props; + const containerRef = useRef(null); + const canvasRef = useRef(null); + const fabricCanvas = useRef(); + const pencilBrush = useRef(); + const theme = useTheme(); + + // ============================================================================= + // HOOKS + // ============================================================================= + useImperativeHandle(ref, () => ({ + clear: () => fabricCanvas.current?.clear(), + export: () => exportAsImage(), + })); + + // ============================================================================= + // HELPER FUNCTIONS + // ============================================================================= + const exportAsImage = () => { + if (!fabricCanvas.current.getObjects().length) return null; + const dataURL = fabricCanvas.current?.toDataURL({ + format: "png", + quality: 1, + enableRetinaScaling: true, + }); + return dataURL; + }; + + const handleResize = useCallback(async () => { + if (containerRef.current && canvasRef.current && fabricCanvas.current) { + // slight delay for fabricjs to update on orientation change + await new Promise((resolve) => setTimeout(resolve)); + + const canvasWidth = containerRef.current?.clientWidth; + const canvasHeight = containerRef.current.clientHeight; + canvasRef.current.width = canvasWidth; + canvasRef.current.height = canvasHeight; + fabricCanvas.current.setWidth(canvasWidth); + fabricCanvas.current.setHeight(canvasHeight); + + // change x and y position of the viewport to centralise the drawing + const viewport = fabricCanvas.current.viewportTransform; + viewport[4] = (canvasWidth - 640) / 2; + viewport[5] = (canvasHeight - 320) * 0.75; + } + }, []); + + // ============================================================================= + // EFFECTS + // ============================================================================= + // initialise fabric and brushes + useEffect(() => { + if (containerRef.current && canvasRef.current) { + fabricCanvas.current = new fabric.Canvas("eSignatureCanvas"); + fabricCanvas.current.selection = false; + fabricCanvas.current.isDrawingMode = true; + + pencilBrush.current = new fabric.PencilBrush(fabricCanvas.current); + pencilBrush.current.color = `#${Color.Neutral[8]({ + theme: theme || BaseTheme, + })}`; + pencilBrush.current.width = 3; + + fabricCanvas.current.freeDrawingBrush = pencilBrush.current; + } + }, []); + + // resize + useEffect(() => { + if (window) { + window.addEventListener("resize", handleResize); + screen.orientation?.addEventListener("change", handleResize); + handleResize(); + return () => { + window.removeEventListener("resize", handleResize); + screen.orientation?.removeEventListener("change", handleResize); + }; + } + }, [handleResize]); + + // update base image + useEffect(() => { + if (baseImageDataURL) { + fabric.Image.fromURL(baseImageDataURL, (img) => { + if (fabricCanvas.current) { + fabricCanvas.current?.clear(); + img.selectable = false; + img.hoverCursor = "default"; + img.scale(0.5); + + const viewport = fabricCanvas.current.viewportTransform; + img.left = -viewport[4]; + img.top = -viewport[5]; + + fabricCanvas.current.add(img); + } + }); + } + }, [baseImageDataURL]); + + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= + return ( + + + + ); +}; + +export const ESignatureCanvas = forwardRef< + ESignatureCanvasRef, + ESignatureCanvasProps +>(Component); diff --git a/src/e-signature/e-signature.styles.ts b/src/e-signature/e-signature.styles.ts new file mode 100644 index 000000000..6f8a0672e --- /dev/null +++ b/src/e-signature/e-signature.styles.ts @@ -0,0 +1,166 @@ +import styled from "styled-components"; +import { Button } from "../button"; +import { Color } from "../color"; +import { IconButton } from "../icon-button"; +import { Modal } from "../modal"; +import { Text, TextStyleHelper } from "../text"; +import { MediaQuery, MediaWidths } from "../media"; + +// ============================================================================= +// CUSTOM MEDIA QUERIES +// ============================================================================= +// for mobileL and below in both orientations +const mobileMediaQuery = ` ${MediaQuery.MaxWidth.mobileL}, (orientation: landscape) and (max-height: ${MediaWidths.mobileL}px)`; +const mobileLandscapeMediaQuery = `@media(orientation: landscape) and (max-height: ${MediaWidths.mobileL}px)`; + +// ============================================================================= +// STYLING +// ============================================================================= +export const SignatureArea = styled.div` + position: relative; + display: flex; + align-items: center; + justify-content: center; + background-image: ${(props) => + `url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='4' ry='4' stroke='${encodeURIComponent( + Color.Neutral[5](props) + )}' stroke-width='4' stroke-dasharray='8%2c 8' stroke-dashoffset='8' stroke-linecap='round'/%3e%3c/svg%3e");`}; + background-color: ${Color.Neutral[8]}; + border-radius: 0.25rem; + height: 14.125rem; +`; +export const AddSignatureButton = styled(Button.Default)` + max-width: 10.875rem; + width: 100%; + margin: 0 2rem; +`; +export const EditSignatureButton = styled(IconButton)` + position: absolute; + top: 1rem; + right: 1rem; +`; +export const SignaturePreviewImage = styled.img` + display: block; + object-fit: contain; + object-position: center; + width: calc(100% - 8rem); + height: 100%; +`; +export const Instructions = styled(Text.H6)` + margin-top: 1rem; +`; + +export const ScrollableModal = styled(Modal)` + /* increase specificity as the styles are overwritten */ + && { + height: 100%; + overflow-y: auto; + } +`; +export const GrowContainer = styled.div` + width: 100%; + margin: auto; + padding: 5rem 1.25rem; + + ${mobileMediaQuery} { + padding: 0; + width: 100%; + height: 100%; + } +`; + +export const ModalBox = styled(Modal.Box)` + width: 100%; + height: 29rem; + max-width: 42rem; + max-height: none; + margin: 0 auto; + padding: 1rem; + + ${mobileMediaQuery} { + display: flex; + flex-direction: column; + max-width: none; + height: 100%; + border-radius: 0; + padding: 0; + } +`; + +export const ModalTitle = styled.h4` + ${TextStyleHelper.getTextStyle("H4", "semibold")} + margin-bottom: 1rem; + color: ${Color.Neutral[1]}; + text-align: center; + + ${mobileMediaQuery} { + ${TextStyleHelper.getTextStyle("H5", "semibold")} + margin: 0.75rem 0; + } +`; +export const ESignatureContainer = styled.div` + position: relative; + width: 100%; + height: 20rem; + background: ${Color.Neutral[6]}; + border-radius: 0.75rem; + overflow: hidden; + + ${mobileMediaQuery} { + border-radius: 0; + flex: 1; + } +`; +export const SignatureLine = styled.div` + position: absolute; + left: 50%; + top: calc(75% - 1px); + width: 18.75rem; + height: 2px; + transform: translateX(-50%); + background-color: ${Color.Neutral[4]}; + pointer-events: none; + + ${mobileMediaQuery} { + width: calc(100% - 4rem); + max-width: 18.75rem; + left: 50%; + } +`; + +export const ModalButtons = styled.div` + display: flex; + justify-content: space-between; + margin-top: 1rem; + + ${MediaQuery.MaxWidth.mobileL} { + flex-direction: column-reverse; + margin: 1rem 1.25rem 3rem; + gap: 1rem; + } + + ${mobileLandscapeMediaQuery} { + flex-direction: row; + padding: 0 1.25rem 1rem; + gap: 0; + } +`; +export const ModalActionButton = styled(Button.Default)` + width: 8.5rem; + ${MediaQuery.MaxWidth.mobileL} { + width: 100%; + } + ${mobileLandscapeMediaQuery} { + height: 2.5rem; + } +`; + +export const SignatureCanvasContainer = styled.div` + width: 100%; + height: 100%; + overflow: hidden; +`; + +export const SignatureCanvas = styled.canvas` + cursor: crosshair; +`; diff --git a/src/e-signature/e-signature.tsx b/src/e-signature/e-signature.tsx new file mode 100644 index 000000000..b48d68ca4 --- /dev/null +++ b/src/e-signature/e-signature.tsx @@ -0,0 +1,137 @@ +import { EraserIcon, PencilIcon } from "@lifesg/react-icons"; +import { useEffect, useRef, useState } from "react"; +import { useMediaQuery } from "react-responsive"; +import { ButtonWithIcon } from "../button-with-icon"; +import { MediaWidths } from "../media"; +import { ESignatureCanvas } from "./e-signature-canvas"; +import { + AddSignatureButton, + ESignatureContainer, + EditSignatureButton, + GrowContainer, + Instructions, + ModalActionButton, + ModalBox, + ModalButtons, + ModalTitle, + ScrollableModal, + SignatureArea, + SignatureLine, + SignaturePreviewImage, +} from "./e-signature.styles"; +import { ESignatureCanvasRef, EsignatureProps } from "./types"; + +export const ESignature = (props: EsignatureProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const { description, onChange, value, ...otherProps } = props; + const [showModal, setShowModal] = useState(false); + const eSignatureCanvasRef = useRef(null); + const [dataURL, setDataURL] = useState(value); + const isMobile = useMediaQuery({ + maxWidth: MediaWidths.mobileL, + }); + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + const handleClearDrawing = () => { + eSignatureCanvasRef.current.clear(); + }; + + const handleClickSave = () => { + const dataURL = eSignatureCanvasRef.current.export(); + setDataURL(dataURL); + setShowModal(false); + onChange?.(dataURL); + }; + + // ============================================================================= + // EFFECTS + // ============================================================================= + useEffect(() => { + setDataURL(value); + }, [value]); + + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= + const renderSignatureArea = () => { + if (!dataURL) { + return ( + setShowModal(true)} + > + Add signature + + ); + } + + return ( + <> + + setShowModal(true)} + aria-label="Edit signature" + > + + + + ); + }; + + const renderModal = () => { + return ( + + + setShowModal(false)}> + Signature + + + {showModal && ( + + )} + + + } + onClick={handleClearDrawing} + > + Clear + + + Save + + + + + + ); + }; + + const renderDescription = () => { + if (!description) return null; + return {description}; + }; + + return ( +
    + {renderSignatureArea()} + {renderModal()} + {renderDescription()} +
    + ); +}; diff --git a/src/e-signature/index.ts b/src/e-signature/index.ts new file mode 100644 index 000000000..7b214ed3f --- /dev/null +++ b/src/e-signature/index.ts @@ -0,0 +1 @@ +export * from "./e-signature"; diff --git a/src/e-signature/types.ts b/src/e-signature/types.ts new file mode 100644 index 000000000..5093aa621 --- /dev/null +++ b/src/e-signature/types.ts @@ -0,0 +1,21 @@ +import { Ref } from "react"; + +export interface EsignatureProps { + className?: string | undefined; + id?: string | undefined; + "data-testid"?: string | undefined; + description?: string | undefined; + /** image dataURL */ + value?: string | undefined; + onChange?: ((value: string) => void) | undefined; +} + +export interface ESignatureCanvasProps { + baseImageDataURL?: string | undefined; + forwardedRef?: Ref | undefined; +} + +export interface ESignatureCanvasRef { + clear: VoidFunction; + export: () => string; +} diff --git a/src/form/form-e-signature.tsx b/src/form/form-e-signature.tsx new file mode 100644 index 000000000..5176d8b4e --- /dev/null +++ b/src/form/form-e-signature.tsx @@ -0,0 +1,37 @@ +import { ESignature } from "../e-signature"; +import { FormWrapper } from "./form-wrapper"; +import { FormESignatureProps } from "./types"; + +export const FormESignature = (props: FormESignatureProps) => { + const { + label, + errorMessage, + id = "form-field", + "data-error-testid": errorTestId, + "data-testid": testId, + layoutType, + mobileCols, + tabletCols, + desktopCols, + ...otherProps + } = props; + + return ( + + + + ); +}; diff --git a/src/form/index.ts b/src/form/index.ts index 96cdd1a8a..c13c6d701 100644 --- a/src/form/index.ts +++ b/src/form/index.ts @@ -1,6 +1,7 @@ import { FormCustomField } from "./form-custom-field"; import { FormDateInput } from "./form-date-input"; import { FormDateRangeInput } from "./form-date-range-input"; +import { FormESignature } from "./form-e-signature"; import { FormHistogramSlider } from "./form-histogram"; import { FormInput } from "./form-input"; import { FormInputGroup } from "./form-input-group"; @@ -23,6 +24,7 @@ import { FormUnitNumberInput } from "./form-unit-number-input"; export const Form = { DateInput: FormDateInput, DateRangeInput: FormDateRangeInput, + ESignature: FormESignature, HistogramSlider: FormHistogramSlider, Input: FormInput, InputGroup: FormInputGroup, diff --git a/src/form/types.ts b/src/form/types.ts index b62275056..2ac98263c 100644 --- a/src/form/types.ts +++ b/src/form/types.ts @@ -1,5 +1,6 @@ import { DateInputProps } from "../date-input/types"; import { DateRangeInputProps } from "../date-range-input/types"; +import { EsignatureProps } from "../e-signature/types"; import { HistogramSliderProps } from "../histogram-slider"; import { InputGroupPartialProps } from "../input-group/types"; import { InputMultiSelectPartialProps } from "../input-multi-select/types"; @@ -139,3 +140,7 @@ export interface FormRangeSliderProps export interface FormHistogramSliderProps extends HistogramSliderProps, BaseFormElementProps {} + +export interface FormESignatureProps + extends EsignatureProps, + BaseFormElementProps {} From 788c44d8f636658740e9f6246d28f4d9bd941215 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Fri, 14 Jun 2024 12:05:55 +0800 Subject: [PATCH 0192/1949] [CCUBE-1414][WL] add e-signature stories --- stories/form/form-e-signature/doc-elements.ts | 2 + .../form-e-signature/form-e-signature.mdx | 39 +++++++++++ .../form-e-signature.stories.tsx | 69 +++++++++++++++++++ stories/form/form-e-signature/props-table.tsx | 58 ++++++++++++++++ 4 files changed, 168 insertions(+) create mode 100644 stories/form/form-e-signature/doc-elements.ts create mode 100644 stories/form/form-e-signature/form-e-signature.mdx create mode 100644 stories/form/form-e-signature/form-e-signature.stories.tsx create mode 100644 stories/form/form-e-signature/props-table.tsx diff --git a/stories/form/form-e-signature/doc-elements.ts b/stories/form/form-e-signature/doc-elements.ts new file mode 100644 index 000000000..394e6c7ac --- /dev/null +++ b/stories/form/form-e-signature/doc-elements.ts @@ -0,0 +1,2 @@ +export const signatureDataURL = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAKACAYAAADD89WhAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3T+3XNWZJ+C33fF8AEAKrR6lwu7UAoXIk4NJgZ7Q9lI6Xu7Ug50OJmVBPAOEQnLqNqSMRYjAn8J47utVZ7pc1L9TVbv2Oe95aq27BNyqXXs/7773cn/af/4pPAgQIECAAAECBAgQIECAAAECBAgQKCvwT2VHZmAECBAgQIAAAQIECBAgQIAAAQIECIQA0CQgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgQIECBAgAABAgQIECBAgAABAaA5QIAAAQIECBAgQIAAAQIECBAgQKCwgACwcHENjQABAgQIECBAgAABAgQIECBAgIAA0BwgQIAAAQIECBAgQIAAAQIECBAgUFhAAFi4uIZGgAABAgQIECBAgAABAgQIECBAQABoDhAgQIAAAQIECBAgQIAAAQIECBAoLCAALFxcQyNAgAABAgQIECBAgAABAgQIECAgADQHCBAgQIAAAQIECBAgQIAAAQIECBQWEAAWLq6hESBAgAABAgQIECBAgAABAgQIEBAAmgMECBAgQIAAAQIECBAgQIAAAQIECgsIAAsX19AIECBAgAABAgQIECBAgAABAgQICADNAQIECBAgQIAAAQIECBAgQIAAAQKFBQSAhYtraAQIECBAgAABAgQIECBAgAABAgQEgOYAAQIECBAgQIAAAQIECBAgQIAAgcICAsDCxTU0AgQIECBAgAABAgQIECBAgAABAgJAc4AAAQIECBAgQIAAAQIECBAgQIBAYQEBYOHiGhoBAgRmLnAnIvLnVP6Zj79FxCczH5PuEyBAgAABAgQIECBA4OoCAsCrk3tDAgQIENgh8C+rsO+HEZH//MLqeS+uBYB/iojfRcQzigQIECBAgAABAgQIECBwnIAA8DgnzyJAgACBNgIZ9L22Fvhl2JfB3xD6bb5rrgJ8NyIetemOVgkQIECAAAECBAgQIFBPQABYr6ZGRIAAgakLrId+GfTd2xP4bRvL84i4PfVB6h8BAgQIECBAgAABAgSmIiAAnEol9IMAAQK1Bc4N/dZ1vouIu7YB154wRkeAAAECBAgQIECAwOUEBICXs9QSAQIECPyjwCVDv/WWcxvwOxHxPnACBAgQIECAAAECBAgQOCwgADxs5BkECBAgcLzApUO/vOxjuAV46EUGgB9GxJvHd8szCRAgQIAAAQIECBAgsFwBAeBya2/kBAgQuKRABn8PI+L+CWf6rffjzxHx6eo/ZPj3XyLiN1s66hzAS1ZPWwQIECBAgAABAgQIlBYQAJYur8ERIECgucAlgr8h9Ms/v42IL1a9zn9+KSI+27IK0DmAzUvrDQgQIECAAAECBAgQqCIgAKxSSeMgQIDAdQXODf62hX4Z+G0+fhARj1crC9c/lwHgg5v//vS6w/ZuBAgQIECAAAECBAgQmJ+AAHB+NdNjAgQI9BLInxm5zTc/Xjxhq++xod/6+PI934uItzYGnecAvhsRj3pheF8CBAgQIECAAAECBAjMRUAAOJdK6ScBAgT6Cgwr/l6PiJdHdOWU0G8zAHwjIj7YEgA+Wa0CHNEdTyVAgAABAgQIECBAgMDyBASAy6u5ERMgQGCMwKlbfTP4+2S1RTfP9Nu2vfeYfuTPqVdW24DXn58rAAWAxwh6DgECBAgQIECAAAECixcQAC5+CgAgQIDAVoH8+fCLkbf6nrvab1tHBIAmKAECBAgQIECAAAECBM4UEACeCejlBAgQKCawfs7fcNbfoSFearXfrve5FRFfb/nk84i4fahzPk+AAAECBAgQIECAAIGlCwgAlz4DjJ8AAQL/KTD2nL/Wwd/Qs7wJ+K9bCpU3Af+zAhIgQIAAAQIECBAgQIDAfgEBoBlCgAABAsOqv7ePvNn3WsGfANDcJECAAAECBAgQIECAwAUEBIAXQNQEAQIEZiwwZtVfXryRF3v8PiLOudhjLJcVgGPFPJ8AAQIECBAgQIAAAQJrAgJA04EAAQLLFBiz6m8I/jL8+3z1cU21DAC/jIg7G2+aW4DvRsSza3bGexEgQIAAAQIECBAgQGBuAgLAuVVMfwkQIHC+wJhVf8N23486BH/DSDMAfLy6kXh99BkAPrj570/PJ9ECAQIECBAgQIAAAQIE6goIAOvW1sgIECCwKXDKqr9rb/fdVjUBoLlMgAABAgQIECBAgACBMwQEgGfgeSkBAgRmJDC3VX/rtLsCwNya/E5EvD+jOugqAQIECBAgQIAAAQIEri4gALw6uTckQIDAVQXGrvr77WpL7TUv+TgEkmP4ZUT8ZuOJGQB+GBFvHmrA5wkQIECAAAECBAgQILBkAQHgkqtv7AQIVBfI7/G/iIjXI+LlA4PNs/4y/MuLPr6dGEyO45XVOYDrXcsA8MnqHMCJdVl3CBAgQIAAAQIECBAgMB0BAeB0aqEnBAgQuKRAbvnN8O9hRLy4p+EM0YZVfxn+TfVxKyK+3tK55xFxe6qd1i8CBAgQIECAAAECBAhMQUAAOIUq6AMBAgQuJzCs+ru/Cv/2tTzc8JsB4NRW/W32O88B/PJmy++djU/kTcB3I+LZ5Qi1RIAAAQIECBAgQIAAgVoCAsBa9TQaAgSWLTBc9JEr/w6t+svVflO44ffYirkJ+FgpzyNAgAABAgQIECBAgMCGgADQlCBAgMD8BcZc9DGs+vsoIj6f0dD3XQTybkQ8mtFYdJUAAQIECBAgQIAAAQJXFRAAXpXbmxEgQODiAsOqv0MXfeRZf3Nb9beOtesikHyOcwAvPq00SIAAAQIECBAgQIBAJQEBYKVqGgsBAksSWMKqv8167roIxDmAS5r5xkqAAAECBAgQIECAwGgBAeBoMi8gQIBAd4GlrPrbhN51EUiubrQNuPu01AECBAgQIECAAAECBKYqIACcamX0iwABAt8XWL/h996Biz7metbfvrrvOwfwSUQ8MGkIECBAgAABAgQIECBAYPsvk1wIECBAYPoCueovb/d9WPCG32P1950D+E1EvBoRz45tzPMIECBAgAABAgQIECCwFAErAJdSaeMkQGCuAsN23/ur8G/fOHIr7G8jYm43/I6pzUsR8VlE3Nl4UZ4DmCsAn45pzHMJECBAgAABAgQIECCwBAEB4BKqbIwECMxRYMwlHzm+3PKb4V/e9PvtHAd8ZJ/zHMDHN0FfBqLrD+cAHgnoaQQIECBAgAABAgQILE9AALi8mhsxAQLTFzj2ko8cybDqL1e+ZfhX/bHrHMAct23A1atvfAQIECBAgAABAgQInCQgADyJzYsIECDQRGB9u++hSz4y+MvAb/iovOpvE9s24CbTT6MECBAgQIAAAQIECFQVEABWraxxESAwJ4ExwV+Oq+INv2PqZRvwGC3PJUCAAAECBAgQIEBg8QICwMVPAQAECHQUGBv8Dav+fh8RXxQ/629fWfZtA34eEbc71tRbEyBAgAABAgQIECBAYHICAsDJlUSHCBBYgMDYCz6SZLjk4/OIyI+lP/ZtA74bEc+WDmT8BAgQIECAAAECBAgQGAQEgOYCAQIEricwBH8PI+Ll1cehdx+2+y7lko9DHsPnbQM+VsrzCBAgQIAAAQIECBBYvIAAcPFTAAABAlcQOCX4W7/dd8nbfXeVxzbgK0xcb0GAAAECBAgQIECAQA0BAWCNOhoFAQLTFRjO+Xv9yBV/S77dd2wVb0XE11te9F1E2AY8VtPzCRAgQIAAAQIECBAoKyAALFtaAyNAoLPAqRd8fLI64885f4cLmNuAv4yIOxtPzRD13Yh4dLgJzyBAgAABAgQIECBAgEB9AQFg/RobIQEC1xUYG/xl74Zz/j5ywceoYu3bBvxNRLzqMpBRnp5MgAABAgQIECBAgEBRAQFg0cIaFgECVxc4J/jLCz6c83dayXbdBmwV4GmeXkWAAAECBAgQIECAQEEBAWDBohoSAQJXFRD8XZX7e2/mMpC+/t6dAAECBAgQIECAAIEZCAgAZ1AkXSRAYJICgr9plCV/jr0SEY+3dMdlINOokV4QIECAAAECBAgQINBZQADYuQDengCB2Qnk982HEfF2RNyLiBePGMFwxp+tvkdgnfAU24BPQPMSAgQIECBAgAABAgSWIyAAXE6tjZQAgfMFhlV/r0fEy0c0J/g7AukCT7EN+AKImiBAgAABAgQIECBAoK6AALBubY2MAIHLCYzd7iv4u5z9sS3dioivtzzZNuBjBT2PAAECBAgQIECAAIGyAgLAsqU1MAIELiAwNvjLm2c/udkW/Hu3+l5Af1wTP4iILyPizsbL3AY8ztGzCRAgQIAAAQIECBAoKCAALFhUQyJA4GyBsef8DcFfhn+frz7O7oQGRgns2wb8TUS8GhHPRrXoyQQIECBAgAABAgQIECgiIAAsUkjDIEDgIgJD8JeXfOQZf2PO+ftI8HeRGpzTyL7LQN6JiPfPadxrCRAgQIAAAQIECBAgMFcBAeBcK6ffBAhcWsAFH5cWvX57+TPtvYh4a+Otc4XmhxHx5vW75B0JECBAgAABAgQIECDQX0AA2L8GekCAQF+BU875+21EPHXOX9/CbXn3/Jn2RkR8sOVztgFPrlw6RIAAAQIECBAgQIDAtQQEgNeS9j4ECExNIL///eImyLsfEfduLu548UAH18/5y7P+vp3agPTn7wL7tgG/GxGPOBEgQIAAAQIECBAgQGBpAgLApVX9/iRrAAAgAElEQVTceAkQWD/nL8/6OxT8pdifV7f7Oudv+vNn12UgGeA+iYgH0x+CHhIgQIAAAQIECBAgQOCyAgLAy3pqjQCBaQs452/a9blE7/Ln2isR8XhLY7YBX0JYGwQIECBAgAABAgQIzE5AADi7kukwAQInCIw9529Y8eecvxOwJ/AS24AnUARdIECAAAECBAgQIEBgOgICwOnUQk8IELi8wNjgbzjn7/cu+Lh8Ma7Y4q5twNmF5xFx+4p98VYECBAgQIAAAQIECBDoLiAA7F4CHSBAoIHA2OAvu5Cr/vJ2389XHw26pckrCtyKiK+3vN93EXH35rbgZ1fsi7ciQIAAAQIECBAgQIBAVwEBYFd+b05gtEAGW69FxFcRMaxWG91I4RecGvzlrb653Tf/9Kgh8IOI+DIi7mwMJ79u3AZco8ZGQYAAAQIECBAgQIDAkQICwCOhPI3ABAQy3PqfEXEvIv6yCgD/FBG/s5ophpt93175jLnZ1zl/E5jcDbrgNuAGqJokQIAAAQIECBAgQGCeAgLAedZNr5cnkF+rGW79r42h52qmjyPi0UJDwCH4e3jj8PLq49DscM7fIaEan993G7BzAGvU2CgIECBAgAABAgQIEDhSQAB4JJSnEegskNsZ/7gj4BpCwPcXtIV12Aqdf44N/nKbr3P+Ok/oK739rtuAnQN4pQJ4GwIECBAgQIAAAQIEpiEgAJxGHfSCwCGBDAD/euBJuR04g60MuKqeZXfKGX/Dij/B36FZVu/z+XXz+OZ8x/sbQ3MOYL1aGxEBAgQIECBAgAABAnsEBICmB4F5COy60GBb7zMIrHY24CnBX9q42Xce87tVL50D2EpWuwQIECBAgAABAgQIzEpAADircunsggV2BRm7SCqcDbi+zTcv9cjLT4653GMI/tzsu+AvmNXQnQNoDhAgQIAAAQIECBAgQCDi7zdnehAgMA+BDL9+erO6Ly+8yK/d1w50e25nA95ZG1eGf2NDv83g74ubi1O+nUdp9bKhgHMAG+JqmgABAgQIECBAgACBeQgIAOdRJ70ksC7wo9W/vBERPz+CZjgbMJ86hfMBM+jLx3qImYHfC6v/Nmal3zD83Oo7rPgT/B0xKRb0FOcALqjYhkqAAAECBAgQIECAwHYBAaCZQWC+AsOKwAzUhu2yh0YzhIGfHnriBT7/w402hhV+GfQNAWCGffk4dmvvZrcEfxcoVPEmnANYvMCGR4AAAQIECBAgQIDAYQEB4GEjzyAwdYEMz3Kb46+O2BY8jCVvC279GIK+4X1ODfm2hX4ZYGb4l1t8rfhrXcl5t+8cwHnXT+8JECBAgAABAgQIELiAgADwAoiaIDARgR+PDAEn0u2ju2G139FUnrgh4BxAU4IAAQIECBAgQIAAgUULCAAXXX6DLyiQ5wMeezbgHIafoZ/VfnOo1LT7uO8cwHduVtC+P+3u6x0BAgQIECBAgAABAgTOExAAnufn1QSmKLB+NmCeuzd8TLGvm316drOKMW8vFvrNoVrz6WP+rHsvIt7a6HLOtQ8j4s35DEVPCRAgQIAAAQIECBAgMF5AADjezCsIzEUgg8D8yLP47o+4KKT1+DLky0eGL1/drFgc/j1X+/1l9d+d69e6CstqP3/W5crYD7YEgE8i4sGyOIyWAAECBAgQIECAAIGlCQgAl1Zx412qwBAGvnzFFYFDsDeYD6v7MuQbHnmJx/Dv+c8eBFoJ3IqIr7c0/jwibrd6U+0SIECAAAECBAgQIEBgCgICwClUQR8IXFdgCANbvmuu7lsP+vK9BHwtxbV9SCDPAfxyFYCvP/e7iLi7thL1UDs+T4AAAQIECBAgQIAAgdkJCABnVzIdJkCAAIETBFwEcgKalxAgQIAAAQIECBAgUENAAFijjkZBgAABAvsF8ufdLyPiNxtPcxGImUOAAAECBAgQIECAQHkBAWD5EhsgAQIECERE/rx7JSIebwkAXQRiihAgQIAAAQIECBAgUFpAAFi6vAZHgAABAmsCuy4C+SYiXnUOoLlCgAABAgQIECBAgEBVAQFg1coaFwECBAhsCuy7CORBRDxFRoAAAQIECBAgQIAAgYoCAsCKVTUmAgQIENgm4CIQ84IAAQIECBAgQIAAgUUKCAAXWXaDJkCAwCIFXASyyLIbNAECBAgQIECAAAECAkBzgAABAgSWIrDrIpAc//OIuL0UCOMkQIAAAQIECBAgQGBZAgLAZdXbaAkQILB0gV0XgXwXEXddBLL06WH8BAgQIECAAAECBGoKCABr1tWoCBAgQGC7gItAzAwCBAgQIECAAAECBBYnIABcXMkNmAABAosWyJ9770XEWxsKf4uIdyPi0aJ1DJ4AAQIECBAgQIAAgZICAsCSZTUoAgQIENghkD/33oiID7YEgE8i4gE5AgQIECBAgAABAgQIVBMQAFarqPEQIECAwCGBXecAugjkkJzPEyBAgAABAgQIECAwSwEB4CzLptMECBAgcIbAvnMAXQRyBqyXEiBAgAABAgQIECAwTQEB4DTrolcECBAg0E4gA8DHEXF/4y2cA9jOXMsECBAgQIAAAQIECHQUEAB2xPfWBAgQINBFIH/2/TIifrMlAHQOYJeSeFMCBAgQIECAAAECBFoKCABb6mqbAAECBKYokD/7XlmtAtzsn3MAp1gxfSJAgAABAgQIECBA4CwBAeBZfF5MgAABAjMVeCkiPouIOxv9/y4inAM406LqNgECBAgQIECAAAEC2wUEgGYGAQIECCxRYN85gO9ExPtLRDFmAgQIECBAgAABAgRqCggAa9bVqAgQIEBgv8C+cwA/jIg3ARIgQIAAAQIECBAgQKCKgACwSiWNgwABAgTGCDgHcIyW5xIgQIAAAQIECBAgMGsBAeCsy6fzBAgQIHCGwK2I+HrL650DeAaqlxIgQIAAAQIECBAgMD0BAeD0aqJHBAgQIHAdgTwH8MstF4H8LSLejYhH1+mGdyFAgAABAgQIECBAgEBbAQFgW1+tEyBAgMB0BfadA/gkIh5Mt+t6RoAAAQIECBAgQIAAgeMFBIDHW3kmAQIECNQS2HcO4DcR8WpEPKs1ZKMhQIAAAQIECBAgQGCJAgLAJVbdmAkQIEBgEHgpIj7bsg04zwHMFYBPUREgQIAAAQIECBAgQGDuAgLAuVdQ/wkQIEDgHIE8B/DxTdB3f6MR5wCeo+q1BE4TuBMR+f+m+Wc+8uswV+FaiXuap1cRIECAAAECBP6/gADQZCBAgACBJQvsOgcwTZ5HxO0l4xg7gSsI/EtEvBYR+ecLq/d7ce19v42I/PhEGHiFangLAgQIECBAoKyAALBsaQ2MAAECBI4UuBURX295bm4Dvmv10ZGKnkbgeIH10C/DvnsRsR76bWvp84jIsznfX4WBx7+bZxIgQIAAAQIECPx9m4UHAQIECBBYskBuA/5yyzmAtgEveVYY+6UFTgn9tvXhTzfbhH8tBLx0ebRHgAABAgQIVBcQAFavsPERIECAwCGBXduAMwB8sroM5FAbPk+AwPcFLhX6bbacIeDPrM415QgQIECAAAECxwsIAI+38kwCBAgQqCmQPwtfWV0GsjnC3HL4qqChZuGNqolAq9BvvbMZzn8cEY98bTapoUYJECBAgACBggICwIJFNSQCBAgQGC3wUkR8tmUbcJ4D+ODmluCno1v0AgLLEcjQL2/uzY+8UfuYM/126fz5ZnXfV6tP5v+n5gUh2x626C9nfhkpAQIECBAgcAEBAeAFEDVBgAABArMXyHMAH6/Ci/XBCBlmX1oDaCiQwd/Dm63yP1ld4pG3+B66zGNbdzL0+zQi8s+/rD6G570RET/fMQYrdBsWV9MECBAgQIBALQEBYK16Gg0BAgQInCaw6xzAbO15RNw+rVmvIlBO4FJbfNdDv28j4ouIyD83H7k695c7QkABfbnpZUAECBAgQIBAKwEBYCtZ7RIgQIDA3AT2bQO+66yxuZVTfy8oMIR++f+N52zxPTb02xYCvrdjO7BVgBcstKYIECBAgACBugICwLq1NTICBAgQGCdgG/A4L8+uLzBs8R1Cvxzx2C2+p4Z+m7o/jogPtpzTaRVg/XlohAQIECBAgMAFBASAF0DUBAECBAiUELANuEQZDeJMgUts8b1U6Lc+lF1fnxkAPlld1nPm0L2cAAECBAgQIFBXQABYt7ZGRoAAAQLjBW5FxNdbXpa3AdsGPN7TK+YhcIktvsPtvfln3pq960y/c0R2fX06p/McVa8lQIAAAQIEFiEgAFxEmQ2SAAECBI4UyG3AX9pmeKSWp81d4FJbfD+JiD+sLvHIW3y3XeZxCatdX58C+kvoaoMAAQIECBAoLSAALF1egyNAgACBkQL7tgG7bGAkpqdPUmCqW3yPwdp1TmcGgA9WKw+PacdzCBAgQIAAAQKLExAALq7kBkyAAAECBwR23QacZ429ExHvEyQwM4G5bPE9xLovALzdcOXhoX75PAECBAgQIEBg8gICwMmXSAcJECBA4MoCu0KG7MZ/RMS/Xrk/3o7AqQJz2+J7aJz5tZlndG7eRJwrAP/50It9ngABAgQIECCwZAEB4JKrb+wECBAgsE1g3zZgZ42ZM1MXmPMW30O2GQD+dcuTBICH5HyeAAECBAgQWLyAAHDxUwAAAQIECGwR2LcN+N2IeESNwIQE7kRE/j/dw5tz8O5HxL0tq+QOdfcat/ge6sOhzwsADwn5PAECBAgQIEBgh4AA0NQgQIAAAQLfF3AZiFkxB4Fhi+9PVgHgqcHftW7xPddUAHiuoNcTIECAAAECixUQAC629AZOgAABAgcErAI0RaYokKFfrvjLj3NW+30aEbnq79uI+GImF2jsCgD/b0TcnWKx9IkAAQIECBAgMBUBAeBUKqEfBAgQIDA1AasAp1aRZfdnfbVfXoLxwshtvnPY4nuowv81Ir7ceFLezv0kIh4cerHPEyBAgAABAgSWLCAAXHL1jZ0AAQIEDgncWt06uvm8DB2cBXhIz+cvIbB5k+/mDbiH3iODv7ls8d03lvx/1lci4rEA8FDJfZ4AAQIECBAg8H0BAaBZQYAAAQIEdgvkz8mPI+K1LU95HhG34RFoIHDuTb4Z+s1xi68AsMFk0iQBAgQIECBAIAUEgOYBAQIECBDYL/DjiPjjlqd8tzp37BlAAhcSuNRqv6czOtdvDN2uFbnC+DGKnkuAAAECBAgsUkAAuMiyGzQBAgQIjBDIiwfy3LG8dGH9YRvwCERP3SkwXOrxcHWm39ibfCuu9tuFtetrURjvC4wAAQIECBAgcEBAAGiKECBAgACB/QIuAzFDWghsXurx8sg3Gc72q7rabxtHBoB5BmDefrz+yAAwLwFJCw8CBAgQIECAAIEtAgJA04IAAQIECBwWeCkiPrMK8DCUZxwUOGeb75JW+22DzP9vfS8i3tr4pNW4B6edJxAgQIAAAQJLFxAALn0GGD8BAgQIHCOwbxWg88eOEVz2cy6xzTdv8l3Sar9dAeAbEfHBlgDwyWoV4LJnmtETIECAAAECBHYICABNDQIECBAgcJzArgsInD92nN8Sn3XONt+lr/bbNV92fR1+ExGvRoRLeZb4lWbMBAgQIECAwEEBAeBBIk8gQIAAAQJ/F3AZiIlwrMC523yt9tst7evw2FnoeQQIECBAgACBNQEBoOlAgAABAgSOE3AZyHFOS36W4K999X0dtjf2DgQIECBAgEBBAQFgwaIaEgECBAg0E3AZSDPa2Tacod9rEZF/vhgR91Z/HjMg23yPUfr+c3ZtA87LQN6JiPdPa9arCBDYITCcYzp8Or/Wcru9LfemDAECBGYkIACcUbF0lQABAgS6C+y7hdQlBN3Lc9UOWO13Ve5/eLNd24DzSf8REf/ar2vemUAZgfx59/PVX268sOUvNr5dXUyUIWAeW+BBgAABAhMXEABOvEC6R4AAAQKTEsifm9tuIc1OuoRgUqVq1hnBXzPaoxvetw04Vyb9N4HE0ZaeSGCbQH6f+0VEPDywojlDwPz49x2MVgqaXwQIEJiQgABwQsXQFQIECBCYhYBtwLMo00U7mf+/lL8I37lZ8XL/hG2+wwqZ/EX5i9UvzBft4AIb2/V1mBR/ioif2Z64wFlhyOcKDN/r3l59zzu2vc/3PHEICXOVoJWCx4p6HgECBBoICAAboGqSAAECBEoL7Ft99Dwibpce/bIGt36+38sRsW0b3C6RPN8vf9n9wyrw2/cL8rJULzPaQ6sA342IR5d5K60QWIRAfk3lqr/XIyK/3136kcF8fvxOOH9pWu0RIEDgOAEB4HFOnkWAAAECBNYFdl1C8F1E3PXLzewni22+8yjhvlWAuSX/36w4mkch9bK7wLFbfs/taG4J/ngVzrtA5FxNrydAgMBIAQHgSDBPJ0CAAAECN+cd7bqEIH+5sfJovlNE8Dev2uX/x/40Iv73jm7bCjyveurt9QXWv+flMQf7Hrmq+auIyK+7vPn81Iefk6fKeR0BAgTOFBAAngno5QQIECCwSAHbgGuV/dTgL38h/vRmy1z+6Xy/PnMivxYzdM/bSjcfVhv1qYl3nb7AmO95+XX029VxBn9ZBYC/OjMEdFzG9OeIHhIgUFBAAFiwqIZEgAABAlcRsA34KszN3iR/Ac5LPYZbLu8duO1yvSPD+X5PXerRrD5jGt63FdhqozGSnltdYEzwlxbD97oMAPMvOYbHj1bnBB5aNbhttWB+Teb5qHlbtwcBAgQIXFFAAHhFbG9FgAABAqUEbAOeZzmHX4B/sgr8xhx2L/ibZs0PbQXO8wBzlWBePuBBYIkC67f7HvOXHUNI9/sDf8mRQeC+R77v5mrBbPvXq48l1sKYCRAg0E1AANiN3hsTIECAwMwFdm0Dzl9unkTEg5mPr1r3x658WR+/4G/6s2HfVuDsvRBw+jXUw8sLDMFfrtTLv+w45i88hu93H92csXmJ28vXVwvmxR/ZfrZ7ibYvL6ZFAgQIFBYQABYurqERIECAQFOB/Bn6SkQ83vIuGTa86jbgpv7HNn5q8Od8v2OFp/O83Ar83p6zydwMPJ1a6UlbgVOCv+Gsv1ZHG2T4mGcIrm8lbqugdQIECBD4BwEBoAlBgAABAgROF9h19lj+IvVORLx/etNeeYaA8/3OwJv5S3+8Zcvh+pDyZuDcfphnkHkQqCZwavCXXw/Dh4Cu2qwwHgIECKwEBICmAgECBAgQOF1g3zbgDyPizdOb9soTBJzvdwJawZccEwLm16czAQsWf6FDOiX4S6pLb/ddKL9hEyBAYB4CAsB51EkvCRAgQGCaArYBT6Mup27zXf8FuNW2t2kILa8XGQJ+sLrpedvonQm4vDlRccTnBn++71WcFcZEgACBHQICQFODAAECBAicJ7BvG3DePProvOa9eo/AqcFfrnrJw+hzy1tud/vCuVTl5tlwM/Bv9oSAWfv/s1oJmPPBg8BcBPJ732sRkX8ee7mHv/CYS3X1kwABAo0EBICNYDVLgAABAosR2LUNOAFcBnL5abD+i++LNwHOvYjIP495DNvd/rAK/NxCeYzafJ8zhIBv77kYJM/r/Hh1XqdzAedb66X0/Jy/9Mj5bcXfUmaKcRIgQGCLgADQtCBAgAABAucL3IqIr7c0k+GCVYDn+2YLp/7im68dgj+//F6mFnNr5dCZgDkel4PMrarL6u+p3/9871vWPDFaAgQI7BUQAJogBAgQIEDgfIH8eZqriHJL1ubDKsDzfE/9xVfwd557tVcLAatVdBnjOfX7n+BvGfPDKAkQIDBKQAA4isuTCRAgQIDAToEMGP645bNWAY6fNMPB9ndutqzdP2Gbr/P9xpsv4RXHhoC5NTy3S9oSvIRZMc0xCv6mWRe9IkCAwKwFBICzLp/OEyBAgMCEBA6tAvw3gcLBam0ebP+C8/0OmnnCOIFjQsBs0Zbgca6efRkBwd9lHLVCgAABAlsEBICmBQECBAgQuJxAhgsf7Lh1NAOFn61un73cO9Zo6dRfenP0trrVmAPXHMWPbr4O34iInx940/yatRrwmpVZ5nudu+LZ5R7LnDdGTYAAgdECAsDRZF5AgAABAgR2Cuy7EdhW4O+zCf58MfUSyJujf7r62HZ253q/Mgj8aBXe2xbcq2L13vcSK55dbFRvXhgRAQIEmgkIAJvRapgAAQIEFirwUkR8tmMVYF4IsvStwOu/9GYIc2/kNt9PV6v+vo2ILyIi//QgcKrAsVuCc57lx69t5T+V2utWAqf+xUf+JdJwNqXvf6YTAQIECIwWEACOJvMCAgQIECCwV2DfKsB84RK3Ag+hX9qMvdQjzWzz9UXXUiC3BL9+87X5cEdwv/7etgW3rETttk8N/vL73/AXH7klPT88CBAgQIDAaAEB4GgyLyBAgAABAgcFchXgexGxbWthruL4OCIeLeA8wM1feBMuV/0d+xD8HSvleecK5LzMIPDtHV+3m+0LAs8VX8brne+3jDobJQECBGYhIACcRZl0kgABAgRmKLDvQpCqIWAGfnci4oc3Z6blP4/d4ptlztDv2Wqrm21uM5z4M+/ysBpwWLV6aDgZBP57RAzbMw893+eXIeB8v2XU2SgJECAwKwEB4KzKpbMECBAgMCOBQ1uBK1wKshn4vbAK/YY/x5RrWO33h9VZa7a5jdHz3EsKZHCdq3h/deRqwJyr+fXsfMBLVmF+bTnqYH4102MCBAgsSkAAuKhyGywBAgQIXFkgQ4RfRsTPd7xvXgry36/cp1PfLlf1DY9c5Zf/D3FO4De0ZZvvqRXxutYCuRrw5SNvCs6+2BbcuiLTbN9RB9Osi14RIECAwIaAANCUIECAAAECbQX2nQeY7zyXlW4Z9g2PMef4bdNdP9TeNt+280/r5wucsi04v66HG1vP74EWpiZwzm3mORbfA6dWUf0hQIDAAgQEgAsosiESIECAQHeBPA/w2O2E3TvbqAP5C+9Xq198n0bEF6utvo3eTrMELiowdltwvrkVgRctQdfGhlXPebHTqeebDsFfBsO+B3YtpzcnQIDAMgUEgMusu1ETIECAwPUF9l0Kcv3eXO8dN8/2+4vg73r43uniAmO3BQsCL16CqzS4Hvjl70s/WR17cG/kTeZDZx11cJWyeRMCBAgQ2CcgADQ/CBAgQIDAdQQOXQpynV60f5dha1u+U/6zLb7tzb3D9QXODQLzpuv88JiGwL7AL3t4yrEHtvlOo7Z6QYAAAQIrAQGgqUCAAAECBK4ncOg8wOv15HLvtCvwy3fI8M+DQGWBU4LAPB8wvzbywzmB150dQ9CXfw4XG+WW3jzjNH8vyhV+pwZ++TpHHVy3nt6NAAECBEYICABHYHkqAQIECBC4gMAQGDy8QFvXbGJ9tdLwz39bW+En8LtmNbzX1ARyi///WIVIeU7csY/hnMBPb84Jza+nDAQ9zhPIcC8f+XvOtqAvP5cr+oaLjU5Z3bfZQ0cdnFczryZAgACBKwgIAK+A7C0IECBAgMAWgQwC5/LIYCLP7hseVvbNpXL6eU2B4Wv65ZvbvX8aEWOCwFwVmF9n+WcG7HlhjkDwP6s3hHrbgr3hWcPqvs0byy8Z9K3PJ1t8r/nV5b0IECBA4GwBAeDZhBogQIAAAQIECBAg8A8Cp2wNXg/YM3BfDwTzcxkKVn0M23HXw7zhn/P3lfVQL//7+gq+4XmXWMm3z3fY3psBrfNNq85E4yJAgEBhAQFg4eIaGgECBAgQIECAQFeBc4LA9UAw/3l9FW7XQTV4820BX4O3GdVkBn0Zwub27Az8hhvM3WQ+itGTCRAgQGAqAgLAqVRCPwgQIECAAAECBKoKrJ/9mVtV17e0Vh3z3Ma1LfDLAPALFxrNrZT6S4AAAQLbBASA5gUBAgQIECBAgACB6whkEJir3e5HRN4+O+acwOv0sP67rAd9w2iHFX4Cv/r1N0ICBAgsVkAAuNjSGzgBAgQIECBAgEAngTyvLj/ywpC8ETz/n1wYeJlirN9SnucmDv8+BH/D+Yq5sm94uNjoMvZaIUCAAIEJCwgAJ1wcXSNAgAABAgQIECgvsH57cA5WIPj9kg8hXn4mV+kNF6Ks//f1gG892BvOThTylf9SMkACBAgQ2CcgADQ/CBAgQIAAAQIECExHYDMQHM4LrHxu4HqQl5XYDPw2L0AZVvGt/3cB33TmsJ4QIECAwAQFBIATLIouESBAgAABAgQIEFgJ5FbhfAx/VoPJFX2bAZ8wr1qVjYcAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7gACwewl0gAABAgQIECBAgAABAgQIECBAgEA7AQFgO1stEyBAgAABAgQIECBAgAABAgQIEOguIADsXgIdIECAAAECBAgQIECAAAECBAgQINBOQADYzlbLBAgQIECAAAECBAgQIECAAAECBLoLCAC7l0AHCBAgQIAAAQIECBAgQIAAAQIECLQTEAC2s9UyAQIECBAgQIAAAQIECBAgQIAAge4CAsDuJdABAgQIECBAgAABAgQIECBAgAABAu0EBIDtbLVMgAABAgQIEIDtGQEAABhvSURBVCBAgAABAgQIECBAoLuAALB7CXSAAAECBAgQIECAAAECBAgQIECAQDsBAWA7Wy0TIECAAAECBAgQIECAAAECBAgQ6C4gAOxeAh0gQIAAAQIECBAgQIAAAQIECBAg0E5AANjOVssECBAgQIAAAQIECBAgQIAAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7gACwewl0gAABAgQIECBAgAABAgQIECBAgEA7AQFgO1stEyBAgAABAgQIECBAgAABAgQIEOguIADsXgIdIECAAAECBAgQIECAAAECBAgQINBOQADYzlbLBAgQIECAAAECBAgQIECAAAECBLoLCAC7l0AHCBAgQIAAAQIECBAgQIAAAQIECLQTEAC2s9UyAQIECBAgQIAAAQIECBAgQIAAge4CAsDuJdABAgQIECBAgAABAgQIECBAgAABAu0EBIDtbLVMgAABAgQIECBAgAABAgQIECBAoLuAALB7CXSAAAECBAgQIECAAAECBAgQIECAQDsBAWA7Wy0TIECAAAECBAgQIECAAAECBAgQ6C4gAOxeAh0gQIAAAQIECBAgQIAAAQIECBAg0E5AANjOVssECBAgQIAAAQIECBAgQIAAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7gACwewl0gAABAgQIECBAgAABAgQIECBAgEA7AQFgO1stEyBAgAABAgQIECBAgAABAgQIEOguIADsXgIdIECAAAECBAgQIECAAAECBAgQINBOQADYzlbLBAgQIECAAAECBAgQIECAAAECBLoLCAC7l0AHCBAgQIAAAQIECBAgQIAAAQIECLQTEAC2s9UyAQIECBAgQIAAAQIECBAgQIAAge4CAsDuJdABAgQIECBAgAABAgQIECBAgAABAu0EBIDtbLVMgAABAgQIECBAgAABAgQIECBAoLuAALB7CXSAAAECBAgQIECAAAECBAgQIECAQDsBAWA7Wy0TIECAAAECBAgQIECAAAECBAgQ6C4gAOxeAh0gQIAAAQIECBAgQIAAAQIECBAg0E5AANjOVssECBAgQIAAAQIECBAgQIAAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7gACwewl0gAABAgQIECBAgAABAgQIECBAgEA7AQFgO1stEyBAgAABAgQIECBAgAABAgQIEOguIADsXgIdIECAAAECBAgQIECAAAECBAgQINBOQADYzlbLBAgQIECAAAECBAgQIECAAAECBLoLCAC7l0AHCBAgQIAAAQIECBAgQIAAAQIECLQTEAC2s9UyAQIECBAgQIAAAQIECBAgQIAAge4CAsDuJdABAgQIECBAgAABAgQIECBAgAABAu0EBIDtbLVMgAABAgQIECBAgAABAgQIECBAoLuAALB7CXSAAAECBAgQIECAAAECBAgQIECAQDsBAWA7Wy0TIECAAAECBAgQIECAAAECBAgQ6C4gAOxeAh0gQIAAAQIECBAgQIAAAQIECBAg0E5AANjOVssECBAgQIAAAQIECBAgQIAAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7gACwewl0gAABAgQIECBAgAABAgQIECBAgEA7AQFgO1stEyBAgAABAgQIECBAgAABAgQIEOguIADsXgIdIECAAAECBAgQIECAAAECBAgQINBOQADYzlbLBAgQIECAAAECBAgQIECAAAECBLoLCAC7l0AHCBAgQIAAAQIECBAgQIAAAQIECLQTEAC2s9UyAQIECBAgQIAAAQIECBAgQIAAge4CAsDuJdABAgQIECBAgAABAgQIECBAgAABAu0EBIDtbLVMgAABAgQIECBAgAABAgQIECBAoLuAALB7CXSAAAECBAgQIECAAAECBAgQIECAQDsBAWA7Wy0TIECAAAECBAgQIECAAAECBAgQ6C4gAOxeAh0gQIAAAQIECBAgQIAAAQIECBAg0E5AANjOVssECBAgQIAAAQIECBAgQIAAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7gACwewl0gAABAgQIECBAgAABAgQIECBAgEA7AQFgO1stEyBAgAABAgQIECBAgAABAgQIEOguIADsXgIdIECAAAECBAgQIECAAAECBAgQINBOQADYzlbLBAgQIECAAAECBAgQIECAAAECBLoLCAC7l0AHCBAgQIAAAQIECBAgQIAAAQIECLQTEAC2s9UyAQIECBAgQIAAAQIECBAgQIAAge4CAsDuJdABAgQIECBAgAABAgQIECBAgAABAu0EBIDtbLVMgAABAgQIECBAgAABAgQIECBAoLuAALB7CXSAAAECBAgQIECAAAECBAgQIECAQDsBAWA7Wy0TIECAAAECBAgQIECAAAECBAgQ6C4gAOxeAh0gQIAAAQIECBAgQIAAAQIECBAg0E5AANjOVssECBAgQIAAAQIECBAgQIAAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7gACwewl0gAABAgQIECBAgAABAgQIECBAgEA7AQFgO1stEyBAgAABAgQIECBAgAABAgQIEOguIADsXgIdIECAAAECBAgQIECAAAECBAgQINBOQADYzlbLBAgQIECAAAECBAgQIECAAAECBLoLCAC7l0AHCBAgQIAAAQIECBAgQIAAAQIECLQTEAC2s9UyAQIECBAgQIAAAQIECBAgQIAAge4CAsDuJdABAgQIECBAgAABAgQIECBAgAABAu0EBIDtbLVMgAABAgQIECBAgAABAgQIECBAoLuAALB7CXSAAAECBAgQIECAAAECBAgQIECAQDsBAWA7Wy0TIECAAAECBAgQIECAAAECBAgQ6C4gAOxeAh0gQIAAAQIECBAgQIAAAQIECBAg0E5AANjOVssECBAgQIAAAQIECBAgQIAAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7gACwewl0gAABAgQIECBAgAABAgQIECBAgEA7AQFgO1stEyBAgAABAgQIECBAgAABAgQIEOguIADsXgIdIECAAAECBAgQIECAAAECBAgQINBOQADYzlbLBAgQIECAAAECBAgQIECAAAECBLoLCAC7l0AHCBAgQIAAAQIECBAgQIAAAQIECLQTEAC2s9UyAQIECBAgQIAAAQIECBAgQIAAge4CAsDuJdABAgQIECBAgAABAgQIECBAgAABAu0EBIDtbLVMgAABAgQIECBAgAABAgQIECBAoLuAALB7CXSAAAECBAgQIECAAAECBAgQIECAQDsBAWA7Wy0TIECAAAECBAgQIECAAAECBAgQ6C4gAOxeAh0gQIAAAQIECBAgQIAAAQIECBAg0E5AANjOVssECBAgQIAAAQIECBAgQIAAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7gACwewl0gAABAgQIECBAgAABAgQIECBAgEA7AQFgO1stEyBAgAABAgQIECBAgAABAgQIEOguIADsXgIdIECAAAECBAgQIECAAAECBAgQINBOQADYzlbLBAgQIECAAAECBAgQIECAAAECBLoLCAC7l0AHCBAgQIAAAQIECBAgQIAAAQIECLQTEAC2s9UyAQIECBAgQIAAAQIECBAgQIAAge4CAsDuJdABAgQIECBAgAABAgQIECBAgAABAu0EBIDtbLVMgAABAgQIECBAgAABAgQIECBAoLuAALB7CXSAAAECBAgQIECAAAECBAgQIECAQDsBAWA7Wy0TIECAAAECBAgQIECAAAECBAgQ6C4gAOxeAh0gQIAAAQIECBAgQIAAAQIECBAg0E5AANjOVssECBAgQIAAAQIECBAgQIAAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7gACwewl0gAABAgQIECBAgAABAgQIECBAgEA7AQFgO1stEyBAgAABAgQIECBAgAABAgQIEOguIADsXgIdIECAAAECBAgQIECAAAECBAgQINBOQADYzlbLBAgQIECAAAECBAgQIECAAAECBLoLCAC7l0AHCBAgQIAAAQIECBAgQIAAAQIECLQTEAC2s9UyAQIECBAgQIAAAQIECBAgQIAAge4CAsDuJdABAgQIECBAgAABAgQIECBAgAABAu0EBIDtbLVMgAABAgQIECBAgAABAgQIECBAoLuAALB7CXSAAAECBAgQIECAAAECBAgQIECAQDsBAWA7Wy0TIECAAAECBAgQIECAAAECBAgQ6C4gAOxeAh0gQIAAAQIECBAgQIAAAQIECBAg0E5AANjOVssECBAgQIAAAQIECBAgQIAAAQIEugsIALuXQAcIECBAgAABAgQIECBAgAABAgQItBMQALaz1TIBAgQIECBAgAABAgQIECBAgACB7gICwO4l0AECBAgQIECAAAECBAgQIECAAAEC7QQEgO1stUyAAAECBAgQIECAAAECBAgQIECgu4AAsHsJdIAAAQIECBAgQIAAAQIECBAgQIBAOwEBYDtbLRMgQIAAAQIECBAgQIAAAQIECBDoLiAA7F4CHSBAgAABAgQIECBAgAABAgQIECDQTkAA2M5WywQIECBAgAABAgQIECBAgAABAgS6CwgAu5dABwgQIECAAAECBAgQIECAAAECBAi0ExAAtrPVMgECBAgQIECAAAECBAgQIECAAIHuAgLA7iXQAQIECBAgQIAAAQIECBAgQIAAAQLtBASA7Wy1TIAAAQIECBAgQIAAAQIECBAgQKC7wP8DiRCZ29WGRzgAAAAASUVORK5CYII="; diff --git a/stories/form/form-e-signature/form-e-signature.mdx b/stories/form/form-e-signature/form-e-signature.mdx new file mode 100644 index 000000000..18d295d95 --- /dev/null +++ b/stories/form/form-e-signature/form-e-signature.mdx @@ -0,0 +1,39 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../../storybook-common"; +import * as FormESignatureStories from "./form-e-signature.stories"; +import { PropsTable } from "./props-table"; + + + +Form.ESignature + +Overview + +A field that allows a user to draw a signature via a drawing pad. + +```tsx +import { Form } from "@lifesg/react-design-system/form"; +``` + + + +Rendering in grid layouts + +You can also specify [ColDiv's](/docs/getting-started-layout-column-divs--docs) +column props to span across the specified columns in grid layouts. + + + +Using the field as a standalone + +In the case that you require the e-signature field as a standalone, you can do this. + +```tsx +import { ESignature } from "@lifesg/react-design-system/e-signature"; +``` + + + +Component API + + diff --git a/stories/form/form-e-signature/form-e-signature.stories.tsx b/stories/form/form-e-signature/form-e-signature.stories.tsx new file mode 100644 index 000000000..39ee1a2eb --- /dev/null +++ b/stories/form/form-e-signature/form-e-signature.stories.tsx @@ -0,0 +1,69 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Form } from "src/form"; +import { ESignature } from "src/e-signature"; +import { Layout } from "src/layout"; +import { StoryContainer } from "../../storybook-common"; +import { Container } from "../shared-doc-elements"; +import { signatureDataURL } from "./doc-elements"; + +type Component = typeof Form.ESignature; +type StandaloneComponent = typeof ESignature; + +const meta: Meta = { + title: "Form/E-Signature", + component: Form.ESignature, +}; + +export default meta; + +export const Default: StoryObj = { + render: () => { + return ( + + + + + + + + + ); + }, +}; + +export const RenderingInGridLayout: StoryObj = { + render: () => { + return ( + + + + + ); + }, +}; + +export const StandaloneUsage: StoryObj = { + render: () => { + return ( + + + + ); + }, +}; diff --git a/stories/form/form-e-signature/props-table.tsx b/stories/form/form-e-signature/props-table.tsx new file mode 100644 index 000000000..2920f2a6d --- /dev/null +++ b/stories/form/form-e-signature/props-table.tsx @@ -0,0 +1,58 @@ +import React from "react"; +import { ApiTable } from "../../storybook-common/api-table"; +import { ApiTableSectionProps } from "../../storybook-common/api-table/types"; +import { SHARED_FORM_PROPS_DATA } from "../shared-props-data"; + +const STRING_FORMAT = <>string format (PNG format encoded in base64); + +const DATA: ApiTableSectionProps[] = [ + { + name: "E-signature specific props", + attributes: [ + { + name: "className", + description: "The class selector of the component", + propTypes: ["string"], + }, + { + name: "data-testid", + description: "The test identifier of the component", + propTypes: ["string"], + }, + { + name: "description", + description: + "The description to be displayed below the signature area", + propTypes: ["string"], + }, + { + name: "errorMessage", + description: "Error message to be displayed below description", + propTypes: ["boolean"], + }, + { + name: "id", + description: "The unique identifier of the component", + propTypes: ["string"], + }, + { + name: "value", + description: <>The signature data in {STRING_FORMAT}, + propTypes: ["string"], + }, + { + name: "onChange", + description: ( + <> + Called when a selection is made. Returns the signature + data in {STRING_FORMAT} + + ), + propTypes: ["(value: string) => void"], + }, + ], + }, + ...SHARED_FORM_PROPS_DATA, +]; + +export const PropsTable = () => ; From 7298535f5e9b7efb63a0e3a3df06dd17c55cb765 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Fri, 14 Jun 2024 14:13:01 +0800 Subject: [PATCH 0193/1949] [CCUBE-1414][WL] add e-signature unit tests --- tests/e-signature/e-signature.spec.tsx | 106 +++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 tests/e-signature/e-signature.spec.tsx diff --git a/tests/e-signature/e-signature.spec.tsx b/tests/e-signature/e-signature.spec.tsx new file mode 100644 index 000000000..4d87fd472 --- /dev/null +++ b/tests/e-signature/e-signature.spec.tsx @@ -0,0 +1,106 @@ +import { fireEvent, render, screen } from "@testing-library/react"; +import { ESignature } from "../../src/e-signature"; + +// ============================================================================= +// UNIT TESTS +// ============================================================================= +describe("ESignature", () => { + it("should render the default component", () => { + render(); + + expect(getAddSignatureButton()).toBeInTheDocument(); + }); + + it("should render the component with value", () => { + render(); + + expect(screen.getByAltText("Signature preview")).toHaveAttribute( + "src", + PNG_BASE64 + ); + }); + + it("should show edit button instead of add signature button if field has a value", () => { + render(); + + expect(getAddSignatureButton(true)).not.toBeInTheDocument(); + expect(getEditSignatureButton()).toBeInTheDocument(); + }); + + it("should show signature modal on clicking add signature button", () => { + render(); + fireEvent.click(getAddSignatureButton()); + + expect(getSignatureModal()).toBeVisible(); + }); + + it("should show signature modal on clicking edit button", () => { + render(); + fireEvent.click(getEditSignatureButton()); + + expect(getSignatureModal()).toBeVisible(); + }); + + it("should dismiss the signature modal, call onChange callback and show the signature preview on clicking save button", () => { + const changeFn = jest.fn(); + render(); + + fireEvent.click(getAddSignatureButton()); + drawSignature(); + fireEvent.click(screen.getByRole("button", { name: "Save" })); + + expect(getSignatureModal()).not.toBeVisible(); + expect(getAddSignatureButton(true)).not.toBeInTheDocument(); + expect(getEditSignatureButton()).toBeInTheDocument(); + expect(changeFn).toHaveBeenCalled(); + expect(screen.getByAltText("Signature preview")).toBeInTheDocument(); + }); + + it("should dismiss the signature modal and discard unsaved changes on clicking cross button in modal", () => { + render(); + + fireEvent.click(getEditSignatureButton()); + drawSignature(); + fireEvent.click(screen.getByTestId("close-button")); + + expect(screen.getByAltText("Signature preview")).toHaveAttribute( + "src", + PNG_BASE64 + ); + }); + + it("should clear the field value on clicking clear button and save button subsequently", () => { + render(); + + fireEvent.click(getAddSignatureButton()); + drawSignature(); + fireEvent.click(screen.getByRole("button", { name: "Clear" })); + fireEvent.click(screen.getByRole("button", { name: "Save" })); + + expect(getSignatureModal()).not.toBeVisible(); + expect(getAddSignatureButton()).toBeInTheDocument(); + }); +}); + +// ============================================================================= +// HELPER FUNCTIONS +// ============================================================================= +const getAddSignatureButton = (isQuery = false) => + screen[!isQuery ? "getByRole" : "queryByRole"]("button", { + name: "Add signature", + }); +const getEditSignatureButton = () => + screen.getByRole("button", { name: "Edit signature" }); +const getSignatureModal = () => screen.queryByTestId("signature-modal"); + +const drawSignature = () => { + const canvas = document.querySelector(".upper-canvas"); + fireEvent.mouseDown(canvas, { clientX: 20, clientY: 20 }); + fireEvent.mouseMove(canvas, { clientX: 100, clientY: 100 }); + fireEvent.mouseUp(canvas, { clientX: 120, clientY: 120 }); +}; +// ============================================================================= +// CONSTANTS +// ============================================================================= +const PNG_BASE64 = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAA1JREFUGFdj+GdT9x8ABqwCuJzKui8AAAAASUVORK5CYII="; From 030876477ee512b06d1f0474992e81cf5136a679 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Wed, 19 Jun 2024 15:38:35 +0800 Subject: [PATCH 0194/1949] [CCUBE-1414][WL] update react-icons to v1.6.0 --- package-lock.json | 44 ++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0e1e72856..932c086fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "@babel/preset-typescript": "^7.16.7", "@dnd-kit/core": "^6.0.8", "@dnd-kit/sortable": "^7.0.2", - "@lifesg/react-icons": "^1.5.0", + "@lifesg/react-icons": "^1.6.0", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-image": "^3.0.3", "@rollup/plugin-json": "^6.1.0", @@ -4931,9 +4931,9 @@ } }, "node_modules/@lifesg/react-icons": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@lifesg/react-icons/-/react-icons-1.5.0.tgz", - "integrity": "sha512-ixwbGt+hbm4RL+7g2p8r3RfCk4oX8nji42MDYw+3ymhPjqfJttZBEvNqyQsPR2cmhLTcauDJfDdNawO/oQgvUQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@lifesg/react-icons/-/react-icons-1.6.0.tgz", + "integrity": "sha512-Kvb5FcUBRsnak+psYGd8WQ06YeTqKpOq7ecNpautktnSXZDU6OziuAKPsvBNIIqO4e6T9CftL4wCfxCzayftvQ==", "dev": true, "peerDependencies": { "react": "^17.0.2 || ^18.0.0", @@ -6295,9 +6295,9 @@ } }, "node_modules/@react-native-community/cli-server-api/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", "dev": true, "peer": true, "dependencies": { @@ -7026,9 +7026,9 @@ } }, "node_modules/@react-native/dev-middleware/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", "dev": true, "peer": true, "dependencies": { @@ -8547,9 +8547,9 @@ } }, "node_modules/@storybook/core-server/node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -17944,9 +17944,9 @@ } }, "node_modules/fabric/node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "optional": true, "engines": { "node": ">=10.0.0" @@ -34095,9 +34095,9 @@ } }, "node_modules/react-spring/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", "dev": true, "peer": true, "dependencies": { @@ -39295,9 +39295,9 @@ } }, "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "engines": { "node": ">=8.3.0" diff --git a/package.json b/package.json index 58d2a016c..85899a30a 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@babel/preset-typescript": "^7.16.7", "@dnd-kit/core": "^6.0.8", "@dnd-kit/sortable": "^7.0.2", - "@lifesg/react-icons": "^1.5.0", + "@lifesg/react-icons": "^1.6.0", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-image": "^3.0.3", "@rollup/plugin-json": "^6.1.0", From f2c87d0e8da729852adefa53ec75cc78f15886ce Mon Sep 17 00:00:00 2001 From: Wei Li Date: Wed, 19 Jun 2024 17:03:43 +0800 Subject: [PATCH 0195/1949] [CCUBE-1414][WL] update e-signature typings - barrel export - move internal typings out of main typing file --- src/e-signature/e-signature-canvas.tsx | 13 +++++++++++-- src/e-signature/e-signature.tsx | 4 ++-- src/e-signature/index.ts | 1 + src/e-signature/types.ts | 12 ------------ 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/e-signature/e-signature-canvas.tsx b/src/e-signature/e-signature-canvas.tsx index 7c80f2fee..33a8f5db6 100644 --- a/src/e-signature/e-signature-canvas.tsx +++ b/src/e-signature/e-signature-canvas.tsx @@ -9,12 +9,21 @@ import { } from "react"; import { useTheme } from "styled-components"; import { Color } from "../color"; +import { BaseTheme } from "../theme"; import { SignatureCanvas, SignatureCanvasContainer, } from "./e-signature.styles"; -import { ESignatureCanvasProps, ESignatureCanvasRef } from "./types"; -import { BaseTheme } from "../theme"; + +interface ESignatureCanvasProps { + baseImageDataURL?: string | undefined; + forwardedRef?: Ref | undefined; +} + +export interface ESignatureCanvasRef { + clear: VoidFunction; + export: () => string; +} const Component = ( props: ESignatureCanvasProps, diff --git a/src/e-signature/e-signature.tsx b/src/e-signature/e-signature.tsx index b48d68ca4..e13530eff 100644 --- a/src/e-signature/e-signature.tsx +++ b/src/e-signature/e-signature.tsx @@ -3,7 +3,7 @@ import { useEffect, useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; import { ButtonWithIcon } from "../button-with-icon"; import { MediaWidths } from "../media"; -import { ESignatureCanvas } from "./e-signature-canvas"; +import { ESignatureCanvas, ESignatureCanvasRef } from "./e-signature-canvas"; import { AddSignatureButton, ESignatureContainer, @@ -19,7 +19,7 @@ import { SignatureLine, SignaturePreviewImage, } from "./e-signature.styles"; -import { ESignatureCanvasRef, EsignatureProps } from "./types"; +import { EsignatureProps } from "./types"; export const ESignature = (props: EsignatureProps) => { // ============================================================================= diff --git a/src/e-signature/index.ts b/src/e-signature/index.ts index 7b214ed3f..d28231975 100644 --- a/src/e-signature/index.ts +++ b/src/e-signature/index.ts @@ -1 +1,2 @@ export * from "./e-signature"; +export * from "./types"; diff --git a/src/e-signature/types.ts b/src/e-signature/types.ts index 5093aa621..48a0fd948 100644 --- a/src/e-signature/types.ts +++ b/src/e-signature/types.ts @@ -1,5 +1,3 @@ -import { Ref } from "react"; - export interface EsignatureProps { className?: string | undefined; id?: string | undefined; @@ -9,13 +7,3 @@ export interface EsignatureProps { value?: string | undefined; onChange?: ((value: string) => void) | undefined; } - -export interface ESignatureCanvasProps { - baseImageDataURL?: string | undefined; - forwardedRef?: Ref | undefined; -} - -export interface ESignatureCanvasRef { - clear: VoidFunction; - export: () => string; -} From 1ba430a67427ed7ca1d49acab69d05e981060246 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Wed, 19 Jun 2024 17:10:01 +0800 Subject: [PATCH 0196/1949] [CCUBE-1414][WL] use semantic font weight and render as paragraph for instructions --- src/e-signature/e-signature.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/e-signature/e-signature.tsx b/src/e-signature/e-signature.tsx index e13530eff..71946d57a 100644 --- a/src/e-signature/e-signature.tsx +++ b/src/e-signature/e-signature.tsx @@ -124,7 +124,11 @@ export const ESignature = (props: EsignatureProps) => { const renderDescription = () => { if (!description) return null; - return {description}; + return ( + + {description} + + ); }; return ( From d9d01c02ae28af26743459484ca1074bb62145e1 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Wed, 19 Jun 2024 17:11:19 +0800 Subject: [PATCH 0197/1949] [CCUBE-1414][WL] update styles - use px for border-radius - use fit-content + 2rem padding for add signature button - set margin instead of padding for modal buttons in mobile landscape mode --- src/e-signature/e-signature.styles.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/e-signature/e-signature.styles.ts b/src/e-signature/e-signature.styles.ts index 6f8a0672e..7b4c503a2 100644 --- a/src/e-signature/e-signature.styles.ts +++ b/src/e-signature/e-signature.styles.ts @@ -26,12 +26,12 @@ export const SignatureArea = styled.div` Color.Neutral[5](props) )}' stroke-width='4' stroke-dasharray='8%2c 8' stroke-dashoffset='8' stroke-linecap='round'/%3e%3c/svg%3e");`}; background-color: ${Color.Neutral[8]}; - border-radius: 0.25rem; + border-radius: 4px; height: 14.125rem; `; export const AddSignatureButton = styled(Button.Default)` - max-width: 10.875rem; - width: 100%; + width: fit-content; + padding: 0 2rem; margin: 0 2rem; `; export const EditSignatureButton = styled(IconButton)` @@ -141,8 +141,7 @@ export const ModalButtons = styled.div` ${mobileLandscapeMediaQuery} { flex-direction: row; - padding: 0 1.25rem 1rem; - gap: 0; + margin: 1rem 1.25rem 1rem; } `; export const ModalActionButton = styled(Button.Default)` From 7e919709b29edc43c8e0dc0d93925a4ceae99d30 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Wed, 19 Jun 2024 17:26:36 +0800 Subject: [PATCH 0198/1949] [CCUBE-1414][WL] fix signature canvas to 4:3 aspect ratio in mobile --- src/e-signature/e-signature.styles.ts | 25 +++++++++++++++++++++++-- src/e-signature/e-signature.tsx | 17 ++++++++++------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/e-signature/e-signature.styles.ts b/src/e-signature/e-signature.styles.ts index 7b4c503a2..a2c34451d 100644 --- a/src/e-signature/e-signature.styles.ts +++ b/src/e-signature/e-signature.styles.ts @@ -99,10 +99,8 @@ export const ModalTitle = styled.h4` } `; export const ESignatureContainer = styled.div` - position: relative; width: 100%; height: 20rem; - background: ${Color.Neutral[6]}; border-radius: 0.75rem; overflow: hidden; @@ -110,6 +108,29 @@ export const ESignatureContainer = styled.div` border-radius: 0; flex: 1; } + + ${mobileLandscapeMediaQuery} { + background: ${Color.Neutral[7]}; + } +`; +export const ESignatureDrawable = styled.div` + position: relative; + width: 100%; + height: 100%; + background: ${Color.Neutral[6]}; + margin: auto; + + ${mobileMediaQuery} { + aspect-ratio: 4/3; + } + ${MediaQuery.MaxWidth.mobileL} { + width: 100%; + height: auto; + } + ${mobileLandscapeMediaQuery} { + width: auto; + height: 100%; + } `; export const SignatureLine = styled.div` position: absolute; diff --git a/src/e-signature/e-signature.tsx b/src/e-signature/e-signature.tsx index 71946d57a..c34904472 100644 --- a/src/e-signature/e-signature.tsx +++ b/src/e-signature/e-signature.tsx @@ -7,6 +7,7 @@ import { ESignatureCanvas, ESignatureCanvasRef } from "./e-signature-canvas"; import { AddSignatureButton, ESignatureContainer, + ESignatureDrawable, EditSignatureButton, GrowContainer, Instructions, @@ -91,13 +92,15 @@ export const ESignature = (props: EsignatureProps) => { setShowModal(false)}> Signature - - {showModal && ( - - )} + + + {showModal && ( + + )} + Date: Thu, 20 Jun 2024 13:59:26 +0800 Subject: [PATCH 0199/1949] [CCUBE-1414][WL] convert border-radius to px --- src/e-signature/e-signature.styles.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/e-signature/e-signature.styles.ts b/src/e-signature/e-signature.styles.ts index a2c34451d..add137bbe 100644 --- a/src/e-signature/e-signature.styles.ts +++ b/src/e-signature/e-signature.styles.ts @@ -101,7 +101,7 @@ export const ModalTitle = styled.h4` export const ESignatureContainer = styled.div` width: 100%; height: 20rem; - border-radius: 0.75rem; + border-radius: 12px; overflow: hidden; ${mobileMediaQuery} { From 5263583db1ba18cc936edce8ef4364c1f94f6f3e Mon Sep 17 00:00:00 2001 From: Anu Mutyala Date: Thu, 20 Jun 2024 16:44:00 +0800 Subject: [PATCH 0200/1949] [MOL-15775][AM] Remove event.prevant default to fix the selection working only when its double clicked. --- src/toggle/toggle.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index a331cd287..bfc2ddc41 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -79,7 +79,6 @@ export const Toggle = ({ // EVENT HANDLERS // ============================================================================= const handleOnChange = (event: React.ChangeEvent) => { - event?.preventDefault(); if (!disabled) { if (onChange) { onChange(event); From b096c4c9a535dde569fd8fa7785eaf5456b829d3 Mon Sep 17 00:00:00 2001 From: Ruth Shirin Date: Fri, 21 Jun 2024 10:32:48 +0800 Subject: [PATCH 0201/1949] [CCUBE-1400][SR] Amended the dismiss button styles to use align-self, removed the uneeded margin. --- src/toast/toast.styles.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index d5dc8f598..d404a031f 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -69,7 +69,6 @@ export const ContentWrapper = styled.div` gap: 2rem; flex: 1; justify-content: space-between; - margin-right: 4rem; ${MediaQuery.MaxWidth.mobileL} { display: flex; @@ -138,7 +137,7 @@ export const ActionButton = styled(Button.Small)` export const DismissButton = styled(ClickableIcon)` padding: 0.75rem; margin: -0.75rem; - align-items: stretch; + align-self: stretch; ${(props) => { return css` From 699a7e5b92ff54f8cf6a68c308d552d9690c0de9 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Fri, 21 Jun 2024 14:15:01 +0800 Subject: [PATCH 0202/1949] [CCUBE-1414][WL] scale signature image dynamically according to the canvas and image sizes --- src/e-signature/e-signature-canvas.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/e-signature/e-signature-canvas.tsx b/src/e-signature/e-signature-canvas.tsx index 33a8f5db6..f4f648fe8 100644 --- a/src/e-signature/e-signature-canvas.tsx +++ b/src/e-signature/e-signature-canvas.tsx @@ -120,7 +120,7 @@ const Component = ( fabricCanvas.current?.clear(); img.selectable = false; img.hoverCursor = "default"; - img.scale(0.5); + img.scale(fabricCanvas.current.width / img.width); const viewport = fabricCanvas.current.viewportTransform; img.left = -viewport[4]; From 20dcc5f38ec2c2be77e1e43028ac2bc04b2a54f6 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 21 Jun 2024 19:55:33 +0800 Subject: [PATCH 0203/1949] [MISC][RL] Update documentation --- stories/form/form-e-signature/props-table.tsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/stories/form/form-e-signature/props-table.tsx b/stories/form/form-e-signature/props-table.tsx index 2920f2a6d..7920d1535 100644 --- a/stories/form/form-e-signature/props-table.tsx +++ b/stories/form/form-e-signature/props-table.tsx @@ -25,11 +25,6 @@ const DATA: ApiTableSectionProps[] = [ "The description to be displayed below the signature area", propTypes: ["string"], }, - { - name: "errorMessage", - description: "Error message to be displayed below description", - propTypes: ["boolean"], - }, { name: "id", description: "The unique identifier of the component", From b45046980c0610883609b0c862b5577426ac6516 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 21 Jun 2024 20:41:23 +0800 Subject: [PATCH 0204/1949] [MISC][RL] Include component in top-level export --- src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.ts b/src/index.ts index 34f925247..c8f284f82 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,6 +17,7 @@ export * from "./date-range-input"; export * from "./design-token"; export * from "./divider"; export * from "./drawer"; +export * from "./e-signature"; export * from "./error-display"; export * from "./feedback-rating"; export * from "./file-upload"; From e6709bc3c403a313170b97ddcdefc7f012ad3df9 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 21 Jun 2024 20:07:09 +0800 Subject: [PATCH 0205/1949] [MISC][RL] Use browser module resolutions --- rollup.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rollup.config.js b/rollup.config.js index 05b6a08be..a5ed448fc 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -12,7 +12,7 @@ import { getFolders } from "./scripts/build-util"; export const plugins = [ peerDepsExternal(), // Add the externals for me. [react, react-dom, styled-components] - nodeResolve(), // Locates modules in the project's node_modules directory + nodeResolve({ browser: true }), // Locates modules in the project's node_modules directory commonjs(), // converts CommonJS to ES6 modules typescript({ useTsconfigDeclarationDir: true, @@ -87,7 +87,7 @@ export default [ }, ], plugins, - external: ["react", "react-dom", "styled-components"], + external: ["react", "react-dom", "styled-components", "fabric"], }, ...folderBuildConfigs, ]; From 2208a89108b736379399671d6773d498078d9864 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 21 Jun 2024 17:55:25 +0800 Subject: [PATCH 0206/1949] [MISC][RL] Bump v2.6.0-canary.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 932c086fe..d901e3a00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.4", + "version": "2.6.0-canary.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.4", + "version": "2.6.0-canary.5", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", diff --git a/package.json b/package.json index 85899a30a..c43ce3b84 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.4", + "version": "2.6.0-canary.5", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 2fd071512c6e149f1d1c973fda8a222e71703070 Mon Sep 17 00:00:00 2001 From: Keith Tan Date: Mon, 24 Jun 2024 09:49:14 +0800 Subject: [PATCH 0207/1949] [MISC][KT] Add stories for two tier nested select --- .../form-nested-multi-select.stories.tsx | 9 ++- .../form-nested-select.stories.tsx | 6 +- .../form-nested-select/nested-data-list.ts | 69 +++++++++++++++++++ 3 files changed, 82 insertions(+), 2 deletions(-) diff --git a/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx b/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx index 31bb9b7bc..d7efed4d5 100644 --- a/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx +++ b/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx @@ -4,7 +4,10 @@ import { Form } from "src/form"; import { InputNestedMultiSelect } from "src/input-nested-multi-select"; import { Layout } from "src/layout"; import { StoryContainer } from "../../storybook-common"; -import { options } from "../form-nested-select/nested-data-list"; +import { + options, + twoTierOptions, +} from "../form-nested-select/nested-data-list"; import { Container } from "../shared-doc-elements"; type Component = typeof Form.NestedMultiSelect; @@ -37,6 +40,10 @@ export const Default: StoryObj = { setSelectedKeyPaths(keyPaths); }} /> + = { options={options} selectableCategory={true} /> + Date: Mon, 24 Jun 2024 18:18:03 +0800 Subject: [PATCH 0208/1949] [MISC][RL] Lazy load canvas component --- rollup.config.js | 11 +++++++---- src/e-signature/e-signature.tsx | 23 +++++++++++++++-------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/rollup.config.js b/rollup.config.js index a5ed448fc..ddf8db9a0 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -57,10 +57,11 @@ const folderBuildConfigs = getFolders("./src").map((folder) => { return { input: `src/${folder}/index.ts`, output: { - file: `dist/${folder}/index.js`, + dir: `dist/${folder}`, sourcemap: true, exports: "named", format: "esm", + chunkFileNames: "chunks/[name].[hash].js", }, plugins: subfolderPlugins(folder), external: ["react", "react-dom", "styled-components"], @@ -72,22 +73,24 @@ export default [ input: "src/index.ts", output: [ { - file: pkg.module, + dir: "dist", format: "esm", sourcemap: true, exports: "named", interop: "compat", + chunkFileNames: "chunks/[name].[hash].js", }, { - file: pkg.main, + dir: "dist/cjs", format: "cjs", sourcemap: true, exports: "named", interop: "compat", + chunkFileNames: "chunks/[name].[hash].js", }, ], plugins, - external: ["react", "react-dom", "styled-components", "fabric"], + external: ["react", "react-dom", "styled-components"], }, ...folderBuildConfigs, ]; diff --git a/src/e-signature/e-signature.tsx b/src/e-signature/e-signature.tsx index c34904472..d8c97a609 100644 --- a/src/e-signature/e-signature.tsx +++ b/src/e-signature/e-signature.tsx @@ -1,9 +1,9 @@ import { EraserIcon, PencilIcon } from "@lifesg/react-icons"; -import { useEffect, useRef, useState } from "react"; +import { Suspense, lazy, useEffect, useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; import { ButtonWithIcon } from "../button-with-icon"; import { MediaWidths } from "../media"; -import { ESignatureCanvas, ESignatureCanvasRef } from "./e-signature-canvas"; +import { ESignatureCanvasRef } from "./e-signature-canvas"; import { AddSignatureButton, ESignatureContainer, @@ -22,6 +22,11 @@ import { } from "./e-signature.styles"; import { EsignatureProps } from "./types"; +// lazy load to fix next.js SSR errors +const ESignatureCanvas = lazy(async () => ({ + default: (await import("./e-signature-canvas")).ESignatureCanvas, +})); + export const ESignature = (props: EsignatureProps) => { // ============================================================================= // CONST, STATE, REF @@ -94,12 +99,14 @@ export const ESignature = (props: EsignatureProps) => { - {showModal && ( - - )} + + {showModal && ( + + )} + From b87fb8940af907b5cc65157c042f999b1ecc5fc5 Mon Sep 17 00:00:00 2001 From: roll Date: Tue, 18 Jun 2024 00:11:18 +0800 Subject: [PATCH 0209/1949] [MISC][RL] Remove focus hook for better control --- src/date-input/date-input.tsx | 2 ++ src/date-range-input/date-range-input.tsx | 3 +++ src/shared/dropdown-wrapper/element-with-dropdown.tsx | 7 +++---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index abb33806f..40553ffb1 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -117,6 +117,7 @@ export const DateInput = ({ break; } + nodeRef.current.focus(); setCalendarOpen(false); performOnBlurHandler(); }; @@ -142,6 +143,7 @@ export const DateInput = ({ const renderInput = () => { return ( { + nodeRef.current.focus(); + switch (action) { case "reset": actions.cancel(); @@ -526,6 +528,7 @@ export const DateRangeInput = ({ return ( React.ReactNode; renderDropdown: () => React.ReactNode; zIndex?: number | undefined; + clickToToggle?: boolean | undefined; } export const ElementWithDropdown = ({ @@ -36,6 +36,7 @@ export const ElementWithDropdown = ({ renderElement, renderDropdown, zIndex = 50, + clickToToggle = false, }: ElementWithDropdownProps) => { // ============================================================================= // CONST, STATE, REF @@ -76,13 +77,11 @@ export const ElementWithDropdown = ({ duration: 300, }); - const click = useClick(context, { enabled }); - const focus = useFocus(context, { enabled }); + const click = useClick(context, { enabled, toggle: clickToToggle }); const dismiss = useDismiss(context, { enabled }); const { getReferenceProps, getFloatingProps } = useInteractions([ click, - focus, dismiss, ]); From 2a51fb5223e5618b2e15683f4dad285e99efa26d Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Tue, 25 Jun 2024 14:57:46 +0800 Subject: [PATCH 0210/1949] [MISC][RL] Restore date input dismiss behaviour - For calendar with button, dismissal should reset to the initial input - Blur event should only trigger when component is totally unfocused --- src/date-input/date-input.tsx | 33 ++++++++++++++++--- .../standalone-date-input.tsx | 4 +-- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 40553ffb1..908ce7b2f 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -56,15 +56,17 @@ export const DateInput = ({ // EVENT HANDLERS // ============================================================================= const handleClose = () => { + inputRef.current.resetInput(); + setSelectedDate(initialDate); setCalendarOpen(false); performOnBlurHandler(); }; const handleDismiss = () => { inputRef.current.resetInput(); + nodeRef.current.focus(); setSelectedDate(initialDate); setCalendarOpen(false); - performOnBlurHandler(); }; const handleChange = (val: string) => { @@ -86,7 +88,19 @@ export const DateInput = ({ setInitialDate(val); if (val) { setCalendarOpen(false); - performOnBlurHandler(); + } + } + }; + + const handleSelect = (val: string) => { + setSelectedDate(val); + + if (!withButton) { + performOnChangeHandler(val); + setInitialDate(val); + if (val) { + nodeRef.current.focus(); + setCalendarOpen(false); } } }; @@ -101,6 +115,15 @@ export const DateInput = ({ } }; + const handleBlur = (e: React.FocusEvent) => { + if ( + !calendarOpen && + !nodeRef.current.contains(e.relatedTarget as Node) + ) { + performOnBlurHandler(); + } + }; + const handleHoverDayCell = (value: string) => { setHoveredDate(value); }; @@ -119,7 +142,6 @@ export const DateInput = ({ nodeRef.current.focus(); setCalendarOpen(false); - performOnBlurHandler(); }; // ============================================================================= @@ -145,6 +167,8 @@ export const DateInput = ({ diff --git a/src/shared/standalone-date-input/standalone-date-input.tsx b/src/shared/standalone-date-input/standalone-date-input.tsx index b341d3f71..9be613431 100644 --- a/src/shared/standalone-date-input/standalone-date-input.tsx +++ b/src/shared/standalone-date-input/standalone-date-input.tsx @@ -33,7 +33,7 @@ interface Props { placeholder?: string | undefined; label?: string | undefined; onChange: (value: string) => void; - onFocus: () => void; + onFocus?: (() => void) | undefined; onBlur?: ((valid: boolean) => void) | undefined; } @@ -146,7 +146,7 @@ export const Component = ( setHidePlaceholder(true); if (!focused) { - onFocus(); + onFocus?.(); } }; From a0982ab058c7ebfa812c53425b35edd14326c3ff Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Tue, 25 Jun 2024 21:39:25 +0800 Subject: [PATCH 0211/1949] [MISC][RL] Update filter example --- stories/filter/doc-elements.tsx | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/stories/filter/doc-elements.tsx b/stories/filter/doc-elements.tsx index 1030f3523..692f87b01 100644 --- a/stories/filter/doc-elements.tsx +++ b/stories/filter/doc-elements.tsx @@ -41,18 +41,7 @@ export const SearchFilter = ({ mode, value, onChange }: Props) => { }; export const DateFilter = ({ value, onChange }: Props) => { - const [isFocused, setIsFocused] = useState(false); - - return ( -
    - onChange(date)} - onFocus={() => setIsFocused(true)} - onBlur={() => setIsFocused(false)} - /> -
    - ); + return onChange(date)} />; }; export const TextFilter = () => { From c79a4b84718b8d84415d9b7b935afd60976318aa Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Tue, 25 Jun 2024 23:23:35 +0800 Subject: [PATCH 0212/1949] [MISC][RL] Maintain focus styling --- src/date-input/date-input.tsx | 8 ++++- src/shared/input-wrapper/input-wrapper.tsx | 37 +++++++++++++++++----- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 908ce7b2f..15f397ff5 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -39,6 +39,7 @@ export const DateInput = ({ ); const [hoveredDate, setHoveredDate] = useState(undefined); const [calendarOpen, setCalendarOpen] = useState(false); + const [focused, setFocused] = useState(false); const nodeRef = useRef(null); const inputRef = useRef(); @@ -59,6 +60,7 @@ export const DateInput = ({ inputRef.current.resetInput(); setSelectedDate(initialDate); setCalendarOpen(false); + setFocused(false); performOnBlurHandler(); }; @@ -106,9 +108,10 @@ export const DateInput = ({ }; const handleFocus = () => { - if (readOnly) return; + if (readOnly || focused) return; setCalendarOpen(true); + setFocused(true); if (onFocus) { onFocus(); @@ -117,9 +120,11 @@ export const DateInput = ({ const handleBlur = (e: React.FocusEvent) => { if ( + focused && !calendarOpen && !nodeRef.current.contains(e.relatedTarget as Node) ) { + setFocused(false); performOnBlurHandler(); } }; @@ -171,6 +176,7 @@ export const DateInput = ({ onFocus={handleFocus} $disabled={disabled} $readOnly={readOnly} + $focused={focused} $error={error} id={id} data-testid={otherProps["data-testid"]} diff --git a/src/shared/input-wrapper/input-wrapper.tsx b/src/shared/input-wrapper/input-wrapper.tsx index 26da961ea..0a0a955eb 100644 --- a/src/shared/input-wrapper/input-wrapper.tsx +++ b/src/shared/input-wrapper/input-wrapper.tsx @@ -12,6 +12,7 @@ export interface InputWrapperStyleProps { $disabled?: boolean | undefined; $error?: boolean | undefined; $readOnly?: boolean | undefined; + $focused?: boolean | undefined; $position?: "left" | "right" | undefined; } @@ -22,6 +23,26 @@ export interface InputStyleProps { // ============================================================================= // STYLING // ============================================================================= +const defaultFocusCss = css` + border: 1px solid ${Color.Accent.Light[1]}; + box-shadow: ${DesignToken.InputBoxShadow}; +`; + +const readOnlyFocusCss = css` + border: 1px solid transparent; + box-shadow: none; +`; + +const disabledFocusCss = css` + border: 1px solid ${Color.Neutral[5]}; + box-shadow: none; +`; + +const errorFocusCss = css` + border: 1px solid ${Color.Validation.Red.Border}; + box-shadow: ${DesignToken.InputErrorBoxShadow}; +`; + export const InputWrapper = styled.div` display: flex; align-items: center; @@ -36,9 +57,9 @@ export const InputWrapper = styled.div` props.$position === "right" ? "row-reverse" : "row"}; :focus-within { - border: 1px solid ${Color.Accent.Light[1]}; - box-shadow: ${DesignToken.InputBoxShadow}; + ${defaultFocusCss} } + ${(props) => props.$focused && defaultFocusCss} ${(props) => { if (props.$readOnly) { @@ -48,9 +69,9 @@ export const InputWrapper = styled.div` background: transparent !important; :focus-within { - border: 1px solid transparent; - box-shadow: none; + ${readOnlyFocusCss} } + ${props.$focused && readOnlyFocusCss} `; } else if (props.$disabled) { return css` @@ -58,18 +79,18 @@ export const InputWrapper = styled.div` cursor: not-allowed; :focus-within { - border: 1px solid ${Color.Neutral[5]}; - box-shadow: none; + ${disabledFocusCss} } + ${props.$focused && disabledFocusCss} `; } else if (props.$error) { return css` border: 1px solid ${Color.Validation.Red.Border}; :focus-within { - border: 1px solid ${Color.Validation.Red.Border}; - box-shadow: ${DesignToken.InputErrorBoxShadow}; + ${errorFocusCss} } + ${props.$focused && errorFocusCss} `; } }} From a6d28614b9b301ac8b20aeab6b354932fedac351 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 27 Jun 2024 12:12:51 +0800 Subject: [PATCH 0213/1949] [MISC][RL] On focus, ensure calendar is open but only call onFocus once --- src/date-input/date-input.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 15f397ff5..b978013c9 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -108,9 +108,12 @@ export const DateInput = ({ }; const handleFocus = () => { - if (readOnly || focused) return; + if (readOnly) return; setCalendarOpen(true); + + if (focused) return; + setFocused(true); if (onFocus) { From 832818c0d2793fbd728b0d38f2cbe8dba4c50de8 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 27 Jun 2024 12:14:54 +0800 Subject: [PATCH 0214/1949] [MISC][RL] Ensure invalid dates are reset on blur --- src/date-input/date-input.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index b978013c9..33bde27ee 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -127,6 +127,8 @@ export const DateInput = ({ !calendarOpen && !nodeRef.current.contains(e.relatedTarget as Node) ) { + inputRef.current.resetInput(); + setSelectedDate(initialDate); setFocused(false); performOnBlurHandler(); } From 9a3b69176879fe0ec0f6558f6eb09dc63f394ab2 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 27 Jun 2024 18:40:38 +0800 Subject: [PATCH 0215/1949] [MISC][RL] Apply focus and blur behaviour to date range input --- src/date-range-input/date-range-input.tsx | 69 ++++++++++++++++--- .../standalone-date-input.tsx | 6 +- 2 files changed, 63 insertions(+), 12 deletions(-) diff --git a/src/date-range-input/date-range-input.tsx b/src/date-range-input/date-range-input.tsx index 11f95f8d8..c6fdf5a95 100644 --- a/src/date-range-input/date-range-input.tsx +++ b/src/date-range-input/date-range-input.tsx @@ -32,6 +32,7 @@ interface DateRangeInputState { calendarOpen: boolean; isStartDirty: boolean; isEndDirty: boolean; + focused: boolean; } const INITIAL_STATE: DateRangeInputState = { @@ -43,6 +44,7 @@ const INITIAL_STATE: DateRangeInputState = { calendarOpen: false, isStartDirty: false, isEndDirty: false, + focused: false, }; export const DateRangeInput = ({ @@ -85,6 +87,7 @@ export const DateRangeInput = ({ calendarOpen, isStartDirty, isEndDirty, + focused, }, actions, ] = useStateActions({ @@ -99,6 +102,16 @@ export const DateRangeInput = ({ calendarOpen: false, isStartDirty: false, isEndDirty: false, + focused: false, + }), + dismiss: (state) => ({ + ...state, + selectedStart: state.initialStart, + selectedEnd: state.initialEnd, + currentFocus: "none", + calendarOpen: false, + isStartDirty: false, + isEndDirty: false, }), changeStart: (state, val: string) => ({ ...state, @@ -128,6 +141,7 @@ export const DateRangeInput = ({ ? "start" : currentFocus, calendarOpen: !readOnly, + focused: true, }), cancel: (state) => ({ ...state, @@ -212,7 +226,10 @@ export const DateRangeInput = ({ }); onChange?.(selectedStart, selectedEnd); } else { - actions.blur(); + actions.dismiss(); + nodeRef.current.focus(); + startInputRef.current.resetPlaceholder(); + endInputRef.current.resetPlaceholder(); } } }; @@ -229,7 +246,11 @@ export const DateRangeInput = ({ }; const handleDismiss = () => { - actions.blur(); + actions.dismiss(); + + nodeRef.current.focus(); + startInputRef.current.resetPlaceholder(); + endInputRef.current.resetPlaceholder(); }; const handleStartDateChange = (val: string) => { @@ -387,19 +408,46 @@ export const DateRangeInput = ({ } }; - const handleInputFocus = (focusType: FocusType) => () => { - if (readOnly) return; + const handleFocus = () => { + if (readOnly || focused) return; + + actions.focus("start"); + onFocus?.(); + }; - actions.focus(focusType); + const handleBlur = (e: React.FocusEvent) => { + if ( + focused && + !calendarOpen && + !nodeRef.current.contains(e.relatedTarget as Node) + ) { + actions.blur(); - handleWeekSelectionInputFocus(); - handleFixedRangeSelectionInputFocus(); + setIsStartDisabled(false); + setIsEndDisabled(false); + startInputRef.current.resetPlaceholder(); + endInputRef.current.resetPlaceholder(); - if (onFocus) { - onFocus(); + onBlur?.(); } }; + const handleInputFocus = + (focusType: FocusType) => (event: React.FocusEvent) => { + event.stopPropagation(); + + if (readOnly) return; + + actions.focus(focusType); + + handleWeekSelectionInputFocus(); + handleFixedRangeSelectionInputFocus(); + + if (!focused) { + onFocus?.(); + } + }; + const handleWeekSelectionInputFocus = () => { if (isWeekSelection) { const firstDayOfWeek = DateHelper.toDayjs(selectedStart) @@ -529,6 +577,9 @@ export const DateRangeInput = ({ void; - onFocus?: (() => void) | undefined; + onFocus?: ((event: React.FocusEvent) => void) | undefined; onBlur?: ((valid: boolean) => void) | undefined; } @@ -138,7 +138,7 @@ export const Component = ( } }; - const handleSectionFocus = () => { + const handleSectionFocus = (event: React.FocusEvent) => { if (disabled) { return; } @@ -146,7 +146,7 @@ export const Component = ( setHidePlaceholder(true); if (!focused) { - onFocus?.(); + onFocus?.(event); } }; From 21e4dffe5a948353d1338aba742e34abf86c4260 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Fri, 28 Jun 2024 16:26:02 +0800 Subject: [PATCH 0216/1949] [CCUBE-1414][WL] add loading indicator to e-signature --- src/e-signature/e-signature.styles.ts | 12 +++++++ src/e-signature/e-signature.tsx | 33 +++++++++++++++++-- src/e-signature/types.ts | 2 ++ .../form-e-signature.stories.tsx | 15 +++++++++ tests/e-signature/e-signature.spec.tsx | 16 +++++++++ 5 files changed, 76 insertions(+), 2 deletions(-) diff --git a/src/e-signature/e-signature.styles.ts b/src/e-signature/e-signature.styles.ts index add137bbe..a80815ad2 100644 --- a/src/e-signature/e-signature.styles.ts +++ b/src/e-signature/e-signature.styles.ts @@ -46,6 +46,18 @@ export const SignaturePreviewImage = styled.img` width: calc(100% - 8rem); height: 100%; `; +export const ProgressBox = styled.div` + background: ${Color.Accent.Light[6]}; + border: 1px solid ${Color.Neutral[5]}; + border-radius: 4px; + margin: 0 2rem; + padding: 1rem; + display: flex; + gap: 1rem; + flex: 1; + flex-direction: column; + align-items: center; +`; export const Instructions = styled(Text.H6)` margin-top: 1rem; `; diff --git a/src/e-signature/e-signature.tsx b/src/e-signature/e-signature.tsx index d8c97a609..7280f5f19 100644 --- a/src/e-signature/e-signature.tsx +++ b/src/e-signature/e-signature.tsx @@ -3,6 +3,8 @@ import { Suspense, lazy, useEffect, useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; import { ButtonWithIcon } from "../button-with-icon"; import { MediaWidths } from "../media"; +import { ProgressBar } from "../shared/progress-bar"; +import { Text } from "../text"; import { ESignatureCanvasRef } from "./e-signature-canvas"; import { AddSignatureButton, @@ -15,6 +17,7 @@ import { ModalBox, ModalButtons, ModalTitle, + ProgressBox, ScrollableModal, SignatureArea, SignatureLine, @@ -31,7 +34,15 @@ export const ESignature = (props: EsignatureProps) => { // ============================================================================= // CONST, STATE, REF // ============================================================================= - const { description, onChange, value, ...otherProps } = props; + const { + description, + id, + loadingProgress, + loadingLabel = "Uploading...", + onChange, + value, + ...otherProps + } = props; const [showModal, setShowModal] = useState(false); const eSignatureCanvasRef = useRef(null); const [dataURL, setDataURL] = useState(value); @@ -90,6 +101,20 @@ export const ESignature = (props: EsignatureProps) => { ); }; + const renderLoadingIndicator = () => { + return ( + + {loadingLabel && ( + {loadingLabel} + )} + + + ); + }; + const renderModal = () => { return ( @@ -143,7 +168,11 @@ export const ESignature = (props: EsignatureProps) => { return (
    - {renderSignatureArea()} + + {isNaN(loadingProgress) + ? renderSignatureArea() + : renderLoadingIndicator()} + {renderModal()} {renderDescription()}
    diff --git a/src/e-signature/types.ts b/src/e-signature/types.ts index 48a0fd948..b9b4e3580 100644 --- a/src/e-signature/types.ts +++ b/src/e-signature/types.ts @@ -3,6 +3,8 @@ export interface EsignatureProps { id?: string | undefined; "data-testid"?: string | undefined; description?: string | undefined; + loadingLabel?: string | undefined; + loadingProgress?: number | undefined; /** image dataURL */ value?: string | undefined; onChange?: ((value: string) => void) | undefined; diff --git a/stories/form/form-e-signature/form-e-signature.stories.tsx b/stories/form/form-e-signature/form-e-signature.stories.tsx index 39ee1a2eb..aebf8abdf 100644 --- a/stories/form/form-e-signature/form-e-signature.stories.tsx +++ b/stories/form/form-e-signature/form-e-signature.stories.tsx @@ -40,6 +40,21 @@ export const Default: StoryObj = { }, }; +export const WithLoadingIndicator: StoryObj = { + render: () => { + return ( + + + + + + ); + }, +}; + export const RenderingInGridLayout: StoryObj = { render: () => { return ( diff --git a/tests/e-signature/e-signature.spec.tsx b/tests/e-signature/e-signature.spec.tsx index 4d87fd472..06daa9f6d 100644 --- a/tests/e-signature/e-signature.spec.tsx +++ b/tests/e-signature/e-signature.spec.tsx @@ -20,6 +20,22 @@ describe("ESignature", () => { ); }); + it("should show the progress indicator if loadingProgress is specified", () => { + render(); + + expect( + screen.getByTestId("e-signature-progress-bar") + ).toBeInTheDocument(); + expect(screen.getByText("Uploading...")).toBeInTheDocument(); + expect(getAddSignatureButton(true)).not.toBeInTheDocument(); + }); + + it("should render the loading text according to the loadingLabel", () => { + render(); + + expect(screen.getByText("Loading")).toBeInTheDocument(); + }); + it("should show edit button instead of add signature button if field has a value", () => { render(); From ed72b0ed09442d4dfbaf789d5234a165181d2e86 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Fri, 28 Jun 2024 16:28:45 +0800 Subject: [PATCH 0217/1949] [CCUBE-1414][WL] move delay above ref check - in some unit tests, the ref became null after the delay, making the checks inaccurate --- src/e-signature/e-signature-canvas.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/e-signature/e-signature-canvas.tsx b/src/e-signature/e-signature-canvas.tsx index f4f648fe8..d05710762 100644 --- a/src/e-signature/e-signature-canvas.tsx +++ b/src/e-signature/e-signature-canvas.tsx @@ -61,11 +61,10 @@ const Component = ( }; const handleResize = useCallback(async () => { + // slight delay for fabricjs to update on orientation change + await new Promise((resolve) => setTimeout(resolve)); if (containerRef.current && canvasRef.current && fabricCanvas.current) { - // slight delay for fabricjs to update on orientation change - await new Promise((resolve) => setTimeout(resolve)); - - const canvasWidth = containerRef.current?.clientWidth; + const canvasWidth = containerRef.current.clientWidth; const canvasHeight = containerRef.current.clientHeight; canvasRef.current.width = canvasWidth; canvasRef.current.height = canvasHeight; From 204f03066eb9f160f04d3ec6b83664364b929e95 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Fri, 28 Jun 2024 16:29:55 +0800 Subject: [PATCH 0218/1949] [CCUBE-1414][WL] link add / edit button ids to label --- src/e-signature/e-signature.tsx | 2 ++ .../form/form-e-signature/form-e-signature.stories.tsx | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/e-signature/e-signature.tsx b/src/e-signature/e-signature.tsx index 7280f5f19..ab2065cb1 100644 --- a/src/e-signature/e-signature.tsx +++ b/src/e-signature/e-signature.tsx @@ -80,6 +80,7 @@ export const ESignature = (props: EsignatureProps) => { setShowModal(true)} > Add signature @@ -93,6 +94,7 @@ export const ESignature = (props: EsignatureProps) => { setShowModal(true)} + id={id} aria-label="Edit signature" > diff --git a/stories/form/form-e-signature/form-e-signature.stories.tsx b/stories/form/form-e-signature/form-e-signature.stories.tsx index aebf8abdf..dfcfc6ad9 100644 --- a/stories/form/form-e-signature/form-e-signature.stories.tsx +++ b/stories/form/form-e-signature/form-e-signature.stories.tsx @@ -21,17 +21,23 @@ export const Default: StoryObj = { return ( - + From bac16ec3b3fba17d4c2fc9af363dd97761e73374 Mon Sep 17 00:00:00 2001 From: viv <60010897+vivchong@users.noreply.github.com> Date: Fri, 28 Jun 2024 21:32:51 +0800 Subject: [PATCH 0219/1949] Updated colour of form label and textarea counter to match Figma --- src/form/form-label.style.tsx | 2 +- src/input-textarea/textara-counter.style.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/form/form-label.style.tsx b/src/form/form-label.style.tsx index b108e9cbe..c7cb9b908 100644 --- a/src/form/form-label.style.tsx +++ b/src/form/form-label.style.tsx @@ -7,7 +7,7 @@ import { Text, TextStyleHelper } from "../text"; // ============================================================================= export const Label = styled.label` ${TextStyleHelper.getTextStyle("H5", "semibold")} - color: ${Color.Neutral[3]}; + color: ${Color.Neutral[2]}; margin-bottom: 0.5rem; display: inline-block; diff --git a/src/input-textarea/textara-counter.style.tsx b/src/input-textarea/textara-counter.style.tsx index b159174dc..5d56fc41e 100644 --- a/src/input-textarea/textara-counter.style.tsx +++ b/src/input-textarea/textara-counter.style.tsx @@ -14,6 +14,7 @@ interface StyleProps { // ============================================================================= export const CounterLabel = styled(Text.H6)` text-align: right; + color: ${Color.Neutral[3]}; ${(props) => { if (props.disabled) { From 2b41880a038f9ada42fc4f0237903de317ec0719 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 1 Jul 2024 08:29:22 +0800 Subject: [PATCH 0220/1949] [DOCS][RL] Document clear button for input group --- .../form-input-group/form-input-group.mdx | 4 +++ .../form-input-group.stories.tsx | 26 +++++++++++++++++++ .../form-phone-number-input.mdx | 4 +++ .../form-phone-number-input.stories.tsx | 23 ++++++++++++++++ 4 files changed, 57 insertions(+) diff --git a/stories/form/form-input-group/form-input-group.mdx b/stories/form/form-input-group/form-input-group.mdx index 962bd45f2..843ed419d 100644 --- a/stories/form/form-input-group/form-input-group.mdx +++ b/stories/form/form-input-group/form-input-group.mdx @@ -23,6 +23,10 @@ You are able to specify attributes in the `addon` property to construct advanced +Allow clearing of input + + + Rendering in grid layouts You can also specify [ColDiv's](/docs/getting-started-layout-column-divs--docs) diff --git a/stories/form/form-input-group/form-input-group.stories.tsx b/stories/form/form-input-group/form-input-group.stories.tsx index 6c12448d7..9cf5dce92 100644 --- a/stories/form/form-input-group/form-input-group.stories.tsx +++ b/stories/form/form-input-group/form-input-group.stories.tsx @@ -1,5 +1,6 @@ import { MagnifierIcon } from "@lifesg/react-icons/magnifier"; import type { Meta, StoryObj } from "@storybook/react"; +import { useState } from "react"; import { Form } from "src/form"; import { InputGroup } from "src/input-group"; import { Layout } from "src/layout"; @@ -250,6 +251,31 @@ export const WithDifferentAddons: StoryObj = { }, }; +export const AllowClear: StoryObj = { + render: () => { + const [value, setValue] = useState("1"); + return ( + + + setValue(e.target.value)} + onClear={() => setValue("")} + /> + + + ); + }, +}; + export const RenderingInGridLayout: StoryObj = { render: () => { return ( diff --git a/stories/form/form-phone-number-input/form-phone-number-input.mdx b/stories/form/form-phone-number-input/form-phone-number-input.mdx index d2ff3a8ee..832960c91 100644 --- a/stories/form/form-phone-number-input/form-phone-number-input.mdx +++ b/stories/form/form-phone-number-input/form-phone-number-input.mdx @@ -26,6 +26,10 @@ you can pass the prop `fixedCountry` to restrict input to only that country code +Allow clearing of input + + + Rendering in grid layouts You can also specify [ColDiv's](/docs/getting-started-layout-column-divs--docs) diff --git a/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx b/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx index 8fa0c979e..b41ae7b91 100644 --- a/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx +++ b/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx @@ -83,6 +83,29 @@ export const FixedCountry: StoryObj = { }, }; +export const AllowClear: StoryObj = { + render: () => { + const [value, setValue] = useState({ + countryCode: "65", + number: "88888888", + }); + return ( + + + setValue({ countryCode, number }) + } + onClear={() => setValue({ countryCode: "", number: "" })} + /> + + ); + }, +}; + export const RenderingInGridLayout: StoryObj = { render: () => { return ( From 5bf82210131ecd31187c2f86e5f7b6b83ce22031 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 1 Jul 2024 08:31:57 +0800 Subject: [PATCH 0221/1949] [DOCS][RL] Fix missing text docs --- stories/text/b-advanced.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/text/b-advanced.mdx b/stories/text/b-advanced.mdx index 781f943cf..4699f916f 100644 --- a/stories/text/b-advanced.mdx +++ b/stories/text/b-advanced.mdx @@ -10,7 +10,7 @@ import { import * as TextStories from "./b-advanced.stories"; import { PropsTable } from "./props-table"; - + Advanced Usage From 2ef49330275ee0e388a0ff766a551171278d8823 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Mon, 1 Jul 2024 16:56:11 +0800 Subject: [PATCH 0222/1949] [CCUBE-1414][WL] set accessibility label for add signature button --- src/e-signature/e-signature.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/e-signature/e-signature.tsx b/src/e-signature/e-signature.tsx index ab2065cb1..710d02d6a 100644 --- a/src/e-signature/e-signature.tsx +++ b/src/e-signature/e-signature.tsx @@ -80,6 +80,7 @@ export const ESignature = (props: EsignatureProps) => { setShowModal(true)} > From d29e07b937032f90632624657db8ad215fa9a60c Mon Sep 17 00:00:00 2001 From: Wei Li Date: Mon, 1 Jul 2024 17:28:03 +0800 Subject: [PATCH 0223/1949] [CCUBE-1414][WL] add loadingProgress and loadingLabel to props table --- stories/form/form-e-signature/props-table.tsx | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/stories/form/form-e-signature/props-table.tsx b/stories/form/form-e-signature/props-table.tsx index 7920d1535..772e2f3fa 100644 --- a/stories/form/form-e-signature/props-table.tsx +++ b/stories/form/form-e-signature/props-table.tsx @@ -30,6 +30,28 @@ const DATA: ApiTableSectionProps[] = [ description: "The unique identifier of the component", propTypes: ["string"], }, + { + name: "loadingProgress", + description: + "Number between 0 and 1 to mark the progress in a progress indicator", + propTypes: ["number"], + }, + { + name: "loadingLabel", + description: ( + <> + Text above progress indicator, requires{" "} + loadingProgress prop to be defined. + + ), + propTypes: ["string"], + defaultValue: `"Uploading..."`, + }, + { + name: "id", + description: "The unique identifier of the component", + propTypes: ["string"], + }, { name: "value", description: <>The signature data in {STRING_FORMAT}, From 7c843353f50b7ffbfe7634e8af733b3e0ec5d774 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 1 Jul 2024 17:40:09 +0800 Subject: [PATCH 0224/1949] [MISC][RL] Update documentation --- stories/form/form-e-signature/form-e-signature.mdx | 4 ++++ stories/form/form-e-signature/props-table.tsx | 5 ----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/stories/form/form-e-signature/form-e-signature.mdx b/stories/form/form-e-signature/form-e-signature.mdx index 18d295d95..de6dbf1cb 100644 --- a/stories/form/form-e-signature/form-e-signature.mdx +++ b/stories/form/form-e-signature/form-e-signature.mdx @@ -17,6 +17,10 @@ import { Form } from "@lifesg/react-design-system/form"; +Loading indicator + + + Rendering in grid layouts You can also specify [ColDiv's](/docs/getting-started-layout-column-divs--docs) diff --git a/stories/form/form-e-signature/props-table.tsx b/stories/form/form-e-signature/props-table.tsx index 772e2f3fa..5da613e34 100644 --- a/stories/form/form-e-signature/props-table.tsx +++ b/stories/form/form-e-signature/props-table.tsx @@ -47,11 +47,6 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["string"], defaultValue: `"Uploading..."`, }, - { - name: "id", - description: "The unique identifier of the component", - propTypes: ["string"], - }, { name: "value", description: <>The signature data in {STRING_FORMAT}, From fe0b8869d8c9bb70235c6b3bb2737207bd6f25f3 Mon Sep 17 00:00:00 2001 From: roll Date: Sun, 30 Jun 2024 21:09:03 +0800 Subject: [PATCH 0225/1949] [MISC][RL] Update build check to mirror build config --- rollup.check.config.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rollup.check.config.js b/rollup.check.config.js index adab62b9c..390b728e1 100644 --- a/rollup.check.config.js +++ b/rollup.check.config.js @@ -1,4 +1,3 @@ -import pkg from "./package.json"; import { plugins } from "./rollup.config"; export default [ @@ -6,16 +5,18 @@ export default [ input: "src/index.ts", output: [ { - file: pkg.module, + dir: "dist", format: "esm", sourcemap: true, exports: "named", + chunkFileNames: "chunks/[name].[hash].js", }, { - file: pkg.main, + dir: "dist/cjs", format: "cjs", sourcemap: true, exports: "named", + chunkFileNames: "chunks/[name].[hash].js", }, ], plugins, From 8d56cc02d0bf637d81a9292225162b08bac5a90a Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 1 Jul 2024 17:43:31 +0800 Subject: [PATCH 0226/1949] [MISC][RL] 2.6.0-canary.6 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index d901e3a00..c6181c306 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.5", + "version": "2.6.0-canary.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.5", + "version": "2.6.0-canary.6", "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", @@ -39470,4 +39470,4 @@ } } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index c43ce3b84..42a411097 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.6.0-canary.5", + "version": "2.6.0-canary.6", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 1ef4d1e9ed0ea302b5d58bbfc3c8d165c378ce29 Mon Sep 17 00:00:00 2001 From: Daniel Sim Date: Mon, 1 Jul 2024 17:51:44 +0800 Subject: [PATCH 0227/1949] [MOL-15988][DS] fix for invalid dates in date-input being displayed as NaN --- src/shared/standalone-date-input/standalone-date-input.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/shared/standalone-date-input/standalone-date-input.tsx b/src/shared/standalone-date-input/standalone-date-input.tsx index 5f490b7bf..f8979d46b 100644 --- a/src/shared/standalone-date-input/standalone-date-input.tsx +++ b/src/shared/standalone-date-input/standalone-date-input.tsx @@ -287,6 +287,10 @@ export const Component = ( } else { const day = dayjs(new Date(stringVal)); + if (!day.isValid()) { + return [undefined, undefined, undefined]; + } + return [ StringHelper.padValue(day.date().toString()), StringHelper.padValue((day.month() + 1).toString()), From 97513a314f527123553009db9987c9c62d7d96cb Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 1 Jul 2024 20:08:05 +0800 Subject: [PATCH 0228/1949] [TESTS][RL] Upgrade jest to v29, fix broken tests - fake timers are now modern by default - jest snapshots now use pretty-format by default, meaning Array and Obj ect notations are stripped from existing snapshots --- package-lock.json | 17192 ++++++---------- package.json | 5 +- tests/footer/footer.spec.tsx | 2 +- .../time-slot-bar-week.spec.tsx | 2 +- .../time-slot-week-view.spec.tsx | 2 +- .../calendar-helper.spec.ts.snap | 18 +- 6 files changed, 6156 insertions(+), 11065 deletions(-) diff --git a/package-lock.json b/package-lock.json index c6181c306..4d18d11d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "@lifesg/react-design-system", "version": "2.6.0-canary.6", + "hasInstallScript": true, "license": "ISC", "dependencies": { "@floating-ui/dom": "^1.5.4", @@ -44,7 +45,7 @@ "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@types/fabric": "^5.3.7", - "@types/jest": "^27.4.1", + "@types/jest": "^29.5.12", "@types/lodash": "^4.14.180", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", @@ -66,8 +67,9 @@ "html-react-parser": "^2.0.0", "husky": "^7.0.4", "identity-obj-proxy": "^3.0.0", - "jest": "^27.5.1", + "jest": "^29.7.0", "jest-canvas-mock": "^2.3.1", + "jest-environment-jsdom": "^29.7.0", "jest-junit": "^16.0.0", "jest-styled-components": "^7.0.8", "lint-staged": "^12.3.7", @@ -3258,45 +3260,20 @@ } }, "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/console/node_modules/ansi-styles": { @@ -3339,23 +3316,6 @@ "node": ">=8" } }, - "node_modules/@jest/console/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/@jest/console/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3369,42 +3329,42 @@ } }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -3415,57 +3375,6 @@ } } }, - "node_modules/@jest/core/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3497,12 +3406,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3512,65 +3415,30 @@ "node": ">=8" } }, - "node_modules/@jest/core/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "node": ">=10" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@jest/core/node_modules/supports-color": { @@ -3585,18 +3453,6 @@ "node": ">=8" } }, - "node_modules/@jest/core/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/@jest/create-cache-key-function": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", @@ -3611,144 +3467,125 @@ } }, "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/environment/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "jest-mock": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/environment/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/environment/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "jest-get-type": "^29.6.3" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/environment/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/environment/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/expect": { + "node_modules/@jest/globals": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/expect-utils": { + "node_modules/@jest/reporters": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "jest-get-type": "^29.6.3" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@jest/expect-utils/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/ansi-styles": { + "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3759,13 +3596,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/expect/node_modules/chalk": { + "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3777,183 +3612,87 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/expect/node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/expect/node_modules/has-flag": { + "node_modules/@jest/reporters/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=8" } }, - "node_modules/@jest/expect/node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/@jest/expect/node_modules/jest-snapshot": { + "node_modules/@jest/reporters/node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", + "@types/node": "*", "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/expect/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/@jest/reporters/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "has-flag": "^4.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@jest/expect/node_modules/semver": { + "node_modules/@jest/reporters/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "optional": true, - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -3961,13 +3700,11 @@ "node": ">=10" } }, - "node_modules/@jest/expect/node_modules/supports-color": { + "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3975,157 +3712,89 @@ "node": ">=8" } }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/fake-timers/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "ci-info": "^3.2.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/globals/node_modules/ansi-styles": { + "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -4140,7 +3809,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/globals/node_modules/chalk": { + "node_modules/@jest/transform/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -4156,7 +3825,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/globals/node_modules/has-flag": { + "node_modules/@jest/transform/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -4165,7 +3834,7 @@ "node": ">=8" } }, - "node_modules/@jest/globals/node_modules/supports-color": { + "node_modules/@jest/transform/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -4177,102 +3846,37 @@ "node": ">=8" } }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { + "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -4287,7 +3891,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/chalk": { + "node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -4303,34 +3907,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/node_modules/has-flag": { + "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -4339,484 +3916,750 @@ "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" + "has-flag": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.0.0" } }, - "node_modules/@jest/reporters/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6.0.0" } }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@jest/reporters/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@lifesg/react-icons": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@lifesg/react-icons/-/react-icons-1.6.0.tgz", + "integrity": "sha512-Kvb5FcUBRsnak+psYGd8WQ06YeTqKpOq7ecNpautktnSXZDU6OziuAKPsvBNIIqO4e6T9CftL4wCfxCzayftvQ==", "dev": true, + "peerDependencies": { + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0", + "styled-components": "^5.3.5" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, "dependencies": { - "@sinclair/typebox": "^0.27.8" + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" } }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, + "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6" } }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "node_modules/@mdx-js/react": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", + "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@types/mdx": "^2.0.0" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" } }, - "node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/@ndelangen/get-tarball": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz", + "integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "gunzip-maybe": "^1.4.2", + "pump": "^3.0.0", + "tar-fs": "^2.1.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 8" } }, - "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "engines": { + "node": ">= 8" } }, - "node_modules/@jest/test-result/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 8" } }, - "node_modules/@jest/test-result/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@npmcli/config": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-6.4.1.tgz", + "integrity": "sha512-uSz+elSGzjCMANWa5IlbGczLYPkNI/LeR+cHrgaTqTrTSh9RHhOFA4daD2eRUz6lMtOW+Fnsb+qv7V2Zz8ML0g==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^4.0.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@jest/test-result/node_modules/has-flag": { + "node_modules/@npmcli/config/node_modules/ci-info": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { "node": ">=8" } }, - "node_modules/@jest/test-result/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@npmcli/config/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "node_modules/@npmcli/config/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" } }, - "node_modules/@jest/test-sequencer/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/@npmcli/map-workspaces": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", + "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@jest/test-sequencer/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "balanced-match": "^1.0.0" } }, - "node_modules/@jest/test-sequencer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/test-sequencer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/test-sequencer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "node_modules/@npmcli/map-workspaces/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/@jest/test-sequencer/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jest/test-sequencer/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jest/test-sequencer/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", + "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@jest/test-sequencer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "@babel/runtime": "^7.13.10" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@react-native-community/cli": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.8.tgz", + "integrity": "sha512-0lRdgLNaXixWY4BfFRl1J6Ao9Lapo2z+++iE7TD4GAbuxOWJSyFi+KUA8XNfSDyML4jFO02MZgyBPxAWdaminQ==", "dev": true, "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@react-native-community/cli-clean": "13.6.8", + "@react-native-community/cli-config": "13.6.8", + "@react-native-community/cli-debugger-ui": "13.6.8", + "@react-native-community/cli-doctor": "13.6.8", + "@react-native-community/cli-hermes": "13.6.8", + "@react-native-community/cli-server-api": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "@react-native-community/cli-types": "13.6.8", + "chalk": "^4.1.2", + "commander": "^9.4.1", + "deepmerge": "^4.3.0", + "execa": "^5.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.1.3", + "prompts": "^2.4.2", + "semver": "^7.5.2" + }, + "bin": { + "rnc-cli": "build/bin.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { + "node_modules/@react-native-community/cli-clean": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.8.tgz", + "integrity": "sha512-B1uxlm1N4BQuWFvBL3yRl3LVvydjswsdbTi7tMrHMtSxfRio1p9HjcmDzlzKco09Y+8qBGgakm3jcMZGLbhXQQ==", + "dev": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -4832,7 +4675,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/types/node_modules/chalk": { + "node_modules/@react-native-community/cli-clean/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -4849,7 +4692,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/types/node_modules/has-flag": { + "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -4859,7 +4702,7 @@ "node": ">=8" } }, - "node_modules/@jest/types/node_modules/supports-color": { + "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -4872,239 +4715,250 @@ "node": ">=8" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "node_modules/@react-native-community/cli-config": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.8.tgz", + "integrity": "sha512-RabCkIsWdP4Ex/sf1uSP9qxc30utm+0uIJAjrZkNQynm7T4Lyqn/kT3LKm4yM6M0Qk61YxGguiaXF4601vAduw==", "dev": true, + "peer": true, "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "cosmiconfig": "^5.1.0", + "deepmerge": "^4.3.0", + "fast-glob": "^3.3.2", + "joi": "^17.2.1" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@react-native-community/cli-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=6.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "node_modules/@react-native-community/cli-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "peer": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "sprintf-js": "~1.0.2" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "node_modules/@react-native-community/cli-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, + "peer": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@lifesg/react-icons": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@lifesg/react-icons/-/react-icons-1.6.0.tgz", - "integrity": "sha512-Kvb5FcUBRsnak+psYGd8WQ06YeTqKpOq7ecNpautktnSXZDU6OziuAKPsvBNIIqO4e6T9CftL4wCfxCzayftvQ==", + "node_modules/@react-native-community/cli-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "peerDependencies": { - "react": "^17.0.2 || ^18.0.0", - "react-dom": "^17.0.2 || ^18.0.0", - "styled-components": "^5.3.5" + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "optional": true, + "node_modules/@react-native-community/cli-config/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "peer": true, "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "engines": { + "node": ">=4" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "optional": true, + "node_modules/@react-native-community/cli-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "peer": true, "dependencies": { - "abbrev": "1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { - "nopt": "bin/nopt.js" + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@react-native-community/cli-config/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "peer": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/@react-native-community/cli-config/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "peer": true, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", + "node_modules/@react-native-community/cli-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" + "engines": { + "node": ">=8" } }, - "node_modules/@ndelangen/get-tarball": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz", - "integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==", + "node_modules/@react-native-community/cli-debugger-ui": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.8.tgz", + "integrity": "sha512-2cS+MX/Su6sVSjqpDftFOXbK7EuPg98xzsPkdPhkQnkZwvXqodK9CAMuDMbx3lBHHtrPrpMbBCpFmPN8iVOnlA==", "dev": true, + "peer": true, "dependencies": { - "gunzip-maybe": "^1.4.2", - "pump": "^3.0.0", - "tar-fs": "^2.1.1" + "serve-static": "^1.13.1" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@react-native-community/cli-doctor": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.8.tgz", + "integrity": "sha512-/3Vdy9J3hyiu0y3nd/CU3kBqPlTRxnLXg7V6jrA1jbTOlZAMyV9imEkrqEaGK0SMOyMhh9Pipf98Ozhk0Nl4QA==", "dev": true, + "peer": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "@react-native-community/cli-config": "13.6.8", + "@react-native-community/cli-platform-android": "13.6.8", + "@react-native-community/cli-platform-apple": "13.6.8", + "@react-native-community/cli-platform-ios": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "deepmerge": "^4.3.0", + "envinfo": "^7.10.0", + "execa": "^5.0.0", + "hermes-profile-transformer": "^0.0.6", + "node-stream-zip": "^1.9.1", + "ora": "^5.4.1", + "semver": "^7.5.2", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1", + "yaml": "^2.2.1" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, + "peer": true, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@npmcli/config": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-6.4.1.tgz", - "integrity": "sha512-uSz+elSGzjCMANWa5IlbGczLYPkNI/LeR+cHrgaTqTrTSh9RHhOFA4daD2eRUz6lMtOW+Fnsb+qv7V2Zz8ML0g==", + "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^4.0.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@npmcli/config/node_modules/ci-info": { + "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", - "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/@npmcli/config/node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/config/node_modules/semver": { + "node_modules/@react-native-community/cli-doctor/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, + "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -5112,498 +4966,421 @@ "node": ">=10" } }, - "node_modules/@npmcli/map-workspaces": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", - "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", + "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "peer": true, "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" + "ansi-regex": "^4.1.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "balanced-match": "^1.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "node_modules/@react-native-community/cli-doctor/node_modules/yaml": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.3.tgz", + "integrity": "sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==", "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, + "peer": true, "bin": { - "glob": "dist/esm/bin.mjs" + "yaml": "bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">= 14" + } + }, + "node_modules/@react-native-community/cli-hermes": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.8.tgz", + "integrity": "sha512-lZi/OBFuZUj5cLK94oEgtrtmxGoqeYVRcnHXl/R5c4put9PDl+qH2bEMlGZkFiw57ae3UZKr3TMk+1s4jh3FYQ==", + "dev": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-platform-android": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "brace-expansion": "^2.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@npmcli/map-workspaces/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" } }, - "node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", - "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@one-ini/wasm": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", - "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", - "dev": true + "node_modules/@react-native-community/cli-platform-android": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.8.tgz", + "integrity": "sha512-vWrqeLRRTwp2kO33nbrAgbYn8HR2c2CpIfyVJY9Ckk7HGUSwDyxdcSu7YBvt2ShdfLZH0HctWFNXsgGrfg6BDw==", + "dev": true, + "peer": true, + "dependencies": { + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.2.4", + "logkitty": "^0.7.1" + } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=14" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@radix-ui/primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", - "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", - "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "node_modules/@react-native-community/cli-platform-apple": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.8.tgz", + "integrity": "sha512-1JPohnlXPqU44zns3ALEzIbH2cKRw6JtEDJERgLuEUbs2r2NeJgqDbKyZ7fTTO8o+pegDnn6+Rr7qGVVOuUzzg==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "@react-native-community/cli-tools": "13.6.8", + "chalk": "^4.1.2", + "execa": "^5.0.0", + "fast-glob": "^3.3.2", + "fast-xml-parser": "^4.0.12", + "ora": "^5.4.1" } }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", - "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", - "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", - "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", - "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "node_modules/@react-native-community/cli-platform-apple/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", - "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "node_modules/@react-native-community/cli-platform-ios": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.8.tgz", + "integrity": "sha512-/IIcIRM8qaoD7iZqsvtf6Qq1AwtChWYfB9sTn3mTiolZ5Zd5bXH37g+6liPfAICRkj2Ptq3iXmjrDVUQAxrOXw==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "@react-native-community/cli-platform-apple": "13.6.8" } }, - "node_modules/@radix-ui/react-portal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", - "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "node_modules/@react-native-community/cli-server-api": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.8.tgz", + "integrity": "sha512-Lx664oWTzpVfbKUTy+3GIX7e+Mt5Zn+zdkM4ehllNdik/lbB3tM9Nrg8PSvOfI+tTXs2w55+nIydLfH+0FqJVg==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "@react-native-community/cli-debugger-ui": "13.6.8", + "@react-native-community/cli-tools": "13.6.8", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.1", + "nocache": "^3.0.1", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^6.2.2" } }, - "node_modules/@radix-ui/react-presence": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", - "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 10.14.2" } }, - "node_modules/@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "@types/yargs-parser": "*" } }, - "node_modules/@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "node_modules/@react-native-community/cli-server-api/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", - "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "node_modules/@react-native-community/cli-server-api/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", - "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "node_modules/@react-native-community/cli-server-api/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", - "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 10" } }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", - "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "peer": true + }, + "node_modules/@react-native-community/cli-server-api/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@react-native-community/cli": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-13.6.8.tgz", - "integrity": "sha512-0lRdgLNaXixWY4BfFRl1J6Ao9Lapo2z+++iE7TD4GAbuxOWJSyFi+KUA8XNfSDyML4jFO02MZgyBPxAWdaminQ==", + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", "dev": true, "peer": true, "dependencies": { - "@react-native-community/cli-clean": "13.6.8", - "@react-native-community/cli-config": "13.6.8", - "@react-native-community/cli-debugger-ui": "13.6.8", - "@react-native-community/cli-doctor": "13.6.8", - "@react-native-community/cli-hermes": "13.6.8", - "@react-native-community/cli-server-api": "13.6.8", - "@react-native-community/cli-tools": "13.6.8", - "@react-native-community/cli-types": "13.6.8", - "chalk": "^4.1.2", - "commander": "^9.4.1", - "deepmerge": "^4.3.0", - "execa": "^5.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.2", - "semver": "^7.5.2" - }, - "bin": { - "rnc-cli": "build/bin.js" - }, - "engines": { - "node": ">=18" + "async-limiter": "~1.0.0" } }, - "node_modules/@react-native-community/cli-clean": { + "node_modules/@react-native-community/cli-tools": { "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-13.6.8.tgz", - "integrity": "sha512-B1uxlm1N4BQuWFvBL3yRl3LVvydjswsdbTi7tMrHMtSxfRio1p9HjcmDzlzKco09Y+8qBGgakm3jcMZGLbhXQQ==", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.8.tgz", + "integrity": "sha512-1MYlae9EkbjC7DBYOGMH5xF9yDoeNYUKgEdDjL6WAUBoF2gtwiZPM6igLKi/+dhb5sCtC7fiLrLi0Oevdf+RmQ==", "dev": true, "peer": true, "dependencies": { - "@react-native-community/cli-tools": "13.6.8", + "appdirsjs": "^1.2.4", "chalk": "^4.1.2", "execa": "^5.0.0", - "fast-glob": "^3.3.2" + "find-up": "^5.0.0", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "ora": "^5.4.1", + "semver": "^7.5.2", + "shell-quote": "^1.7.3", + "sudo-prompt": "^9.0.0" } }, - "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { + "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -5619,7 +5396,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-clean/node_modules/chalk": { + "node_modules/@react-native-community/cli-tools/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -5636,7 +5413,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { + "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -5646,7 +5423,56 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { + "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "peer": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -5659,22 +5485,17 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-config": { + "node_modules/@react-native-community/cli-types": { "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-13.6.8.tgz", - "integrity": "sha512-RabCkIsWdP4Ex/sf1uSP9qxc30utm+0uIJAjrZkNQynm7T4Lyqn/kT3LKm4yM6M0Qk61YxGguiaXF4601vAduw==", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.8.tgz", + "integrity": "sha512-C4mVByy0i+/NPuPhdMLBR7ubEVkjVS1VwoQu/BoG1crJFNE+167QXAzH01eFbXndsjZaMWmD4Gerx7TYc6lHfA==", "dev": true, "peer": true, "dependencies": { - "@react-native-community/cli-tools": "13.6.8", - "chalk": "^4.1.2", - "cosmiconfig": "^5.1.0", - "deepmerge": "^4.3.0", - "fast-glob": "^3.3.2", "joi": "^17.2.1" } }, - "node_modules/@react-native-community/cli-config/node_modules/ansi-styles": { + "node_modules/@react-native-community/cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -5690,17 +5511,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/chalk": { + "node_modules/@react-native-community/cli/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -5717,252 +5528,247 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "peer": true, - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@react-native-community/cli/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, "peer": true, "engines": { - "node": ">=8" + "node": "^12.20.0 || >=14" } }, - "node_modules/@react-native-community/cli-config/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "node_modules/@react-native-community/cli/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "peer": true, "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/@react-native-community/cli-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/@react-native-community/cli/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "peer": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/@react-native-community/cli-config/node_modules/parse-json": { + "node_modules/@react-native-community/cli/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "peer": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/@react-native-community/cli-config/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "node_modules/@react-native-community/cli/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "peer": true, - "engines": { - "node": ">=4" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@react-native-community/cli-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@react-native-community/cli/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli-debugger-ui": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.8.tgz", - "integrity": "sha512-2cS+MX/Su6sVSjqpDftFOXbK7EuPg98xzsPkdPhkQnkZwvXqodK9CAMuDMbx3lBHHtrPrpMbBCpFmPN8iVOnlA==", - "dev": true, - "peer": true, - "dependencies": { - "serve-static": "^1.13.1" - } - }, - "node_modules/@react-native-community/cli-doctor": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-13.6.8.tgz", - "integrity": "sha512-/3Vdy9J3hyiu0y3nd/CU3kBqPlTRxnLXg7V6jrA1jbTOlZAMyV9imEkrqEaGK0SMOyMhh9Pipf98Ozhk0Nl4QA==", + "node_modules/@react-native-community/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "peer": true, "dependencies": { - "@react-native-community/cli-config": "13.6.8", - "@react-native-community/cli-platform-android": "13.6.8", - "@react-native-community/cli-platform-apple": "13.6.8", - "@react-native-community/cli-platform-ios": "13.6.8", - "@react-native-community/cli-tools": "13.6.8", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "deepmerge": "^4.3.0", - "envinfo": "^7.10.0", - "execa": "^5.0.0", - "hermes-profile-transformer": "^0.0.6", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "semver": "^7.5.2", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1", - "yaml": "^2.2.1" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "peer": true, + "p-try": "^2.0.0" + }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@react-native-community/cli/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@react-native-community/cli/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@react-native-community/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/@react-native-community/cli/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "peer": true, - "bin": { - "semver": "bin/semver.js" - }, "engines": { - "node": ">=10" + "node": ">= 4.0.0" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/@react-native/assets-registry": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.84.tgz", + "integrity": "sha512-dzUhwyaX04QosWZ8zyaaNB/WYZIdeDN1lcpfQbqiOhZJShRH+FLTDVONE/dqlMQrP+EO7lDqF0RrlIt9lnOCQQ==", "dev": true, "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.84.tgz", + "integrity": "sha512-UR4uiii5szIJA84mSC6GJOfYKDq7/ThyetOQT62+BBcyGeHVtHlNLNRzgaMeLqIQaT8Fq4pccMI+7QqLOMXzdw==", "dev": true, "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@react-native/codegen": "0.74.84" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@react-native-community/cli-doctor/node_modules/yaml": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.3.tgz", - "integrity": "sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==", + "node_modules/@react-native/babel-preset": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.84.tgz", + "integrity": "sha512-WUfu6Y4aGuVdocQZvx33BJiQWFH6kRCHYbZfBn2psgFrSRLgQWEQrDCxqPFObNAVSayM0rNhp2FvI5K/Eyeqlg==", "dev": true, "peer": true, - "bin": { - "yaml": "bin.mjs" + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "@react-native/babel-plugin-codegen": "0.74.84", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" }, "engines": { - "node": ">= 14" + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" } }, - "node_modules/@react-native-community/cli-hermes": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-13.6.8.tgz", - "integrity": "sha512-lZi/OBFuZUj5cLK94oEgtrtmxGoqeYVRcnHXl/R5c4put9PDl+qH2bEMlGZkFiw57ae3UZKr3TMk+1s4jh3FYQ==", + "node_modules/@react-native/codegen": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.84.tgz", + "integrity": "sha512-0hXlnu9i0o8v+gXKQi+x6T471L85kCDwW4WrJiYAeOheWrQdNNW6rC3g8+LL7HXAf7QcHGU/8/d57iYfdVK2BQ==", "dev": true, "peer": true, "dependencies": { - "@react-native-community/cli-platform-android": "13.6.8", - "@react-native-community/cli-tools": "13.6.8", - "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6" + "@babel/parser": "^7.20.0", + "glob": "^7.1.1", + "hermes-parser": "0.19.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" } }, - "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { + "node_modules/@react-native/codegen/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -5978,7 +5784,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { + "node_modules/@react-native/codegen/node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "dev": true, + "peer": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@react-native/codegen/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -5995,88 +5814,112 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@react-native/codegen/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@react-native/codegen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-android": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.8.tgz", - "integrity": "sha512-vWrqeLRRTwp2kO33nbrAgbYn8HR2c2CpIfyVJY9Ckk7HGUSwDyxdcSu7YBvt2ShdfLZH0HctWFNXsgGrfg6BDw==", + "node_modules/@react-native/codegen/node_modules/jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", "dev": true, "peer": true, "dependencies": { - "@react-native-community/cli-tools": "13.6.8", + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.2.4", - "logkitty": "^0.7.1" + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@react-native/codegen/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "peer": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "minimist": "^1.2.6" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@react-native/codegen/node_modules/recast": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", "dev": true, "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 4" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@react-native/codegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "peer": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { + "node_modules/@react-native/codegen/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -6089,22 +5932,31 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-apple": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.8.tgz", - "integrity": "sha512-1JPohnlXPqU44zns3ALEzIbH2cKRw6JtEDJERgLuEUbs2r2NeJgqDbKyZ7fTTO8o+pegDnn6+Rr7qGVVOuUzzg==", + "node_modules/@react-native/community-cli-plugin": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.84.tgz", + "integrity": "sha512-GBKE+1sUh86fS2XXV46gMCNHMc1KetshMbYJ0AhDhldpaILZHqRBX50mdVsiYVvkzp4QjM0nmYqefuJ9NVwicQ==", "dev": true, "peer": true, "dependencies": { + "@react-native-community/cli-server-api": "13.6.8", "@react-native-community/cli-tools": "13.6.8", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.0.12", - "ora": "^5.4.1" + "@react-native/dev-middleware": "0.74.84", + "@react-native/metro-babel-transformer": "0.74.84", + "chalk": "^4.0.0", + "execa": "^5.1.1", + "metro": "^0.80.3", + "metro-config": "^0.80.3", + "metro-core": "^0.80.3", + "node-fetch": "^2.2.0", + "querystring": "^0.2.1", + "readline": "^1.3.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@react-native-community/cli-platform-apple/node_modules/ansi-styles": { + "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -6120,7 +5972,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-apple/node_modules/chalk": { + "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -6137,7 +5989,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-native-community/cli-platform-apple/node_modules/has-flag": { + "node_modules/@react-native/community-cli-plugin/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -6147,7 +5999,7 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-apple/node_modules/supports-color": { + "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -6160,1221 +6012,1168 @@ "node": ">=8" } }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.8.tgz", - "integrity": "sha512-/IIcIRM8qaoD7iZqsvtf6Qq1AwtChWYfB9sTn3mTiolZ5Zd5bXH37g+6liPfAICRkj2Ptq3iXmjrDVUQAxrOXw==", + "node_modules/@react-native/debugger-frontend": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.84.tgz", + "integrity": "sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A==", "dev": true, "peer": true, - "dependencies": { - "@react-native-community/cli-platform-apple": "13.6.8" + "engines": { + "node": ">=18" } }, - "node_modules/@react-native-community/cli-server-api": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-13.6.8.tgz", - "integrity": "sha512-Lx664oWTzpVfbKUTy+3GIX7e+Mt5Zn+zdkM4ehllNdik/lbB3tM9Nrg8PSvOfI+tTXs2w55+nIydLfH+0FqJVg==", + "node_modules/@react-native/dev-middleware": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz", + "integrity": "sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ==", "dev": true, "peer": true, "dependencies": { - "@react-native-community/cli-debugger-ui": "13.6.8", - "@react-native-community/cli-tools": "13.6.8", - "compression": "^1.7.1", + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.74.84", + "@rnx-kit/chromium-edge-launcher": "^1.0.0", + "chrome-launcher": "^0.15.2", "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", + "debug": "^2.2.0", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "selfsigned": "^2.4.1", + "serve-static": "^1.13.1", + "temp-dir": "^2.0.0", "ws": "^6.2.2" - } - }, - "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">=18" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "peer": true, "dependencies": { - "@types/yargs-parser": "*" + "ms": "2.0.0" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "peer": true + }, + "node_modules/@react-native/dev-middleware/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", "dev": true, "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "async-limiter": "~1.0.0" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@react-native/gradle-plugin": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.84.tgz", + "integrity": "sha512-wYWC5WWXqzCCe4PDogz9pNc4xH5ZamahW5XGSbrrYJ5V3walZ+7z43V6iEBJkZbLjj9YBcSttkXYGr1Xh4veAg==", "dev": true, "peer": true, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "node_modules/@react-native/js-polyfills": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.84.tgz", + "integrity": "sha512-+PgxuUjBw9JVlz6m4ECsIJMLbDopnr4rpLmsG32hQaJrg0wMuvHtsgAY/J/aVCSG2GNUXexfjrnhc+O9yGOZXQ==", "dev": true, "peer": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, "engines": { - "node": ">= 10" + "node": ">=18" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "peer": true - }, - "node_modules/@react-native-community/cli-server-api/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@react-native/metro-babel-transformer": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.84.tgz", + "integrity": "sha512-YtVGq7jkgyUECv5yt4BOFbOXyW4ddUn8+dnwGGpJKdfhXYL5o5++AxNdE+2x+SZdkj3JUVekGKPwRabFECABaw==", "dev": true, "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@babel/core": "^7.20.0", + "@react-native/babel-preset": "0.74.84", + "hermes-parser": "0.19.1", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" } }, - "node_modules/@react-native-community/cli-server-api/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "node_modules/@react-native/normalize-colors": { + "version": "0.74.84", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz", + "integrity": "sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A==", "dev": true, - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0" - } + "peer": true }, - "node_modules/@react-native-community/cli-tools": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-13.6.8.tgz", - "integrity": "sha512-1MYlae9EkbjC7DBYOGMH5xF9yDoeNYUKgEdDjL6WAUBoF2gtwiZPM6igLKi/+dhb5sCtC7fiLrLi0Oevdf+RmQ==", + "node_modules/@react-spring/animated": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.3.tgz", + "integrity": "sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==", "dev": true, - "peer": true, "dependencies": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^7.5.2", - "shell-quote": "^1.7.3", - "sudo-prompt": "^9.0.0" + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@react-spring/core": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.3.tgz", + "integrity": "sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==", "dev": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@react-spring/animated": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@react-spring/shared": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.3.tgz", + "integrity": "sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==", "dev": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@react-spring/types": "~9.7.3" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@react-spring/types": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.3.tgz", + "integrity": "sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==", + "dev": true + }, + "node_modules/@react-spring/web": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.3.tgz", + "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "node_modules/@react-spring/zdog": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/zdog/-/zdog-9.7.3.tgz", + "integrity": "sha512-L+yK/1PvNi9n8cldiJ309k4LdxcPkeWE0W18l1zrP1IBIyd5NB5EPA8DMsGr9gtNnnIujtEzZk+4JIOjT8u/tw==", "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "dependencies": { + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-zdog": ">=1.0", + "zdog": ">=1.0" } }, - "node_modules/@react-native-community/cli-tools/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "node_modules/@rnx-kit/chromium-edge-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", + "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==", "dev": true, "peer": true, - "bin": { - "mime": "cli.js" + "dependencies": { + "@types/node": "^18.0.0", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=4.0.0" + "node": ">=14.15" } }, - "node_modules/@react-native-community/cli-tools/node_modules/open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, "peer": true, "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" + "undici-types": "~5.26.4" } }, - "node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "peer": true, - "bin": { - "semver": "bin/semver.js" - }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.8", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", + "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", "dev": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-types": { - "version": "13.6.8", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-13.6.8.tgz", - "integrity": "sha512-C4mVByy0i+/NPuPhdMLBR7ubEVkjVS1VwoQu/BoG1crJFNE+167QXAzH01eFbXndsjZaMWmD4Gerx7TYc6lHfA==", - "dev": true, - "peer": true, - "dependencies": { - "joi": "^17.2.1" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@react-native-community/cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@rollup/plugin-image": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-image/-/plugin-image-3.0.3.tgz", + "integrity": "sha512-qXWQwsXpvD4trSb8PeFPFajp8JLpRtqqOeNYRUKnEQNHm7e5UP7fuSRcbjQAJ7wDZBbnJvSdY5ujNBQd9B1iFg==", "dev": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "@rollup/pluginutils": "^5.0.1", + "mini-svg-data-uri": "^1.4.4" }, "engines": { - "node": ">=8" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@react-native-community/cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", "dev": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@rollup/pluginutils": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@react-native-community/cli/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, - "peer": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@react-native-community/cli/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", "dev": true, - "peer": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" }, "engines": { - "node": ">=8" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@react-native-community/cli/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, - "peer": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@react-native-community/cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dev": true, "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@hapi/hoek": "^9.0.0" } }, - "node_modules/@react-native-community/cli/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "peer": true }, - "node_modules/@react-native-community/cli/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", "dev": true, - "peer": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } + "peer": true }, - "node_modules/@react-native-community/cli/node_modules/p-limit": { + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "peer": true, "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "type-detect": "4.0.8" } }, - "node_modules/@react-native-community/cli/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "dependencies": { + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@react-native-community/cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/addon-a11y": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.1.6.tgz", + "integrity": "sha512-qmXuquveulY2eEWZPbNBXbvR4CgktQ7ZfKzNY41Y9m7qHd6wdjuS4CpcDal2pFtGStuYNnmxEOSxNKKtA1Ftlw==", "dev": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@storybook/addon-highlight": "8.1.6", + "axe-core": "^4.2.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@react-native/assets-registry": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.74.84.tgz", - "integrity": "sha512-dzUhwyaX04QosWZ8zyaaNB/WYZIdeDN1lcpfQbqiOhZJShRH+FLTDVONE/dqlMQrP+EO7lDqF0RrlIt9lnOCQQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.84.tgz", - "integrity": "sha512-UR4uiii5szIJA84mSC6GJOfYKDq7/ThyetOQT62+BBcyGeHVtHlNLNRzgaMeLqIQaT8Fq4pccMI+7QqLOMXzdw==", + "node_modules/@storybook/addon-actions": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.6.tgz", + "integrity": "sha512-EbiAdbtXN/UM4by3+qisbrQmElaIfahgNqffbst6GiCTmUCVE5if6geL1mzKd/u/rZOzx5g0EG76x8N9yDjOtg==", "dev": true, - "peer": true, "dependencies": { - "@react-native/codegen": "0.74.84" + "@storybook/core-events": "8.1.6", + "@storybook/global": "^5.0.0", + "@types/uuid": "^9.0.1", + "dequal": "^2.0.2", + "polished": "^4.2.2", + "uuid": "^9.0.0" }, - "engines": { - "node": ">=18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/babel-preset": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.74.84.tgz", - "integrity": "sha512-WUfu6Y4aGuVdocQZvx33BJiQWFH6kRCHYbZfBn2psgFrSRLgQWEQrDCxqPFObNAVSayM0rNhp2FvI5K/Eyeqlg==", + "node_modules/@storybook/addon-backgrounds": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.1.6.tgz", + "integrity": "sha512-mrBG5mkcMg6vpRUtNxyYaseD4ucrG+mZiqZnXcx8LWzwDMOd4mOODvap286z+Si0Fl1etbGDDhPU9+hV+o1arw==", "dev": true, - "peer": true, "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.74.84", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": ">=18" + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3", + "ts-dedent": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/codegen": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.74.84.tgz", - "integrity": "sha512-0hXlnu9i0o8v+gXKQi+x6T471L85kCDwW4WrJiYAeOheWrQdNNW6rC3g8+LL7HXAf7QcHGU/8/d57iYfdVK2BQ==", + "node_modules/@storybook/addon-controls": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.1.6.tgz", + "integrity": "sha512-hDMsu4yRP/ySb/G7hbd7nSFhVNz+F9hnizJGJX4XGuiSx7rAEYjvfKQKkawxTP+VeAw6iZPj1fukvOrMCQ0xxQ==", "dev": true, - "peer": true, "dependencies": { - "@babel/parser": "^7.20.0", - "glob": "^7.1.1", - "hermes-parser": "0.19.1", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" + "@storybook/blocks": "8.1.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/codegen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@storybook/addon-docs": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.1.6.tgz", + "integrity": "sha512-ejTbjDhaHn6IeTma/pwn8OutDzIqbMJKNhZx24W4FE/qvYInZIK/9gYPU9/oLKZ7FImqP3s1e4+RxDBgsq21lA==", "dev": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@babel/core": "^7.24.4", + "@mdx-js/react": "^3.0.0", + "@storybook/blocks": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/components": "8.1.6", + "@storybook/csf-plugin": "8.1.6", + "@storybook/csf-tools": "8.1.6", + "@storybook/global": "^5.0.0", + "@storybook/node-logger": "8.1.6", + "@storybook/preview-api": "8.1.6", + "@storybook/react-dom-shim": "8.1.6", + "@storybook/theming": "8.1.6", + "@storybook/types": "8.1.6", + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "fs-extra": "^11.1.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "rehype-external-links": "^3.0.0", + "rehype-slug": "^6.0.0", + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/codegen/node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "node_modules/@storybook/addon-essentials": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.1.6.tgz", + "integrity": "sha512-8ve9eM9dL6JsC5hV98unXtADvwyhIZoa3iWSeTicxWab49tvAfIM9ExwcWmUyPaB4m5q45jBSBXg66bzW2+TFw==", "dev": true, - "peer": true, "dependencies": { - "tslib": "^2.0.1" + "@storybook/addon-actions": "8.1.6", + "@storybook/addon-backgrounds": "8.1.6", + "@storybook/addon-controls": "8.1.6", + "@storybook/addon-docs": "8.1.6", + "@storybook/addon-highlight": "8.1.6", + "@storybook/addon-measure": "8.1.6", + "@storybook/addon-outline": "8.1.6", + "@storybook/addon-toolbars": "8.1.6", + "@storybook/addon-viewport": "8.1.6", + "@storybook/core-common": "8.1.6", + "@storybook/manager-api": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/preview-api": "8.1.6", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/codegen/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/addon-highlight": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.6.tgz", + "integrity": "sha512-QT95TS4OT0SJJVz/1m038COUdS2yWukQOwyq2rCgSM6nU3OHOPf/CldDK4Sdch7Z4jV9kRdRS0Pu4FB5SV+uOw==", "dev": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@storybook/global": "^5.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/codegen/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/@storybook/addon-interactions": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.1.6.tgz", + "integrity": "sha512-/5i3wXuNnduTN807BNSX7nJ0a3eQPjN49yUAfLtYtIoNCEsLAza2F5yt8aadKOj1rR6xqROc7y8NMhhC5Cp50A==", "dev": true, - "peer": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "@storybook/global": "^5.0.0", + "@storybook/instrumenter": "8.1.6", + "@storybook/test": "8.1.6", + "@storybook/types": "8.1.6", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@react-native/codegen/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/codegen/node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "node_modules/@storybook/addon-links": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.1.6.tgz", + "integrity": "sha512-EuSXoK+tpApjW08ZiC4yE9ePdJkIu36AFPJHA6FVierVU31klW+cbFqps88JpmALZkrlf+pzKf3uBIGLrkBSAw==", "dev": true, - "peer": true, "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" + "@storybook/csf": "^0.1.7", + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } } }, - "node_modules/@react-native/codegen/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/@storybook/addon-measure": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.1.6.tgz", + "integrity": "sha512-afG6XzClrkBQ9ZUZQs0rI9z/RYB+qhebG5k1NTCGYJnj7K4c+jso9nQ9vmypOBqlYKwTT2ZG+9xSK1/IhudEvg==", "dev": true, - "peer": true, "dependencies": { - "minimist": "^1.2.6" + "@storybook/global": "^5.0.0", + "tiny-invariant": "^1.3.1" }, - "bin": { - "mkdirp": "bin/cmd.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/codegen/node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "node_modules/@storybook/addon-outline": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.1.6.tgz", + "integrity": "sha512-YjH3L4kxln0fLF77oDGJ2KF1I0RNrBQ9FRtqZkGMUbplxwYU0BBrguSgVeGxTLN1q/69LmL6wjFP4nLzqZARhA==", "dev": true, - "peer": true, "dependencies": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@react-native/codegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/codegen/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/addon-storysource": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-storysource/-/addon-storysource-8.1.6.tgz", + "integrity": "sha512-Ia/KH1bjdABtZjG/ql5nlB2IHpIuMJae1Etp6Mq90Le9Dy4+F8exjCKRf+M3LrsDokTlobgcEBslHjCKj6Wjuw==", "dev": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@storybook/source-loader": "8.1.6", + "estraverse": "^5.2.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.84.tgz", - "integrity": "sha512-GBKE+1sUh86fS2XXV46gMCNHMc1KetshMbYJ0AhDhldpaILZHqRBX50mdVsiYVvkzp4QjM0nmYqefuJ9NVwicQ==", + "node_modules/@storybook/addon-themes": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-8.1.6.tgz", + "integrity": "sha512-h0IwK1fIHBWBAfxWmbXoISutHWRSlQwXb7BGEAsnZ9oQ4xA0REjtpqM6o5IkDFYQtDw0YHUvmBzyHSphA9boww==", "dev": true, - "peer": true, "dependencies": { - "@react-native-community/cli-server-api": "13.6.8", - "@react-native-community/cli-tools": "13.6.8", - "@react-native/dev-middleware": "0.74.84", - "@react-native/metro-babel-transformer": "0.74.84", - "chalk": "^4.0.0", - "execa": "^5.1.1", - "metro": "^0.80.3", - "metro-config": "^0.80.3", - "metro-core": "^0.80.3", - "node-fetch": "^2.2.0", - "querystring": "^0.2.1", - "readline": "^1.3.0" + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@storybook/addon-toolbars": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.1.6.tgz", + "integrity": "sha512-d1GciLzD2ZRqh7+b8+JGuCdx8x/MAobhTy+jKeK79d+QKNtPhqZ1OvyUbwObgD6XLF8B/3DvyP3r52lmYMwlnQ==", "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/addon-viewport": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.6.tgz", + "integrity": "sha512-4EpEkJW1fPqlHIqG7OQtnAaHh9DPj7k+guXpzWjVwHfF6AE0fXIg7Yx6iVDGPyKkRaagPw6nL8DOr2U8YwK4rQ==", "dev": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "memoizerific": "^1.11.3" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/addon-webpack5-compiler-swc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@storybook/addon-webpack5-compiler-swc/-/addon-webpack5-compiler-swc-1.0.3.tgz", + "integrity": "sha512-ahemZdpFN7Ikz2WTy0sLJ38t6OWLLKweeTNOfUh2ARd3x0CqJxAqWLBAFXJke+2KDFUQg9MTE+1rwHEFCPYUvQ==", "dev": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@swc/core": "1.5.7", + "swc-loader": "^0.2.3" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native/debugger-frontend": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.74.84.tgz", - "integrity": "sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A==", - "dev": true, - "peer": true, "engines": { "node": ">=18" } }, - "node_modules/@react-native/dev-middleware": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz", - "integrity": "sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ==", + "node_modules/@storybook/blocks": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.1.6.tgz", + "integrity": "sha512-HBp80G9puOejqlBA0iNlV3gUxc7TkBlNIVG2rmhjcvPZUueldxTUGIGvEfTLdEM6nqzNVZT+duXwqeHHnDcynA==", "dev": true, - "peer": true, "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.74.84", - "@rnx-kit/chromium-edge-launcher": "^1.0.0", - "chrome-launcher": "^0.15.2", - "connect": "^3.6.5", - "debug": "^2.2.0", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "selfsigned": "^2.4.1", - "serve-static": "^1.13.1", - "temp-dir": "^2.0.0", - "ws": "^6.2.2" + "@storybook/channels": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/components": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/csf": "^0.1.7", + "@storybook/docs-tools": "8.1.6", + "@storybook/global": "^5.0.0", + "@storybook/icons": "^1.2.5", + "@storybook/manager-api": "8.1.6", + "@storybook/preview-api": "8.1.6", + "@storybook/theming": "8.1.6", + "@storybook/types": "8.1.6", + "@types/lodash": "^4.14.167", + "color-convert": "^2.0.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "markdown-to-jsx": "7.3.2", + "memoizerific": "^1.11.3", + "polished": "^4.2.2", + "react-colorful": "^5.1.2", + "telejson": "^7.2.0", + "tocbot": "^4.20.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, - "engines": { - "node": ">=18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@react-native/dev-middleware/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@storybook/builder-manager": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.6.tgz", + "integrity": "sha512-Y5d+dikKnUuCYyh4VLEF6A+AbWughEgtipVkDKOddSTzn04trClIOKqfhQqEUObydCpgvvfdjGXJa/zDRV/UQA==", "dev": true, - "peer": true, "dependencies": { - "ms": "2.0.0" + "@fal-works/esbuild-plugin-global-externals": "^2.1.2", + "@storybook/core-common": "8.1.6", + "@storybook/manager": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@types/ejs": "^3.1.1", + "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", + "browser-assert": "^1.2.1", + "ejs": "^3.1.10", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0", + "esbuild-plugin-alias": "^0.2.1", + "express": "^4.17.3", + "fs-extra": "^11.1.0", + "process": "^0.11.10", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-native/dev-middleware/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/@react-native/dev-middleware/node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "node_modules/@storybook/builder-webpack5": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.1.6.tgz", + "integrity": "sha512-FP/vEUSM+/x+6Pof4d3EBaLH4dlzpH97Pzc3RsVD1qvEqVRHUyfbROh5Ud7/+X0m75M2kkpFtmlH/W9fVWzWGw==", "dev": true, - "peer": true, "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" + "@storybook/channels": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/core-common": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/core-webpack": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/preview": "8.1.6", + "@storybook/preview-api": "8.1.6", + "@types/node": "^18.0.0", + "@types/semver": "^7.3.4", + "browser-assert": "^1.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "cjs-module-lexer": "^1.2.3", + "constants-browserify": "^1.0.0", + "css-loader": "^6.7.1", + "es-module-lexer": "^1.5.0", + "express": "^4.17.3", + "fork-ts-checker-webpack-plugin": "^8.0.0", + "fs-extra": "^11.1.0", + "html-webpack-plugin": "^5.5.0", + "magic-string": "^0.30.5", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "semver": "^7.3.7", + "style-loader": "^3.3.1", + "terser-webpack-plugin": "^5.3.1", + "ts-dedent": "^2.0.0", + "url": "^0.11.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "webpack": "5", + "webpack-dev-middleware": "^6.1.2", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.5.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@react-native/dev-middleware/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, - "peer": true, "dependencies": { - "async-limiter": "~1.0.0" + "undici-types": "~5.26.4" } }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.74.84.tgz", - "integrity": "sha512-wYWC5WWXqzCCe4PDogz9pNc4xH5ZamahW5XGSbrrYJ5V3walZ+7z43V6iEBJkZbLjj9YBcSttkXYGr1Xh4veAg==", + "node_modules/@storybook/builder-webpack5/node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, - "peer": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, "engines": { - "node": ">=18" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/@react-native/js-polyfills": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.74.84.tgz", - "integrity": "sha512-+PgxuUjBw9JVlz6m4ECsIJMLbDopnr4rpLmsG32hQaJrg0wMuvHtsgAY/J/aVCSG2GNUXexfjrnhc+O9yGOZXQ==", + "node_modules/@storybook/builder-webpack5/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "peer": true, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/@react-native/metro-babel-transformer": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.84.tgz", - "integrity": "sha512-YtVGq7jkgyUECv5yt4BOFbOXyW4ddUn8+dnwGGpJKdfhXYL5o5++AxNdE+2x+SZdkj3JUVekGKPwRabFECABaw==", + "node_modules/@storybook/builder-webpack5/node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", "dev": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.74.84", - "hermes-parser": "0.19.1", - "nullthrows": "^1.1.1" - }, "engines": { - "node": ">=18" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "@babel/core": "*" + "webpack": "^5.0.0" } }, - "node_modules/@react-native/normalize-colors": { - "version": "0.74.84", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz", - "integrity": "sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A==", - "dev": true, - "peer": true - }, - "node_modules/@react-spring/animated": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.3.tgz", - "integrity": "sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==", + "node_modules/@storybook/channels": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", + "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", "dev": true, "dependencies": { - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" + "@storybook/client-logger": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/global": "^5.0.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-spring/core": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.3.tgz", - "integrity": "sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==", + "node_modules/@storybook/cli": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.6.tgz", + "integrity": "sha512-xsFdBoAbo+2h/UCWuVXiH4Tu49iQ6d+3R1J8F2n4N6rAKxMqAb6fzYnH1GeRYeZk0HGqb2iNc4kBkxj0jW0rKw==", "dev": true, "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" + "@babel/core": "^7.24.4", + "@babel/types": "^7.24.0", + "@ndelangen/get-tarball": "^3.0.7", + "@storybook/codemod": "8.1.6", + "@storybook/core-common": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/core-server": "8.1.6", + "@storybook/csf-tools": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/telemetry": "8.1.6", + "@storybook/types": "8.1.6", + "@types/semver": "^7.3.4", + "@yarnpkg/fslib": "2.10.3", + "@yarnpkg/libzip": "2.3.0", + "chalk": "^4.1.0", + "commander": "^6.2.1", + "cross-spawn": "^7.0.3", + "detect-indent": "^6.1.0", + "envinfo": "^7.7.3", + "execa": "^5.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "get-npm-tarball-url": "^2.0.3", + "giget": "^1.0.0", + "globby": "^14.0.1", + "jscodeshift": "^0.15.1", + "leven": "^3.1.0", + "ora": "^5.4.1", + "prettier": "^3.1.1", + "prompts": "^2.4.0", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "strip-json-comments": "^3.0.1", + "tempy": "^3.1.0", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0" + }, + "bin": { + "getstorybook": "bin/index.js", + "sb": "bin/index.js" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/react-spring/donate" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "url": "https://opencollective.com/storybook" } }, - "node_modules/@react-spring/shared": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.3.tgz", - "integrity": "sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==", + "node_modules/@storybook/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@react-spring/types": "~9.7.3" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@react-spring/types": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.3.tgz", - "integrity": "sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==", - "dev": true - }, - "node_modules/@react-spring/web": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.3.tgz", - "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==", + "node_modules/@storybook/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@react-spring/zdog": { - "version": "9.7.3", - "resolved": "https://registry.npmjs.org/@react-spring/zdog/-/zdog-9.7.3.tgz", - "integrity": "sha512-L+yK/1PvNi9n8cldiJ309k4LdxcPkeWE0W18l1zrP1IBIyd5NB5EPA8DMsGr9gtNnnIujtEzZk+4JIOjT8u/tw==", + "node_modules/@storybook/cli/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, - "dependencies": { - "@react-spring/animated": "~9.7.3", - "@react-spring/core": "~9.7.3", - "@react-spring/shared": "~9.7.3", - "@react-spring/types": "~9.7.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-zdog": ">=1.0", - "zdog": ">=1.0" + "engines": { + "node": ">= 6" } }, - "node_modules/@rnx-kit/chromium-edge-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz", - "integrity": "sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==", + "node_modules/@storybook/cli/node_modules/globby": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, - "peer": true, "dependencies": { - "@types/node": "^18.0.0", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=14.15" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/@types/node": { - "version": "18.19.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", - "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", + "node_modules/@storybook/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "peer": true, - "dependencies": { - "undici-types": "~5.26.4" + "engines": { + "node": ">=8" } }, - "node_modules/@rnx-kit/chromium-edge-launcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/@storybook/cli/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, - "peer": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.8", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", - "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", + "node_modules/@storybook/cli/node_modules/prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.30.3" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0||^4.0.0" + "node": ">=14" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@rollup/plugin-image": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-image/-/plugin-image-3.0.3.tgz", - "integrity": "sha512-qXWQwsXpvD4trSb8PeFPFajp8JLpRtqqOeNYRUKnEQNHm7e5UP7fuSRcbjQAJ7wDZBbnJvSdY5ujNBQd9B1iFg==", + "node_modules/@storybook/cli/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "mini-svg-data-uri": "^1.4.4" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=10" } }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "node_modules/@storybook/cli/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.1.0" - }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "node": ">=14.16" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", + "node_modules/@storybook/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@rollup/plugin-terser": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", - "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "node_modules/@storybook/client-logger": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", + "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", "dev": true, "dependencies": { - "serialize-javascript": "^6.0.1", - "smob": "^1.0.0", - "terser": "^5.17.4" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0||^3.0.0||^4.0.0" + "@storybook/global": "^5.0.0" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "node_modules/@storybook/codemod": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.6.tgz", + "integrity": "sha512-N5JeimfscAOcME7FIrTCmxcsXxow11vtmPTjYWoeLYokBodaH5RyWcyyQ5KS1ACtt+dHYoX8lepSZA5SBEzYog==", "dev": true, "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "@babel/core": "^7.24.4", + "@babel/preset-env": "^7.24.4", + "@babel/types": "^7.24.0", + "@storybook/csf": "^0.1.7", + "@storybook/csf-tools": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/types": "8.1.6", + "@types/cross-spawn": "^6.0.2", + "cross-spawn": "^7.0.3", + "globby": "^14.0.1", + "jscodeshift": "^0.15.1", + "lodash": "^4.17.21", + "prettier": "^3.1.1", + "recast": "^0.23.5", + "tiny-invariant": "^1.3.1" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "node_modules/@storybook/codemod/node_modules/globby": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, - "peer": true, "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true, - "peer": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true, - "peer": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, "engines": { "node": ">=18" }, @@ -7382,417 +7181,311 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "node_modules/@storybook/codemod/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/addon-a11y": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.1.6.tgz", - "integrity": "sha512-qmXuquveulY2eEWZPbNBXbvR4CgktQ7ZfKzNY41Y9m7qHd6wdjuS4CpcDal2pFtGStuYNnmxEOSxNKKtA1Ftlw==", + "node_modules/@storybook/codemod/node_modules/prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", "dev": true, - "dependencies": { - "@storybook/addon-highlight": "8.1.6", - "axe-core": "^4.2.0" + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@storybook/addon-actions": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.6.tgz", - "integrity": "sha512-EbiAdbtXN/UM4by3+qisbrQmElaIfahgNqffbst6GiCTmUCVE5if6geL1mzKd/u/rZOzx5g0EG76x8N9yDjOtg==", + "node_modules/@storybook/codemod/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, - "dependencies": { - "@storybook/core-events": "8.1.6", - "@storybook/global": "^5.0.0", - "@types/uuid": "^9.0.1", - "dequal": "^2.0.2", - "polished": "^4.2.2", - "uuid": "^9.0.0" + "engines": { + "node": ">=14.16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/addon-backgrounds": { + "node_modules/@storybook/components": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.1.6.tgz", - "integrity": "sha512-mrBG5mkcMg6vpRUtNxyYaseD4ucrG+mZiqZnXcx8LWzwDMOd4mOODvap286z+Si0Fl1etbGDDhPU9+hV+o1arw==", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.6.tgz", + "integrity": "sha512-RDcSj2gBVhK/klfcXQgINtvWe5hpJ1CYUv8hrAon3fWtZmX1+IrTJTorsdISvdHQ99o0WHZ+Ouz42O0yJnHzRg==", "dev": true, "dependencies": { + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-slot": "^1.0.2", + "@storybook/client-logger": "8.1.6", + "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", + "@storybook/icons": "^1.2.5", + "@storybook/theming": "8.1.6", + "@storybook/types": "8.1.6", "memoizerific": "^1.11.3", - "ts-dedent": "^2.0.0" + "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/addon-controls": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.1.6.tgz", - "integrity": "sha512-hDMsu4yRP/ySb/G7hbd7nSFhVNz+F9hnizJGJX4XGuiSx7rAEYjvfKQKkawxTP+VeAw6iZPj1fukvOrMCQ0xxQ==", - "dev": true, - "dependencies": { - "@storybook/blocks": "8.1.6", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "ts-dedent": "^2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" } }, - "node_modules/@storybook/addon-docs": { + "node_modules/@storybook/core-common": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.1.6.tgz", - "integrity": "sha512-ejTbjDhaHn6IeTma/pwn8OutDzIqbMJKNhZx24W4FE/qvYInZIK/9gYPU9/oLKZ7FImqP3s1e4+RxDBgsq21lA==", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.6.tgz", + "integrity": "sha512-OTlfJFaTOB588ibXrrFm0TAXam6E5xV1VXSjNXL+fIifx8Kjln2HNSy1JKjvcblQneYiV4J1xPCVnAIe0EGHDg==", "dev": true, "dependencies": { - "@babel/core": "^7.24.4", - "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/components": "8.1.6", - "@storybook/csf-plugin": "8.1.6", + "@storybook/core-events": "8.1.6", "@storybook/csf-tools": "8.1.6", - "@storybook/global": "^5.0.0", "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/react-dom-shim": "8.1.6", - "@storybook/theming": "8.1.6", "@storybook/types": "8.1.6", - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "@yarnpkg/fslib": "2.10.3", + "@yarnpkg/libzip": "2.3.0", + "chalk": "^4.1.0", + "cross-spawn": "^7.0.3", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0", + "esbuild-register": "^3.5.0", + "execa": "^5.0.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", "fs-extra": "^11.1.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "rehype-external-links": "^3.0.0", - "rehype-slug": "^6.0.0", - "ts-dedent": "^2.0.0" + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "prettier-fallback": "npm:prettier@^3", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "semver": "^7.3.7", + "tempy": "^3.1.0", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0", + "util": "^0.12.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } } }, - "node_modules/@storybook/addon-essentials": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.1.6.tgz", - "integrity": "sha512-8ve9eM9dL6JsC5hV98unXtADvwyhIZoa3iWSeTicxWab49tvAfIM9ExwcWmUyPaB4m5q45jBSBXg66bzW2+TFw==", + "node_modules/@storybook/core-common/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@storybook/addon-actions": "8.1.6", - "@storybook/addon-backgrounds": "8.1.6", - "@storybook/addon-controls": "8.1.6", - "@storybook/addon-docs": "8.1.6", - "@storybook/addon-highlight": "8.1.6", - "@storybook/addon-measure": "8.1.6", - "@storybook/addon-outline": "8.1.6", - "@storybook/addon-toolbars": "8.1.6", - "@storybook/addon-viewport": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/manager-api": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", - "ts-dedent": "^2.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/addon-highlight": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.6.tgz", - "integrity": "sha512-QT95TS4OT0SJJVz/1m038COUdS2yWukQOwyq2rCgSM6nU3OHOPf/CldDK4Sdch7Z4jV9kRdRS0Pu4FB5SV+uOw==", + "node_modules/@storybook/core-common/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "balanced-match": "^1.0.0" } }, - "node_modules/@storybook/addon-interactions": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.1.6.tgz", - "integrity": "sha512-/5i3wXuNnduTN807BNSX7nJ0a3eQPjN49yUAfLtYtIoNCEsLAza2F5yt8aadKOj1rR6xqROc7y8NMhhC5Cp50A==", + "node_modules/@storybook/core-common/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.1.6", - "@storybook/test": "8.1.6", - "@storybook/types": "8.1.6", - "polished": "^4.2.2", - "ts-dedent": "^2.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/addon-links": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.1.6.tgz", - "integrity": "sha512-EuSXoK+tpApjW08ZiC4yE9ePdJkIu36AFPJHA6FVierVU31klW+cbFqps88JpmALZkrlf+pzKf3uBIGLrkBSAw==", + "node_modules/@storybook/core-common/node_modules/glob": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, "dependencies": { - "@storybook/csf": "^0.1.7", - "@storybook/global": "^5.0.0", - "ts-dedent": "^2.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "bin": { + "glob": "dist/esm/bin.mjs" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" + "engines": { + "node": ">=16 || 14 >=14.18" }, - "peerDependenciesMeta": { - "react": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/addon-measure": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.1.6.tgz", - "integrity": "sha512-afG6XzClrkBQ9ZUZQs0rI9z/RYB+qhebG5k1NTCGYJnj7K4c+jso9nQ9vmypOBqlYKwTT2ZG+9xSK1/IhudEvg==", + "node_modules/@storybook/core-common/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-outline": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.1.6.tgz", - "integrity": "sha512-YjH3L4kxln0fLF77oDGJ2KF1I0RNrBQ9FRtqZkGMUbplxwYU0BBrguSgVeGxTLN1q/69LmL6wjFP4nLzqZARhA==", + "node_modules/@storybook/core-common/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0", - "ts-dedent": "^2.0.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/addon-storysource": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-storysource/-/addon-storysource-8.1.6.tgz", - "integrity": "sha512-Ia/KH1bjdABtZjG/ql5nlB2IHpIuMJae1Etp6Mq90Le9Dy4+F8exjCKRf+M3LrsDokTlobgcEBslHjCKj6Wjuw==", + "node_modules/@storybook/core-common/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "dependencies": { - "@storybook/source-loader": "8.1.6", - "estraverse": "^5.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "node_modules/@storybook/addon-themes": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-8.1.6.tgz", - "integrity": "sha512-h0IwK1fIHBWBAfxWmbXoISutHWRSlQwXb7BGEAsnZ9oQ4xA0REjtpqM6o5IkDFYQtDw0YHUvmBzyHSphA9boww==", + "node_modules/@storybook/core-common/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=10" } }, - "node_modules/@storybook/addon-toolbars": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.1.6.tgz", - "integrity": "sha512-d1GciLzD2ZRqh7+b8+JGuCdx8x/MAobhTy+jKeK79d+QKNtPhqZ1OvyUbwObgD6XLF8B/3DvyP3r52lmYMwlnQ==", + "node_modules/@storybook/core-common/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/addon-viewport": { + "node_modules/@storybook/core-events": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.6.tgz", - "integrity": "sha512-4EpEkJW1fPqlHIqG7OQtnAaHh9DPj7k+guXpzWjVwHfF6AE0fXIg7Yx6iVDGPyKkRaagPw6nL8DOr2U8YwK4rQ==", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", + "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", "dev": true, "dependencies": { - "memoizerific": "^1.11.3" + "@storybook/csf": "^0.1.7", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/addon-webpack5-compiler-swc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@storybook/addon-webpack5-compiler-swc/-/addon-webpack5-compiler-swc-1.0.3.tgz", - "integrity": "sha512-ahemZdpFN7Ikz2WTy0sLJ38t6OWLLKweeTNOfUh2ARd3x0CqJxAqWLBAFXJke+2KDFUQg9MTE+1rwHEFCPYUvQ==", - "dev": true, - "dependencies": { - "@swc/core": "1.5.7", - "swc-loader": "^0.2.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@storybook/blocks": { + "node_modules/@storybook/core-server": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.1.6.tgz", - "integrity": "sha512-HBp80G9puOejqlBA0iNlV3gUxc7TkBlNIVG2rmhjcvPZUueldxTUGIGvEfTLdEM6nqzNVZT+duXwqeHHnDcynA==", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.6.tgz", + "integrity": "sha512-rgkeTG8V4emzhPqjlhchsjLay0WtgK7SrXNf1X40oTJIwmbgbReLJ5EmOXBe9rhWSXJ13aKL3l6JuTLAoptSkg==", "dev": true, "dependencies": { + "@aw-web-design/x-default-browser": "1.4.126", + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-manager": "8.1.6", "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/components": "8.1.6", + "@storybook/core-common": "8.1.6", "@storybook/core-events": "8.1.6", "@storybook/csf": "^0.1.7", - "@storybook/docs-tools": "8.1.6", + "@storybook/csf-tools": "8.1.6", + "@storybook/docs-mdx": "3.1.0-next.0", "@storybook/global": "^5.0.0", - "@storybook/icons": "^1.2.5", + "@storybook/manager": "8.1.6", "@storybook/manager-api": "8.1.6", + "@storybook/node-logger": "8.1.6", "@storybook/preview-api": "8.1.6", - "@storybook/theming": "8.1.6", + "@storybook/telemetry": "8.1.6", "@storybook/types": "8.1.6", - "@types/lodash": "^4.14.167", - "color-convert": "^2.0.1", - "dequal": "^2.0.2", + "@types/detect-port": "^1.3.0", + "@types/diff": "^5.0.9", + "@types/node": "^18.0.0", + "@types/pretty-hrtime": "^1.0.0", + "@types/semver": "^7.3.4", + "better-opn": "^3.0.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "compression": "^1.7.4", + "detect-port": "^1.3.0", + "diff": "^5.2.0", + "express": "^4.17.3", + "fs-extra": "^11.1.0", + "globby": "^14.0.1", "lodash": "^4.17.21", - "markdown-to-jsx": "7.3.2", - "memoizerific": "^1.11.3", - "polished": "^4.2.2", - "react-colorful": "^5.1.2", - "telejson": "^7.2.0", - "tocbot": "^4.20.1", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/builder-manager": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.6.tgz", - "integrity": "sha512-Y5d+dikKnUuCYyh4VLEF6A+AbWughEgtipVkDKOddSTzn04trClIOKqfhQqEUObydCpgvvfdjGXJa/zDRV/UQA==", - "dev": true, - "dependencies": { - "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "8.1.6", - "@storybook/manager": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@types/ejs": "^3.1.1", - "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", - "browser-assert": "^1.2.1", - "ejs": "^3.1.10", - "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0", - "esbuild-plugin-alias": "^0.2.1", - "express": "^4.17.3", - "fs-extra": "^11.1.0", - "process": "^0.11.10", - "util": "^0.12.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/builder-webpack5": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.1.6.tgz", - "integrity": "sha512-FP/vEUSM+/x+6Pof4d3EBaLH4dlzpH97Pzc3RsVD1qvEqVRHUyfbROh5Ud7/+X0m75M2kkpFtmlH/W9fVWzWGw==", - "dev": true, - "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/core-webpack": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@types/node": "^18.0.0", - "@types/semver": "^7.3.4", - "browser-assert": "^1.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "cjs-module-lexer": "^1.2.3", - "constants-browserify": "^1.0.0", - "css-loader": "^6.7.1", - "es-module-lexer": "^1.5.0", - "express": "^4.17.3", - "fork-ts-checker-webpack-plugin": "^8.0.0", - "fs-extra": "^11.1.0", - "html-webpack-plugin": "^5.5.0", - "magic-string": "^0.30.5", - "path-browserify": "^1.0.1", - "process": "^0.11.10", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "read-pkg-up": "^7.0.1", "semver": "^7.3.7", - "style-loader": "^3.3.1", - "terser-webpack-plugin": "^5.3.1", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1", "ts-dedent": "^2.0.0", - "url": "^0.11.0", "util": "^0.12.4", "util-deprecate": "^1.0.2", - "webpack": "5", - "webpack-dev-middleware": "^6.1.2", - "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.5.0" + "watchpack": "^2.2.0", + "ws": "^8.2.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { + "node_modules/@storybook/core-server/node_modules/@types/node": { "version": "18.19.34", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", @@ -7801,139 +7494,7 @@ "undici-types": "~5.26.4" } }, - "node_modules/@storybook/builder-webpack5/node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/global": "^5.0.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/cli": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.6.tgz", - "integrity": "sha512-xsFdBoAbo+2h/UCWuVXiH4Tu49iQ6d+3R1J8F2n4N6rAKxMqAb6fzYnH1GeRYeZk0HGqb2iNc4kBkxj0jW0rKw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.24.4", - "@babel/types": "^7.24.0", - "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/core-server": "8.1.6", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/telemetry": "8.1.6", - "@storybook/types": "8.1.6", - "@types/semver": "^7.3.4", - "@yarnpkg/fslib": "2.10.3", - "@yarnpkg/libzip": "2.3.0", - "chalk": "^4.1.0", - "commander": "^6.2.1", - "cross-spawn": "^7.0.3", - "detect-indent": "^6.1.0", - "envinfo": "^7.7.3", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "fs-extra": "^11.1.0", - "get-npm-tarball-url": "^2.0.3", - "giget": "^1.0.0", - "globby": "^14.0.1", - "jscodeshift": "^0.15.1", - "leven": "^3.1.0", - "ora": "^5.4.1", - "prettier": "^3.1.1", - "prompts": "^2.4.0", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "strip-json-comments": "^3.0.1", - "tempy": "^3.1.0", - "tiny-invariant": "^1.3.1", - "ts-dedent": "^2.0.0" - }, - "bin": { - "getstorybook": "bin/index.js", - "sb": "bin/index.js" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/cli/node_modules/ansi-styles": { + "node_modules/@storybook/core-server/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -7948,7 +7509,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/cli/node_modules/chalk": { + "node_modules/@storybook/core-server/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -7964,16 +7525,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/cli/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@storybook/cli/node_modules/globby": { + "node_modules/@storybook/core-server/node_modules/globby": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", @@ -7993,7 +7545,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/cli/node_modules/has-flag": { + "node_modules/@storybook/core-server/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -8002,7 +7554,7 @@ "node": ">=8" } }, - "node_modules/@storybook/cli/node_modules/path-type": { + "node_modules/@storybook/core-server/node_modules/path-type": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", @@ -8014,22 +7566,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/cli/node_modules/prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", - "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/@storybook/cli/node_modules/semver": { + "node_modules/@storybook/core-server/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", @@ -8041,7 +7578,7 @@ "node": ">=10" } }, - "node_modules/@storybook/cli/node_modules/slash": { + "node_modules/@storybook/core-server/node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", @@ -8053,7 +7590,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/cli/node_modules/supports-color": { + "node_modules/@storybook/core-server/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -8065,276 +7602,438 @@ "node": ">=8" } }, - "node_modules/@storybook/client-logger": { + "node_modules/@storybook/core-server/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@storybook/core-webpack": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.1.6.tgz", + "integrity": "sha512-KjcAEDpHnX0M/7/hUckmZghvb+8FwrShQ2On92jkeL1HgKwzk9HUxFowMJAn1arYfkUT45q9g7HfqSmon36f5Q==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0" + "@storybook/core-common": "8.1.6", + "@storybook/node-logger": "8.1.6", + "@storybook/types": "8.1.6", + "@types/node": "^18.0.0", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod": { + "node_modules/@storybook/core-webpack/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/csf": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.8.tgz", + "integrity": "sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==", + "dev": true, + "dependencies": { + "type-fest": "^2.19.0" + } + }, + "node_modules/@storybook/csf-plugin": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.6.tgz", - "integrity": "sha512-N5JeimfscAOcME7FIrTCmxcsXxow11vtmPTjYWoeLYokBodaH5RyWcyyQ5KS1ACtt+dHYoX8lepSZA5SBEzYog==", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.1.6.tgz", + "integrity": "sha512-y2OW84leoWsqfBXb7EoRy2QUmtsI3gpqYqpyD/d5K+vQ+E9CBel2WB8RPrwcYm2L88WPDaufQQDzqyB7aMx4fQ==", "dev": true, "dependencies": { - "@babel/core": "^7.24.4", - "@babel/preset-env": "^7.24.4", + "@storybook/csf-tools": "8.1.6", + "unplugin": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-tools": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.6.tgz", + "integrity": "sha512-jrKfHFNhiLBhWWW4/fm2wgKEVg55e6QuYUHY16KGd7PdPuzm+2Pt7jIl5V9yIj6a59YbjeMpT6jWPKbFx2TuCw==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0", "@storybook/csf": "^0.1.7", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", "@storybook/types": "8.1.6", - "@types/cross-spawn": "^6.0.2", - "cross-spawn": "^7.0.3", - "globby": "^14.0.1", - "jscodeshift": "^0.15.1", - "lodash": "^4.17.21", - "prettier": "^3.1.1", + "fs-extra": "^11.1.0", "recast": "^0.23.5", - "tiny-invariant": "^1.3.1" + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/globby": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", - "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", + "node_modules/@storybook/docs-mdx": { + "version": "3.1.0-next.0", + "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-3.1.0-next.0.tgz", + "integrity": "sha512-t4syFIeSyufieNovZbLruPt2DmRKpbwL4fERCZ1MifWDRIORCKLc4NCEHy+IqvIqd71/SJV2k4B51nF7vlJfmQ==", + "dev": true + }, + "node_modules/@storybook/docs-tools": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.6.tgz", + "integrity": "sha512-IhqQHSJ5nEBEJ162P/6/6c45toLinWpAkB7pwbAoP00djZSzfHNdQ4HfpZSGfD4GUJIvzsqMzUlyqCKLAoRPPA==", "dev": true, "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" + "@storybook/core-common": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/preview-api": "8.1.6", + "@storybook/types": "8.1.6", + "@types/doctrine": "^0.0.3", + "assert": "^2.1.0", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/path-type": { + "node_modules/@storybook/global": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", + "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", + "dev": true + }, + "node_modules/@storybook/icons": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.9.tgz", + "integrity": "sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==", "dev": true, "engines": { - "node": ">=12" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/codemod/node_modules/prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", - "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "node_modules/@storybook/instrumenter": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.1.6.tgz", + "integrity": "sha512-BoNu0QaD5hhcbEVUsvmYDqUOu4HItNBMPUkj6aDCfpLxae5vstH3zsCRVqRcElbfqVhmRzD23w8+9In9M0Fajg==", "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" + "dependencies": { + "@storybook/channels": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "8.1.6", + "@vitest/utils": "^1.3.1", + "util": "^0.12.4" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "node_modules/@storybook/manager": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.6.tgz", + "integrity": "sha512-B7xc09FYHqC1sknJoWkGHBBCMQlfg7hF+4x42cGhAyYed4TeYAf7b1PDniq8L/PLbUgzTw+A62UC1fMurCcVDQ==", "dev": true, - "engines": { - "node": ">=14.16" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/components": { + "node_modules/@storybook/manager-api": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.6.tgz", - "integrity": "sha512-RDcSj2gBVhK/klfcXQgINtvWe5hpJ1CYUv8hrAon3fWtZmX1+IrTJTorsdISvdHQ99o0WHZ+Ouz42O0yJnHzRg==", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.6.tgz", + "integrity": "sha512-L/s1FdFh/P+eFmQwLtFtJHwFJrGD9H7nauaQlKJOrU3GeXfjBjtlAZQF0Q6B4ZTGxwZjQrzShpt/0yKc6gymtw==", "dev": true, "dependencies": { - "@radix-ui/react-dialog": "^1.0.5", - "@radix-ui/react-slot": "^1.0.2", + "@storybook/channels": "8.1.6", "@storybook/client-logger": "8.1.6", + "@storybook/core-events": "8.1.6", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", + "@storybook/router": "8.1.6", "@storybook/theming": "8.1.6", "@storybook/types": "8.1.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", "memoizerific": "^1.11.3", - "util-deprecate": "^1.0.2" + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" } }, - "node_modules/@storybook/core-common": { + "node_modules/@storybook/node-logger": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.6.tgz", - "integrity": "sha512-OTlfJFaTOB588ibXrrFm0TAXam6E5xV1VXSjNXL+fIifx8Kjln2HNSy1JKjvcblQneYiV4J1xPCVnAIe0EGHDg==", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.6.tgz", + "integrity": "sha512-IZEiTLFHu8Oom/vdEGpisSw5CfU+cw6/fTaX1P3EVClFOWVuy8/3X5MPu4wJH3jPym6E2DBduIUFeRsiuq61gA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preset-react-webpack": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.1.6.tgz", + "integrity": "sha512-5x5h30Nm8pTguiWAS/Vb1mYSIsoNs2JydXCekIKOVd752Iq+/cDQio6A7gIE6zbtPgfofoa7fuvweiuT6NG2bw==", "dev": true, "dependencies": { - "@storybook/core-events": "8.1.6", - "@storybook/csf-tools": "8.1.6", + "@storybook/core-webpack": "8.1.6", + "@storybook/docs-tools": "8.1.6", "@storybook/node-logger": "8.1.6", - "@storybook/types": "8.1.6", - "@yarnpkg/fslib": "2.10.3", - "@yarnpkg/libzip": "2.3.0", - "chalk": "^4.1.0", - "cross-spawn": "^7.0.3", - "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0", - "esbuild-register": "^3.5.0", - "execa": "^5.0.0", - "file-system-cache": "2.3.0", - "find-cache-dir": "^3.0.0", + "@storybook/react": "8.1.6", + "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", + "@types/node": "^18.0.0", + "@types/semver": "^7.3.4", "find-up": "^5.0.0", "fs-extra": "^11.1.0", - "glob": "^10.0.0", - "handlebars": "^4.7.7", - "lazy-universal-dotenv": "^4.0.0", - "node-fetch": "^2.0.0", - "picomatch": "^2.3.0", - "pkg-dir": "^5.0.0", - "prettier-fallback": "npm:prettier@^3", - "pretty-hrtime": "^1.0.3", - "resolve-from": "^5.0.0", + "magic-string": "^0.30.5", + "react-docgen": "^7.0.0", + "resolve": "^1.22.8", "semver": "^7.3.7", - "tempy": "^3.1.0", - "tiny-invariant": "^1.3.1", - "ts-dedent": "^2.0.0", - "util": "^0.12.4" + "tsconfig-paths": "^4.2.0", + "webpack": "5" + }, + "engines": { + "node": ">=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "prettier": "^2 || ^3" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" }, "peerDependenciesMeta": { - "prettier": { + "typescript": { "optional": true } } }, - "node_modules/@storybook/core-common/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/preset-react-webpack/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" - }, + "node": ">=10" + } + }, + "node_modules/@storybook/preview": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.1.6.tgz", + "integrity": "sha512-o9OgOmO10GyX1ZC7WiapYqGdst4TOCPLqWSu3H2nL4ZT7BQLUQfCy30kyoMO7KyxCgc5K5rcqG7qZ/N0tfUgRg==", + "dev": true, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-common/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@storybook/preview-api": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", + "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "@storybook/channels": "8.1.6", + "@storybook/client-logger": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/csf": "^0.1.7", + "@storybook/global": "^5.0.0", + "@storybook/types": "8.1.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-common/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/react": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.1.6.tgz", + "integrity": "sha512-2CSc3MLeaY7QaYAQLwaXRboKkgQnWrSZAo/WTJcSHUr2YFxH5+iECB0Kci12GqaJklhhgmfTfVZ4Jo9ZJ6LQfg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@storybook/client-logger": "8.1.6", + "@storybook/docs-tools": "8.1.6", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "8.1.6", + "@storybook/react-dom-shim": "8.1.6", + "@storybook/types": "8.1.6", + "@types/escodegen": "^0.0.6", + "@types/estree": "^0.0.51", + "@types/node": "^18.0.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "escodegen": "^2.1.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^15.0.0", + "semver": "^7.3.7", + "ts-dedent": "^2.0.0", + "type-fest": "~2.19", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">=18.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "typescript": ">= 4.2.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@storybook/core-common/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "node_modules/@storybook/react-docgen-typescript-plugin": { + "version": "1.0.6--canary.9.0c3f3b7.0", + "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz", + "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==", "dev": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.2.2", + "tslib": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "typescript": ">= 4.x", + "webpack": ">= 4" } }, - "node_modules/@storybook/core-common/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@storybook/react-dom-shim": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.1.6.tgz", + "integrity": "sha512-qP5nkAmpGFy/gshO+bVjRo1rgo/6UVDElgOd2dlUtYnfdPONiOfWko2XGYKKfxa6Cp7KU35JlZz/kHGqWG31zQ==", "dev": true, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" } }, - "node_modules/@storybook/core-common/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/@storybook/react-webpack5": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-8.1.6.tgz", + "integrity": "sha512-jpRpa85efcv+9Kl1vIuwz+QC/Ug522Tx3oAT2FZTc1ZdIBrjeT+jY0tmEDjemRuadFMpjHvrXyW1HDItP5groQ==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@storybook/builder-webpack5": "8.1.6", + "@storybook/preset-react-webpack": "8.1.6", + "@storybook/react": "8.1.6", + "@storybook/types": "8.1.6", + "@types/node": "^18.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "typescript": ">= 4.2.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@storybook/core-common/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/@storybook/react-webpack5/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" + "dependencies": { + "undici-types": "~5.26.4" } }, - "node_modules/@storybook/core-common/node_modules/semver": { + "node_modules/@storybook/react/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@storybook/react/node_modules/@types/node": { + "version": "18.19.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", + "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/react/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", @@ -8346,99 +8045,74 @@ "node": ">=10" } }, - "node_modules/@storybook/core-common/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/router": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.6.tgz", + "integrity": "sha512-tvuhB2uXHEKK640Epm1SqVzPhQ9lXYfF7FX6FleJgVYEvZpJpNTD4RojedQoLI6SUUSXNy1Vs2QV26VM0XIPHQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@storybook/client-logger": "8.1.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-events": { + "node_modules/@storybook/source-loader": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-8.1.6.tgz", + "integrity": "sha512-lKJ3vUsETsKMR9lpCyrB51Js/1W94fZjIDXNnslgLpoxhCIT4MB1eDRNa6DGynTIzhajG3ZIGymqOj/gRr3xdg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", - "ts-dedent": "^2.0.0" + "@storybook/types": "8.1.6", + "estraverse": "^5.2.0", + "lodash": "^4.17.21", + "prettier": "^3.1.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server": { + "node_modules/@storybook/source-loader/node_modules/prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@storybook/telemetry": { "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.6.tgz", - "integrity": "sha512-rgkeTG8V4emzhPqjlhchsjLay0WtgK7SrXNf1X40oTJIwmbgbReLJ5EmOXBe9rhWSXJ13aKL3l6JuTLAoptSkg==", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.6.tgz", + "integrity": "sha512-qNWjQPF6ufRvLCAavulhNYoqldDIeBvioFuCjLlwbw3BZw3ck7pwh1vZg4AJ0SAfzbnpnXPGrHe31gnxV0D6tw==", "dev": true, "dependencies": { - "@aw-web-design/x-default-browser": "1.4.126", - "@babel/core": "^7.24.4", - "@babel/parser": "^7.24.4", - "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "8.1.6", - "@storybook/channels": "8.1.6", + "@storybook/client-logger": "8.1.6", "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/csf": "^0.1.7", "@storybook/csf-tools": "8.1.6", - "@storybook/docs-mdx": "3.1.0-next.0", - "@storybook/global": "^5.0.0", - "@storybook/manager": "8.1.6", - "@storybook/manager-api": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/telemetry": "8.1.6", - "@storybook/types": "8.1.6", - "@types/detect-port": "^1.3.0", - "@types/diff": "^5.0.9", - "@types/node": "^18.0.0", - "@types/pretty-hrtime": "^1.0.0", - "@types/semver": "^7.3.4", - "better-opn": "^3.0.2", "chalk": "^4.1.0", - "cli-table3": "^0.6.1", - "compression": "^1.7.4", - "detect-port": "^1.3.0", - "diff": "^5.2.0", - "express": "^4.17.3", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", "fs-extra": "^11.1.0", - "globby": "^14.0.1", - "lodash": "^4.17.21", - "open": "^8.4.0", - "pretty-hrtime": "^1.0.3", - "prompts": "^2.4.0", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1", - "ts-dedent": "^2.0.0", - "util": "^0.12.4", - "util-deprecate": "^1.0.2", - "watchpack": "^2.2.0", - "ws": "^8.2.3" + "read-pkg-up": "^7.0.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "18.19.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", - "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@storybook/core-server/node_modules/ansi-styles": { + "node_modules/@storybook/telemetry/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -8453,7 +8127,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/core-server/node_modules/chalk": { + "node_modules/@storybook/telemetry/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -8469,72 +8143,138 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/core-server/node_modules/globby": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", - "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", + "node_modules/@storybook/telemetry/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=8" + } + }, + "node_modules/@storybook/test": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.1.6.tgz", + "integrity": "sha512-tyexfYPtOHP83pMHggoGdHadfqh/veLdS+APHxt12zmCNUobxOxnuWmImXThQiyLlXTWecreLvlMvgAIjziBsA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "8.1.6", + "@storybook/core-events": "8.1.6", + "@storybook/instrumenter": "8.1.6", + "@storybook/preview-api": "8.1.6", + "@testing-library/dom": "^9.3.4", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/user-event": "^14.5.2", + "@vitest/expect": "1.3.1", + "@vitest/spy": "^1.3.1", + "util": "^0.12.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@storybook/test/node_modules/@testing-library/jest-dom": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", + "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.3.2", + "@babel/runtime": "^7.9.2", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + }, + "peerDependencies": { + "@jest/globals": ">= 28", + "@types/bun": "latest", + "@types/jest": ">= 28", + "jest": ">= 28", + "vitest": ">= 0.32" + }, + "peerDependenciesMeta": { + "@jest/globals": { + "optional": true + }, + "@types/bun": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "jest": { + "optional": true + }, + "vitest": { + "optional": true + } } }, - "node_modules/@storybook/core-server/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "node_modules/@storybook/test/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/core-server/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/@storybook/test/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@storybook/core-server/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "node_modules/@storybook/test/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true + }, + "node_modules/@storybook/test/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/@storybook/core-server/node_modules/supports-color": { + "node_modules/@storybook/test/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -8546,2144 +8286,35 @@ "node": ">=8" } }, - "node_modules/@storybook/core-server/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "node_modules/@storybook/theming": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.6.tgz", + "integrity": "sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==", "dev": true, - "engines": { - "node": ">=10.0.0" + "dependencies": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@storybook/client-logger": "8.1.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" }, "peerDependenciesMeta": { - "bufferutil": { + "react": { "optional": true }, - "utf-8-validate": { + "react-dom": { "optional": true } } }, - "node_modules/@storybook/core-webpack": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.1.6.tgz", - "integrity": "sha512-KjcAEDpHnX0M/7/hUckmZghvb+8FwrShQ2On92jkeL1HgKwzk9HUxFowMJAn1arYfkUT45q9g7HfqSmon36f5Q==", - "dev": true, - "dependencies": { - "@storybook/core-common": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/types": "8.1.6", - "@types/node": "^18.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "18.19.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", - "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@storybook/csf": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.8.tgz", - "integrity": "sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==", - "dev": true, - "dependencies": { - "type-fest": "^2.19.0" - } - }, - "node_modules/@storybook/csf-plugin": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.1.6.tgz", - "integrity": "sha512-y2OW84leoWsqfBXb7EoRy2QUmtsI3gpqYqpyD/d5K+vQ+E9CBel2WB8RPrwcYm2L88WPDaufQQDzqyB7aMx4fQ==", - "dev": true, - "dependencies": { - "@storybook/csf-tools": "8.1.6", - "unplugin": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/csf-tools": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.6.tgz", - "integrity": "sha512-jrKfHFNhiLBhWWW4/fm2wgKEVg55e6QuYUHY16KGd7PdPuzm+2Pt7jIl5V9yIj6a59YbjeMpT6jWPKbFx2TuCw==", - "dev": true, - "dependencies": { - "@babel/generator": "^7.24.4", - "@babel/parser": "^7.24.4", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", - "@storybook/csf": "^0.1.7", - "@storybook/types": "8.1.6", - "fs-extra": "^11.1.0", - "recast": "^0.23.5", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/docs-mdx": { - "version": "3.1.0-next.0", - "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-3.1.0-next.0.tgz", - "integrity": "sha512-t4syFIeSyufieNovZbLruPt2DmRKpbwL4fERCZ1MifWDRIORCKLc4NCEHy+IqvIqd71/SJV2k4B51nF7vlJfmQ==", - "dev": true - }, - "node_modules/@storybook/docs-tools": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.6.tgz", - "integrity": "sha512-IhqQHSJ5nEBEJ162P/6/6c45toLinWpAkB7pwbAoP00djZSzfHNdQ4HfpZSGfD4GUJIvzsqMzUlyqCKLAoRPPA==", - "dev": true, - "dependencies": { - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/types": "8.1.6", - "@types/doctrine": "^0.0.3", - "assert": "^2.1.0", - "doctrine": "^3.0.0", - "lodash": "^4.17.21" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/global": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", - "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", - "dev": true - }, - "node_modules/@storybook/icons": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.9.tgz", - "integrity": "sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==", - "dev": true, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/instrumenter": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.1.6.tgz", - "integrity": "sha512-BoNu0QaD5hhcbEVUsvmYDqUOu4HItNBMPUkj6aDCfpLxae5vstH3zsCRVqRcElbfqVhmRzD23w8+9In9M0Fajg==", - "dev": true, - "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "8.1.6", - "@vitest/utils": "^1.3.1", - "util": "^0.12.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/manager": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.6.tgz", - "integrity": "sha512-B7xc09FYHqC1sknJoWkGHBBCMQlfg7hF+4x42cGhAyYed4TeYAf7b1PDniq8L/PLbUgzTw+A62UC1fMurCcVDQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/manager-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.6.tgz", - "integrity": "sha512-L/s1FdFh/P+eFmQwLtFtJHwFJrGD9H7nauaQlKJOrU3GeXfjBjtlAZQF0Q6B4ZTGxwZjQrzShpt/0yKc6gymtw==", - "dev": true, - "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/csf": "^0.1.7", - "@storybook/global": "^5.0.0", - "@storybook/icons": "^1.2.5", - "@storybook/router": "8.1.6", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "store2": "^2.14.2", - "telejson": "^7.2.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/node-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.6.tgz", - "integrity": "sha512-IZEiTLFHu8Oom/vdEGpisSw5CfU+cw6/fTaX1P3EVClFOWVuy8/3X5MPu4wJH3jPym6E2DBduIUFeRsiuq61gA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/preset-react-webpack": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.1.6.tgz", - "integrity": "sha512-5x5h30Nm8pTguiWAS/Vb1mYSIsoNs2JydXCekIKOVd752Iq+/cDQio6A7gIE6zbtPgfofoa7fuvweiuT6NG2bw==", - "dev": true, - "dependencies": { - "@storybook/core-webpack": "8.1.6", - "@storybook/docs-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/react": "8.1.6", - "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", - "@types/node": "^18.0.0", - "@types/semver": "^7.3.4", - "find-up": "^5.0.0", - "fs-extra": "^11.1.0", - "magic-string": "^0.30.5", - "react-docgen": "^7.0.0", - "resolve": "^1.22.8", - "semver": "^7.3.7", - "tsconfig-paths": "^4.2.0", - "webpack": "5" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { - "version": "18.19.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", - "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@storybook/preset-react-webpack/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/preview": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.1.6.tgz", - "integrity": "sha512-o9OgOmO10GyX1ZC7WiapYqGdst4TOCPLqWSu3H2nL4ZT7BQLUQfCy30kyoMO7KyxCgc5K5rcqG7qZ/N0tfUgRg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/preview-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", - "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", - "dev": true, - "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/csf": "^0.1.7", - "@storybook/global": "^5.0.0", - "@storybook/types": "8.1.6", - "@types/qs": "^6.9.5", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "tiny-invariant": "^1.3.1", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/react": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.1.6.tgz", - "integrity": "sha512-2CSc3MLeaY7QaYAQLwaXRboKkgQnWrSZAo/WTJcSHUr2YFxH5+iECB0Kci12GqaJklhhgmfTfVZ4Jo9ZJ6LQfg==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/docs-tools": "8.1.6", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "8.1.6", - "@storybook/react-dom-shim": "8.1.6", - "@storybook/types": "8.1.6", - "@types/escodegen": "^0.0.6", - "@types/estree": "^0.0.51", - "@types/node": "^18.0.0", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", - "escodegen": "^2.1.0", - "html-tags": "^3.1.0", - "lodash": "^4.17.21", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^15.0.0", - "semver": "^7.3.7", - "ts-dedent": "^2.0.0", - "type-fest": "~2.19", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "typescript": ">= 4.2.x" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/react-docgen-typescript-plugin": { - "version": "1.0.6--canary.9.0c3f3b7.0", - "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz", - "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "endent": "^2.0.1", - "find-cache-dir": "^3.3.1", - "flat-cache": "^3.0.4", - "micromatch": "^4.0.2", - "react-docgen-typescript": "^2.2.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "typescript": ">= 4.x", - "webpack": ">= 4" - } - }, - "node_modules/@storybook/react-dom-shim": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.1.6.tgz", - "integrity": "sha512-qP5nkAmpGFy/gshO+bVjRo1rgo/6UVDElgOd2dlUtYnfdPONiOfWko2XGYKKfxa6Cp7KU35JlZz/kHGqWG31zQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" - } - }, - "node_modules/@storybook/react-webpack5": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-8.1.6.tgz", - "integrity": "sha512-jpRpa85efcv+9Kl1vIuwz+QC/Ug522Tx3oAT2FZTc1ZdIBrjeT+jY0tmEDjemRuadFMpjHvrXyW1HDItP5groQ==", - "dev": true, - "dependencies": { - "@storybook/builder-webpack5": "8.1.6", - "@storybook/preset-react-webpack": "8.1.6", - "@storybook/react": "8.1.6", - "@storybook/types": "8.1.6", - "@types/node": "^18.0.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "typescript": ">= 4.2.x" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/react-webpack5/node_modules/@types/node": { - "version": "18.19.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", - "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@storybook/react/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@storybook/react/node_modules/@types/node": { - "version": "18.19.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.34.tgz", - "integrity": "sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@storybook/react/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/router": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.6.tgz", - "integrity": "sha512-tvuhB2uXHEKK640Epm1SqVzPhQ9lXYfF7FX6FleJgVYEvZpJpNTD4RojedQoLI6SUUSXNy1Vs2QV26VM0XIPHQ==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "8.1.6", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/source-loader": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-8.1.6.tgz", - "integrity": "sha512-lKJ3vUsETsKMR9lpCyrB51Js/1W94fZjIDXNnslgLpoxhCIT4MB1eDRNa6DGynTIzhajG3ZIGymqOj/gRr3xdg==", - "dev": true, - "dependencies": { - "@storybook/csf": "^0.1.7", - "@storybook/types": "8.1.6", - "estraverse": "^5.2.0", - "lodash": "^4.17.21", - "prettier": "^3.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/source-loader/node_modules/prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", - "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/@storybook/telemetry": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.6.tgz", - "integrity": "sha512-qNWjQPF6ufRvLCAavulhNYoqldDIeBvioFuCjLlwbw3BZw3ck7pwh1vZg4AJ0SAfzbnpnXPGrHe31gnxV0D6tw==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/csf-tools": "8.1.6", - "chalk": "^4.1.0", - "detect-package-manager": "^2.0.1", - "fetch-retry": "^5.0.2", - "fs-extra": "^11.1.0", - "read-pkg-up": "^7.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/telemetry/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/telemetry/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/telemetry/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/telemetry/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/test": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.1.6.tgz", - "integrity": "sha512-tyexfYPtOHP83pMHggoGdHadfqh/veLdS+APHxt12zmCNUobxOxnuWmImXThQiyLlXTWecreLvlMvgAIjziBsA==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/instrumenter": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@testing-library/dom": "^9.3.4", - "@testing-library/jest-dom": "^6.4.2", - "@testing-library/user-event": "^14.5.2", - "@vitest/expect": "1.3.1", - "@vitest/spy": "^1.3.1", - "util": "^0.12.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/test/node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@storybook/test/node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@storybook/test/node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@storybook/test/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@storybook/test/node_modules/@testing-library/jest-dom": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", - "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", - "dev": true, - "dependencies": { - "@adobe/css-tools": "^4.3.2", - "@babel/runtime": "^7.9.2", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=14", - "npm": ">=6", - "yarn": ">=1" - }, - "peerDependencies": { - "@jest/globals": ">= 28", - "@types/bun": "latest", - "@types/jest": ">= 28", - "jest": ">= 28", - "vitest": ">= 0.32" - }, - "peerDependenciesMeta": { - "@jest/globals": { - "optional": true - }, - "@types/bun": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "jest": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/@storybook/test/node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@storybook/test/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/@storybook/test/node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@storybook/test/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/test/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/test/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/test/node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "optional": true, - "peer": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/@storybook/test/node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true - }, - "node_modules/@storybook/test/node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@storybook/test/node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@storybook/test/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/test/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/test/node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/test/node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@storybook/test/node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@storybook/test/node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/@storybook/test/node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@storybook/test/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/test/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/test/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@storybook/test/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@storybook/test/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/test/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/test/node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/@storybook/test/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/test/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/theming": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.6.tgz", - "integrity": "sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==", - "dev": true, - "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@storybook/client-logger": "8.1.6", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/types": { + "node_modules/@storybook/types": { "version": "8.1.6", "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", @@ -11155,833 +8786,308 @@ "@testing-library/dom": ">=7.21.4" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/concat-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.3.tgz", - "integrity": "sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/detect-port": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz", - "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==", - "dev": true - }, - "node_modules/@types/diff": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.2.1.tgz", - "integrity": "sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==", - "dev": true - }, - "node_modules/@types/doctrine": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", - "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", - "dev": true - }, - "node_modules/@types/ejs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", - "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", - "dev": true - }, - "node_modules/@types/emscripten": { - "version": "1.39.13", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz", - "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==", - "dev": true - }, - "node_modules/@types/escodegen": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", - "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz", - "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/fabric": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/@types/fabric/-/fabric-5.3.7.tgz", - "integrity": "sha512-Fd2oN4zg/E6X+85HbmWSpswzcu3rvDfmwtvz1SH0j2av9OFHZDRrkLQ3K16nl6w+mSflrcTfmB719I7wXkfIsw==", - "dev": true - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", - "dev": true, - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", - "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", - "dev": true, - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true - }, - "node_modules/@types/is-empty": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.3.tgz", - "integrity": "sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", - "dev": true, - "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", - "dev": true - }, - "node_modules/@types/lodash.clonedeep": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz", - "integrity": "sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==", + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "devOptional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, - "dependencies": { - "@types/lodash": "*" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", "dev": true, "dependencies": { - "@types/unist": "^2" + "@types/estree": "*" } }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true }, - "node_modules/@types/node": { - "version": "20.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", - "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, - "peer": true, "dependencies": { - "@types/node": "*" + "@babel/types": "^7.0.0" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "node_modules/@types/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true - }, - "node_modules/@types/react": { - "version": "17.0.80", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", - "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "^0.16", - "csstype": "^3.0.2" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/@types/react-dom": { - "version": "17.0.25", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.25.tgz", - "integrity": "sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA==", + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, "dependencies": { - "@types/react": "^17" + "@babel/types": "^7.20.7" } }, - "node_modules/@types/react-reconciler": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz", - "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==", + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, - "peer": true, "dependencies": { - "@types/react": "*" + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@types/react-slider": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.6.tgz", - "integrity": "sha512-RS8XN5O159YQ6tu3tGZIQz1/9StMLTg/FCIPxwqh2gwVixJnlfIodtVx+fpXVMZHe7A58lAX1Q4XTgAGOQaCQg==", + "node_modules/@types/concat-stream": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.3.tgz", + "integrity": "sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==", "dev": true, "dependencies": { - "@types/react": "*" + "@types/node": "*" } }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "node_modules/@types/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", "dev": true, "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" + "@types/node": "*" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/styled-components": { - "version": "5.1.34", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz", - "integrity": "sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==", + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, "dependencies": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" + "@types/ms": "*" } }, - "node_modules/@types/supports-color": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.3.tgz", - "integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==", + "node_modules/@types/detect-port": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz", + "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==", "dev": true }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.9", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", - "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", - "dev": true, - "dependencies": { - "@types/jest": "*" - } - }, - "node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "node_modules/@types/diff": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.2.1.tgz", + "integrity": "sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==", "dev": true }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "node_modules/@types/doctrine": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", + "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", "dev": true }, - "node_modules/@types/webxr": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.16.tgz", - "integrity": "sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA==", - "dev": true, - "peer": true + "node_modules/@types/ejs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", + "dev": true }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } + "node_modules/@types/emscripten": { + "version": "1.39.13", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz", + "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==", + "dev": true }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "node_modules/@types/escodegen": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", + "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@types/estree": "*" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "node_modules/@types/express-serve-static-core": { + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz", + "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "node_modules/@types/fabric": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@types/fabric/-/fabric-5.3.7.tgz", + "integrity": "sha512-Fd2oN4zg/E6X+85HbmWSpswzcu3rvDfmwtvz1SH0j2av9OFHZDRrkLQ3K16nl6w+mSflrcTfmB719I7wXkfIsw==", + "dev": true }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@types/node": "*" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node_modules/@types/hast": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "dev": true, + "dependencies": { + "@types/unist": "^2" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, - "node_modules/@vitest/expect": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", - "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/is-empty": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.3.tgz", + "integrity": "sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "dependencies": { - "@vitest/spy": "1.3.1", - "@vitest/utils": "1.3.1", - "chai": "^4.3.10" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@vitest/expect/node_modules/@vitest/spy": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", - "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "dependencies": { - "tinyspy": "^2.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "@types/istanbul-lib-report": "*" } }, - "node_modules/@vitest/expect/node_modules/@vitest/utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", - "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", "dev": true, "dependencies": { - "diff-sequences": "^29.6.3", - "estree-walker": "^3.0.3", - "loupe": "^2.3.7", - "pretty-format": "^29.7.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "node_modules/@vitest/expect/node_modules/ansi-styles": { + "node_modules/@types/jest/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -11993,25 +9099,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@vitest/expect/node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@vitest/expect/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/@vitest/expect/node_modules/pretty-format": { + "node_modules/@types/jest/node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", @@ -12025,1651 +9113,1527 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@vitest/spy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", - "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", "dev": true, "dependencies": { - "tinyspy": "^2.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" } }, - "node_modules/@vitest/utils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", - "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", + "node_modules/@types/jsdom/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "dependencies": { - "diff-sequences": "^29.6.3", - "estree-walker": "^3.0.3", - "loupe": "^2.3.7", - "pretty-format": "^29.7.0" + "engines": { + "node": ">=0.12" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/@vitest/utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/@types/jsdom/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "entities": "^4.4.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/@vitest/utils/node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, - "node_modules/@vitest/utils/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0" - } + "node_modules/@types/lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", + "dev": true }, - "node_modules/@vitest/utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/@types/lodash.clonedeep": { + "version": "4.5.9", + "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz", + "integrity": "sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/lodash": "*" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@types/unist": "^2" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", "dev": true }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "dev": true }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "undici-types": "~5.26.4" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@types/node": "*" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "node_modules/@types/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==", "dev": true }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/react": { + "version": "17.0.80", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", + "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@types/prop-types": "*", + "@types/scheduler": "^0.16", + "csstype": "^3.0.2" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "node_modules/@types/react-dom": { + "version": "17.0.25", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.25.tgz", + "integrity": "sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@types/react": "^17" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "node_modules/@types/react-reconciler": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz", + "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==", "dev": true, + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@types/react": "*" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "node_modules/@types/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-RS8XN5O159YQ6tu3tGZIQz1/9StMLTg/FCIPxwqh2gwVixJnlfIodtVx+fpXVMZHe7A58lAX1Q4XTgAGOQaCQg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" + "@types/react": "*" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", "dev": true }, - "node_modules/@yarnpkg/esbuild-plugin-pnp": { - "version": "3.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", - "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "dependencies": { - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "esbuild": ">=0.10.0" + "@types/mime": "^1", + "@types/node": "*" } }, - "node_modules/@yarnpkg/fslib": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", - "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "dependencies": { - "@yarnpkg/libzip": "^2.3.0", - "tslib": "^1.13.0" - }, - "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" } }, - "node_modules/@yarnpkg/fslib/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, - "node_modules/@yarnpkg/libzip": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", - "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", + "node_modules/@types/styled-components": { + "version": "5.1.34", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz", + "integrity": "sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==", "dev": true, "dependencies": { - "@types/emscripten": "^1.39.6", - "tslib": "^1.13.0" - }, - "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" } }, - "node_modules/@yarnpkg/libzip/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/@types/supports-color": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.3.tgz", + "integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==", "dev": true }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "devOptional": true - }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "dependencies": { + "@types/jest": "*" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/@types/webxr": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.16.tgz", + "integrity": "sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA==", + "dev": true, + "peer": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, - "peer": true, "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" + "@types/yargs-parser": "*" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">= 0.6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "devOptional": true, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, "bin": { - "acorn": "bin/acorn" + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "devOptional": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" + "node": ">=10" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "devOptional": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">=0.4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "devOptional": true, "dependencies": { - "debug": "4" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": ">= 6.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "ajv": "^8.0.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, - "peerDependencies": { - "ajv": "^8.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { - "ajv": { + "typescript": { "optional": true } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=10" } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, "peerDependencies": { - "ajv": "^6.9.1" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "peer": true + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitest/expect": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", + "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "@vitest/spy": "1.3.1", + "@vitest/utils": "1.3.1", + "chai": "^4.3.10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "node_modules/@vitest/expect/node_modules/@vitest/spy": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", + "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", "dev": true, - "peer": true, "dependencies": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/ansi-fragments/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "node_modules/@vitest/expect/node_modules/@vitest/utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", + "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=6" + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/ansi-fragments/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "node_modules/@vitest/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "peer": true, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansi-fragments/node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "node_modules/@vitest/expect/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, - "peer": true + "dependencies": { + "@types/estree": "^1.0.0" + } }, - "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/@vitest/expect/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ansi-fragments/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "node_modules/@vitest/spy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", + "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", "dev": true, - "peer": true, "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "tinyspy": "^2.2.0" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/ansi-fragments/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/@vitest/utils": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", "dev": true, - "peer": true, "dependencies": { - "ansi-regex": "^4.1.0" + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "node_modules/@vitest/utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, - "engines": { - "node": ">=8" + "node_modules/@vitest/utils/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@vitest/utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ansi-styles/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "node_modules/ansi-styles/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true }, - "node_modules/app-root-dir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", - "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", - "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, - "peer": true - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "optional": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", - "optional": true, "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true }, - "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@xtuc/long": "4.2.2" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/esbuild-plugin-pnp": { + "version": "3.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", + "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "esbuild": ">=0.10.0" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "node_modules/@yarnpkg/fslib": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", + "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" + "@yarnpkg/libzip": "^2.3.0", + "tslib": "^1.13.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "node_modules/@yarnpkg/fslib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@yarnpkg/libzip": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", + "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "@types/emscripten": "^1.39.6", + "tslib": "^1.13.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, - "node_modules/asap": { + "node_modules/@yarnpkg/libzip/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/abab": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "peer": true + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "devOptional": true }, - "node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, + "peer": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, "engines": { - "node": "*" + "node": ">=6.5" } }, - "node_modules/ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { - "tslib": "^2.0.1" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "optional": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "peer": true + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "devOptional": true + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "devOptional": true, + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/attr-accept": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", - "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 10.0.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "devOptional": true, "dependencies": { - "possible-typed-array-names": "^1.0.0" + "debug": "4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6.0.0" } }, - "node_modules/axe-core": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", - "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, "engines": { - "node": ">=4" - } - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/babel-jest/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "ajv": "^8.0.0" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/babel-jest/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "dev": true, + "peer": true + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "type-fest": "^0.21.3" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-jest/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", "dev": true, - "engines": { - "node": ">=8" + "peer": true, + "dependencies": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" } }, - "node_modules/babel-jest/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "node_modules/ansi-fragments/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, + "peer": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">=6" } }, - "node_modules/babel-jest/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "node_modules/ansi-fragments/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true, + "peer": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=4" } }, - "node_modules/babel-jest/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/ansi-fragments/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "peer": true }, - "node_modules/babel-jest/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/ansi-fragments/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "node": ">=6" } }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "node_modules/ansi-fragments/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "peer": true, "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" + "node": ">=6" } }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "devOptional": true, "engines": { "node": ">=8" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" + "color-convert": "^1.9.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=4" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "node_modules/ansi-styles/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "color-name": "1.1.3" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "node_modules/ansi-styles/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">= 8" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "node_modules/app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", + "dev": true + }, + "node_modules/appdirsjs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", "dev": true, + "peer": true + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "optional": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">=10" } }, - "node_modules/babel-plugin-styled-components": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", - "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "lodash": "^4.17.21", - "picomatch": "^2.3.1" + "tslib": "^2.0.0" }, - "peerDependencies": { - "styled-components": ">= 2" + "engines": { + "node": ">=10" } }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, - "peer": true, "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" + "deep-equal": "^2.0.5" } }, - "node_modules/babel-preset-current-node-syntax": { + "node_modules/array-buffer-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true }, - "node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "open": "^8.0.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" }, "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "dev": true, - "engines": { - "node": ">=0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": ">=0.6" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", "dev": true, "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "fill-range": "^7.1.1" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/browser-assert": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", - "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", - "dev": true - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "devOptional": true + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "peer": true }, - "node_modules/browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, "dependencies": { - "pako": "~0.2.0" + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" } }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "*" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", "dev": true, "dependencies": { - "node-int64": "^0.4.0" + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "engines": { + "node": ">=8" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "peer": true }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "devOptional": true + }, + "node_modules/attr-accept": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", + "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/call-bind": { + "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "possible-typed-array-names": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13678,1801 +10642,1571 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "node_modules/axe-core": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", "dev": true, - "peer": true, - "dependencies": { - "callsites": "^2.0.0" - }, "engines": { "node": ">=4" } }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, - "peer": true, "dependencies": { - "caller-callsite": "^2.0.0" + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/camel-case": { + "node_modules/babel-jest/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=6" - } - }, - "node_modules/camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", - "dev": true, + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "engines": { + "node": ">=8" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001628", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001628.tgz", - "integrity": "sha512-S3BnR4Kh26TBxbi5t5kpbcUlLJb9lhtDXISDPwOfI+JoC+ik0QksvkZtUVyikw3hjnkgkMPSJ8oIM9yMm9vflA==", + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/canvas": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", - "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", - "hasInstallScript": true, - "optional": true, "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, "engines": { - "node": ">=4" - } - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, - "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=4" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dev": true, "dependencies": { - "get-func-name": "^2.0.2" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, - "engines": { - "node": "*" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/babel-plugin-styled-components": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", + "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "lodash": "^4.17.21", + "picomatch": "^2.3.1" }, - "engines": { - "node": ">= 6" + "peerDependencies": { + "styled-components": ">= 2" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "devOptional": true, - "engines": { - "node": ">=10" + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" } }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, - "peer": true, "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" }, - "engines": { - "node": ">=12.13.0" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/chrome-launcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, - "peer": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "dev": true, - "engines": { - "node": ">=6.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "devOptional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", - "dev": true, - "dependencies": { - "consola": "^3.2.3" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", - "dev": true + ] }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", "dev": true, "dependencies": { - "source-map": "~0.6.0" + "open": "^8.0.4" }, "engines": { - "node": ">= 10.0" + "node": ">=12.0.0" } }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.6" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, "engines": { "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "engines": { - "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "ms": "2.0.0" } }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "side-channel": "^1.0.4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=0.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "big-integer": "^1.6.44" }, "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" + "node": ">= 5.10.0" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "devOptional": true, "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/clone-deep/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/browser-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", + "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", + "dev": true }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "optional": true }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "dependencies": { + "pako": "~0.2.0" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "color-name": "~1.1.4" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">=7.0.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "optional": true, - "bin": { - "color-support": "bin.js" + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" } }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "devOptional": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, - "peer": true - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { - "node": ">= 12" + "node": ">= 0.8" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", "dev": true, + "peer": true, "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "callsites": "^2.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", "dev": true, + "peer": true, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", "dev": true, + "peer": true, "dependencies": { - "ms": "2.0.0" + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": true + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "node_modules/concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "dependencies": { - "source-map": "^0.6.1" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/concat-with-sourcemaps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/condense-newlines": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", - "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==", + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-whitespace": "^0.3.0", - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/caniuse-lite": { + "version": "1.0.30001628", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001628.tgz", + "integrity": "sha512-S3BnR4Kh26TBxbi5t5kpbcUlLJb9lhtDXISDPwOfI+JoC+ik0QksvkZtUVyikw3hjnkgkMPSJ8oIM9yMm9vflA==", "dev": true, - "peer": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "hasInstallScript": true, + "optional": true, "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" }, "engines": { - "node": ">= 0.10.0" + "node": ">=6" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/connect/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, - "peer": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/connect/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "peer": true, "dependencies": { - "ee-first": "1.1.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/connect/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, - "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true, - "engines": { - "node": "^14.18.0 || >=16.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "optional": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true, - "engines": { - "node": ">= 0.6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { - "node": ">= 0.6" + "node": "*" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "dependencies": { - "browserslist": "^4.23.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "is-glob": "^4.0.1" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "devOptional": true, "engines": { "node": ">=10" } }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dev": true, - "optional": true, "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" }, "bin": { - "create-jest": "bin/create-jest.js" + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/create-jest/node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "consola": "^3.2.3" } }, - "node_modules/create-jest/node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "source-map": "~0.6.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.0" } }, - "node_modules/create-jest/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/create-jest/node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/create-jest/node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "restore-cursor": "^3.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/create-jest/node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/create-jest/node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "string-width": "^4.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/create-jest/node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "type-detect": "4.0.8" + "engines": { + "node": ">=8" } }, - "node_modules/create-jest/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@sinonjs/commons": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/create-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/create-jest/node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "node": ">=12" } }, - "node_modules/create-jest/node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/create-jest/node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=8" } }, - "node_modules/create-jest/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "optional": true, - "peer": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8" } }, - "node_modules/create-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6" } }, - "node_modules/create-jest/node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "optional": true, - "peer": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "dependencies": { + "isobject": "^3.0.1" }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "engines": { + "node": ">=0.10.0" } }, - "node_modules/create-jest/node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/clone-deep/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "optional": true, - "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/create-jest/node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/clone-deep/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "optional": true, - "peer": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/create-jest/node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/create-jest/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=7.0.0" } }, - "node_modules/create-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "bin": { + "color-support": "bin.js" } }, - "node_modules/create-jest/node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "devOptional": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "delayed-stream": "~1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8" } }, - "node_modules/create-jest/node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, + "peer": true + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": ">= 0.6" } }, - "node_modules/create-jest/node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8.0" } }, - "node_modules/create-jest/node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8" } }, - "node_modules/create-jest/node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "ms": "2.0.0" } }, - "node_modules/create-jest/node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "devOptional": true + }, + "node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "source-map": "^0.6.1" } }, - "node_modules/create-jest/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/concat-with-sourcemaps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "optional": true, - "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/create-jest/node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "node_modules/condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/create-jest/node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/create-jest/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, - "optional": true, "peer": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.10.0" } }, - "node_modules/create-jest/node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "optional": true, "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "ms": "2.0.0" } }, - "node_modules/create-jest/node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, - "optional": true, "peer": true, "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8" } }, - "node_modules/create-jest/node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "peer": true + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, - "optional": true, "peer": true, "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "ee-first": "1.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8" } }, - "node_modules/create-jest/node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "optional": true, "peer": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.6" } }, - "node_modules/create-jest/node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/create-jest/node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "safe-buffer": "5.2.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.6" } }, - "node_modules/create-jest/node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.6" } }, - "node_modules/create-jest/node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "browserslist": "^4.23.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/create-jest/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/create-jest/node_modules/pretty-format": { + "node_modules/create-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, - "optional": true, - "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/create-jest/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "optional": true, - "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/create-jest/node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/create-jest/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/create-jest/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/create-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "optional": true, - "peer": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/create-jest/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "node": ">=8" } }, "node_modules/create-jest/node_modules/supports-color": { @@ -15480,8 +12214,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -15771,10 +12503,10 @@ } }, "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "devOptional": true }, "node_modules/cssstyle": { "version": "2.3.0", @@ -15801,17 +12533,17 @@ "dev": true }, "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "devOptional": true, "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/data-view-buffer": { @@ -16223,12 +12955,12 @@ } }, "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/dir-glob": { @@ -16306,25 +13038,16 @@ ] }, "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "deprecated": "Use your platform's native DOMException instead", - "dev": true, + "devOptional": true, "dependencies": { - "webidl-conversions": "^5.0.0" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/domhandler": { @@ -16538,12 +13261,12 @@ "dev": true }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -17532,95 +14255,19 @@ } }, "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expect/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/expect/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/expect/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/express": { @@ -17725,15 +14372,6 @@ "jsdom": "^19.0.0" } }, - "node_modules/fabric/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "optional": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/fabric/node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", @@ -17746,90 +14384,6 @@ "node": ">=0.4.0" } }, - "node_modules/fabric/node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "optional": true - }, - "node_modules/fabric/node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "optional": true, - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fabric/node_modules/data-urls/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "optional": true, - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fabric/node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", - "optional": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fabric/node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "optional": true, - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fabric/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "optional": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fabric/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fabric/node_modules/jsdom": { "version": "19.0.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", @@ -17876,18 +14430,6 @@ } } }, - "node_modules/fabric/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "optional": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/fabric/node_modules/w3c-xmlserializer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", @@ -17900,36 +14442,6 @@ "node": ">=12" } }, - "node_modules/fabric/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "optional": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/fabric/node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "optional": true, - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fabric/node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "optional": true, - "engines": { - "node": ">=12" - } - }, "node_modules/fabric/node_modules/whatwg-url": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", @@ -17964,15 +14476,6 @@ } } }, - "node_modules/fabric/node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "optional": true, - "engines": { - "node": ">=12" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -18488,7 +14991,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, + "devOptional": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -19237,15 +15740,15 @@ } }, "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "devOptional": true, "dependencies": { - "whatwg-encoding": "^1.0.5" + "whatwg-encoding": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/html-entities": { @@ -19386,12 +15889,12 @@ } }, "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "devOptional": true, "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -20331,12 +16834,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -20647,20 +17144,21 @@ } }, "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -20682,149 +17180,48 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-changed-files/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus/node_modules/ansi-styles": { @@ -20858,6 +17255,20 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-circus/node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, "node_modules/jest-circus/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -20867,21 +17278,30 @@ "node": ">=8" } }, - "node_modules/jest-circus/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-circus/node_modules/supports-color": { @@ -20897,29 +17317,28 @@ } }, "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -20930,31 +17349,6 @@ } } }, - "node_modules/jest-cli/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-cli/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -20995,23 +17389,6 @@ "node": ">=8" } }, - "node_modules/jest-cli/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -21025,73 +17402,50 @@ } }, "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { + "@types/node": "*", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, "ts-node": { "optional": true } } }, - "node_modules/jest-config/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -21153,277 +17507,60 @@ "node": ">=8" } }, - "node_modules/jest-config/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/supports-color": { + "node_modules/jest-config/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "node_modules/jest-diff/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -21438,7 +17575,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/chalk": { + "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -21454,7 +17591,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/has-flag": { + "node_modules/jest-diff/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -21463,24 +17600,33 @@ "node": ">=8" } }, - "node_modules/jest-environment-jsdom/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/supports-color": { + "node_modules/jest-diff/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -21492,49 +17638,35 @@ "node": ">=8" } }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-node/node_modules/ansi-styles": { + "node_modules/jest-each/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -21549,7 +17681,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-environment-node/node_modules/chalk": { + "node_modules/jest-each/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -21565,7 +17697,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-environment-node/node_modules/has-flag": { + "node_modules/jest-each/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -21574,24 +17706,33 @@ "node": ">=8" } }, - "node_modules/jest-environment-node/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-node/node_modules/supports-color": { + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -21603,13 +17744,57 @@ "node": ">=8" } }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { @@ -21617,8 +17802,6 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -21644,8 +17827,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=8" } @@ -21655,8 +17836,6 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -21672,8 +17851,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -21684,128 +17861,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-junit": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", @@ -21831,31 +17886,57 @@ } }, "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { @@ -21898,6 +17979,32 @@ "node": ">=8" } }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-matcher-utils/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -21911,48 +18018,23 @@ } }, "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util/node_modules/ansi-styles": { @@ -21995,106 +18077,56 @@ "node": ">=8" } }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-mock/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-mock/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-mock/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } }, - "node_modules/jest-mock/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-pnp-resolver": { @@ -22119,156 +18151,41 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve-dependencies/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve/node_modules/ansi-styles": { @@ -22311,58 +18228,6 @@ "node": ">=8" } }, - "node_modules/jest-resolve/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-resolve/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-resolve/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -22376,86 +18241,35 @@ } }, "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner/node_modules/ansi-styles": { @@ -22489,12 +18303,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-runner/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/jest-runner/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -22504,56 +18312,34 @@ "node": ">=8" } }, - "node_modules/jest-runner/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-runner/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runner/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/jest-runner/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "has-flag": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/jest-runner/node_modules/source-map": { @@ -22565,6 +18351,16 @@ "node": ">=0.10.0" } }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -22577,100 +18373,37 @@ "node": ">=8" } }, - "node_modules/jest-runner/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runtime/node_modules/ansi-styles": { @@ -22704,12 +18437,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/jest-runtime/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -22740,67 +18467,6 @@ "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-runtime/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/jest-runtime/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -22813,113 +18479,35 @@ "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot/node_modules/ansi-styles": { @@ -22953,12 +18541,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/jest-snapshot/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -22968,56 +18550,30 @@ "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "node": ">=10" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-snapshot/node_modules/semver": { @@ -23032,15 +18588,6 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/jest-snapshot/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -23053,18 +18600,6 @@ "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/jest-styled-components": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/jest-styled-components/-/jest-styled-components-7.2.0.tgz", @@ -23085,7 +18620,6 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -23103,7 +18637,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -23119,7 +18652,6 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23136,7 +18668,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -23146,7 +18677,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -23155,45 +18685,20 @@ } }, "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate/node_modules/ansi-styles": { @@ -23248,6 +18753,32 @@ "node": ">=8" } }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -23261,46 +18792,22 @@ } }, "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-watcher/node_modules/ansi-styles": { @@ -23343,23 +18850,6 @@ "node": ">=8" } }, - "node_modules/jest-watcher/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-watcher/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -23632,41 +19122,40 @@ } }, "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, "peerDependencies": { "canvas": "^2.5.0" @@ -23678,9 +19167,9 @@ } }, "node_modules/jsdom/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -23689,18 +19178,83 @@ "node": ">=0.4.0" } }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/jsdom/node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/jsdom/node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" }, "engines": { - "node": ">= 6" + "node": ">=0.4.0" + } + }, + "node_modules/jsdom/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/jsdom/node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/jsesc": { @@ -28619,22 +24173,6 @@ "node": ">=18" } }, - "node_modules/metro-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/metro-config/node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -28645,36 +24183,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/metro-config/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/metro-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/metro-config/node_modules/cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -28691,16 +24199,6 @@ "node": ">=4" } }, - "node_modules/metro-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/metro-config/node_modules/import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -28715,34 +24213,6 @@ "node": ">=4" } }, - "node_modules/metro-config/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-config/node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/metro-config/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -28771,34 +24241,6 @@ "node": ">=4" } }, - "node_modules/metro-config/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-config/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/metro-config/node_modules/resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", @@ -28809,19 +24251,6 @@ "node": ">=4" } }, - "node_modules/metro-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/metro-core": { "version": "0.80.9", "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.9.tgz", @@ -29098,21 +24527,6 @@ "dev": true, "peer": true }, - "node_modules/metro/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "peer": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/metro/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -29123,13 +24537,6 @@ "ms": "2.0.0" } }, - "node_modules/metro/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true - }, "node_modules/metro/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -29157,16 +24564,6 @@ "hermes-estree": "0.20.1" } }, - "node_modules/metro/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/metro/node_modules/jest-worker": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", @@ -29216,21 +24613,6 @@ "node": ">=0.10.0" } }, - "node_modules/metro/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/metro/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29251,35 +24633,6 @@ "dev": true, "peer": true }, - "node_modules/metro/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "peer": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/metro/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, "node_modules/micromark": { "version": "2.11.4", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", @@ -31862,7 +27215,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "devOptional": true + "optional": true }, "node_modules/parseurl": { "version": "1.3.3", @@ -33025,9 +28378,7 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ], - "optional": true, - "peer": true + ] }, "node_modules/qs": { "version": "6.12.1", @@ -33412,40 +28763,6 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/react-spring/node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/react-spring/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/react-spring/node_modules/@react-spring/konva": { "version": "9.7.3", "resolved": "https://registry.npmjs.org/@react-spring/konva/-/konva-9.7.3.tgz", @@ -33586,26 +28903,6 @@ "react": "^18.0.0" } }, - "node_modules/react-spring/node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "peer": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/react-spring/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "peer": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, "node_modules/react-spring/node_modules/@types/react": { "version": "18.3.3", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", @@ -33685,28 +28982,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/react-spring/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "peer": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/react-spring/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true - }, "node_modules/react-spring/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -33717,98 +28992,6 @@ "node": ">=8" } }, - "node_modules/react-spring/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-spring/node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/react-spring/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/react-spring/node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/react-spring/node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/react-spring/node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/react-spring/node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -34066,21 +29249,6 @@ "loose-envify": "^1.1.0" } }, - "node_modules/react-spring/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/react-spring/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -34104,35 +29272,6 @@ "async-limiter": "~1.0.0" } }, - "node_modules/react-spring/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "peer": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/react-spring/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, "node_modules/react-style-singleton": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", @@ -35652,9 +30791,9 @@ } }, "node_modules/resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, "engines": { "node": ">=10" @@ -36044,7 +31183,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "devOptional": true, + "optional": true, "dependencies": { "xmlchars": "^2.2.0" }, @@ -36419,6 +31558,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "peer": true, "engines": { "node": ">= 8" } @@ -37003,40 +32143,6 @@ "node": ">=4" } }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -37299,22 +32405,6 @@ "node": ">=14.16" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/terser": { "version": "5.31.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", @@ -37433,12 +32523,6 @@ "dev": true, "peer": true }, - "node_modules/throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", - "dev": true - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -37610,15 +32694,15 @@ } }, "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "devOptional": true, "dependencies": { "punycode": "^2.1.1" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/trough": { @@ -37815,15 +32899,6 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -38444,25 +33519,19 @@ } }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -38646,21 +33715,21 @@ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "devOptional": true, + "optional": true, "dependencies": { "browser-process-hrtime": "^1.0.0" } }, "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "dependencies": { - "xml-name-validator": "^3.0.0" + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/walk-up-path": { @@ -38701,12 +33770,12 @@ } }, "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "devOptional": true, "engines": { - "node": ">=10.4" + "node": ">=12" } }, "node_modules/webpack": { @@ -38885,12 +33954,27 @@ } }, "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "devOptional": true, "dependencies": { - "iconv-lite": "0.4.24" + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "devOptional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/whatwg-fetch": { @@ -38901,23 +33985,25 @@ "peer": true }, "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "devOptional": true, + "engines": { + "node": ">=12" + } }, "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "devOptional": true, "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/which": { @@ -39299,6 +34385,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, + "peer": true, "engines": { "node": ">=8.3.0" }, @@ -39322,10 +34409,13 @@ "dev": true }, "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "devOptional": true, + "engines": { + "node": ">=12" + } }, "node_modules/xmlchars": { "version": "2.2.0", @@ -39367,30 +34457,30 @@ } }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs/node_modules/emoji-regex": { diff --git a/package.json b/package.json index 42a411097..6050a74ba 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@types/fabric": "^5.3.7", - "@types/jest": "^27.4.1", + "@types/jest": "^29.5.12", "@types/lodash": "^4.14.180", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", @@ -92,8 +92,9 @@ "html-react-parser": "^2.0.0", "husky": "^7.0.4", "identity-obj-proxy": "^3.0.0", - "jest": "^27.5.1", + "jest": "^29.7.0", "jest-canvas-mock": "^2.3.1", + "jest-environment-jsdom": "^29.7.0", "jest-junit": "^16.0.0", "jest-styled-components": "^7.0.8", "lint-staged": "^12.3.7", diff --git a/tests/footer/footer.spec.tsx b/tests/footer/footer.spec.tsx index 2e18f6ff0..adde45428 100644 --- a/tests/footer/footer.spec.tsx +++ b/tests/footer/footer.spec.tsx @@ -8,7 +8,7 @@ import { FooterHelper } from "../../src/footer/footer-helper"; describe("Footer", () => { beforeEach(() => { jest.resetAllMocks(); - jest.useFakeTimers("modern"); + jest.useFakeTimers(); jest.setSystemTime(new Date(2023, 0, 1)); }); diff --git a/tests/time-slot-bar-week/time-slot-bar-week.spec.tsx b/tests/time-slot-bar-week/time-slot-bar-week.spec.tsx index 5d818a6be..242e74ea6 100644 --- a/tests/time-slot-bar-week/time-slot-bar-week.spec.tsx +++ b/tests/time-slot-bar-week/time-slot-bar-week.spec.tsx @@ -7,7 +7,7 @@ describe("TimeSlotBarWeekCalendar", () => { beforeEach(() => { jest.resetAllMocks(); - jest.useFakeTimers("modern").setSystemTime(new Date("2023-03-01")); + jest.useFakeTimers().setSystemTime(new Date("2023-03-01")); global.ResizeObserver = jest.fn().mockImplementation(() => ({ observe: jest.fn(), diff --git a/tests/time-slot-week-view/time-slot-week-view.spec.tsx b/tests/time-slot-week-view/time-slot-week-view.spec.tsx index 56f65fd05..f0edd8f60 100644 --- a/tests/time-slot-week-view/time-slot-week-view.spec.tsx +++ b/tests/time-slot-week-view/time-slot-week-view.spec.tsx @@ -7,7 +7,7 @@ describe("TimeSlotWeekCalendar", () => { beforeEach(() => { jest.resetAllMocks(); - jest.useFakeTimers("modern").setSystemTime(new Date("2023-03-01")); + jest.useFakeTimers().setSystemTime(new Date("2023-03-01")); global.ResizeObserver = jest.fn().mockImplementation(() => ({ observe: jest.fn(), diff --git a/tests/utils/__snapshots__/calendar-helper.spec.ts.snap b/tests/utils/__snapshots__/calendar-helper.spec.ts.snap index 37c90a461..53ad3280d 100644 --- a/tests/utils/__snapshots__/calendar-helper.spec.ts.snap +++ b/tests/utils/__snapshots__/calendar-helper.spec.ts.snap @@ -1,8 +1,8 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`CalendarHelper generateDays should generate 6 weeks from the specified month 1`] = ` -Array [ - Array [ +[ + [ "2023-01-01T00:00:00.000Z", "2023-01-02T00:00:00.000Z", "2023-01-03T00:00:00.000Z", @@ -11,7 +11,7 @@ Array [ "2023-01-06T00:00:00.000Z", "2023-01-07T00:00:00.000Z", ], - Array [ + [ "2023-01-08T00:00:00.000Z", "2023-01-09T00:00:00.000Z", "2023-01-10T00:00:00.000Z", @@ -20,7 +20,7 @@ Array [ "2023-01-13T00:00:00.000Z", "2023-01-14T00:00:00.000Z", ], - Array [ + [ "2023-01-15T00:00:00.000Z", "2023-01-16T00:00:00.000Z", "2023-01-17T00:00:00.000Z", @@ -29,7 +29,7 @@ Array [ "2023-01-20T00:00:00.000Z", "2023-01-21T00:00:00.000Z", ], - Array [ + [ "2023-01-22T00:00:00.000Z", "2023-01-23T00:00:00.000Z", "2023-01-24T00:00:00.000Z", @@ -38,7 +38,7 @@ Array [ "2023-01-27T00:00:00.000Z", "2023-01-28T00:00:00.000Z", ], - Array [ + [ "2023-01-29T00:00:00.000Z", "2023-01-30T00:00:00.000Z", "2023-01-31T00:00:00.000Z", @@ -47,7 +47,7 @@ Array [ "2023-02-03T00:00:00.000Z", "2023-02-04T00:00:00.000Z", ], - Array [ + [ "2023-02-05T00:00:00.000Z", "2023-02-06T00:00:00.000Z", "2023-02-07T00:00:00.000Z", @@ -60,7 +60,7 @@ Array [ `; exports[`CalendarHelper generateDecadeOfYears should generate the date for the decade and 2 years before 1`] = ` -Array [ +[ "2019-04-01T00:00:00.000Z", "2020-04-01T00:00:00.000Z", "2021-04-01T00:00:00.000Z", @@ -77,7 +77,7 @@ Array [ `; exports[`CalendarHelper generateMonths should generate the date for each month in the specified year 1`] = ` -Array [ +[ "2023-01-01T00:00:00.000Z", "2023-02-01T00:00:00.000Z", "2023-03-01T00:00:00.000Z", From 7a51010a95ef5097f64eb46a94932d878b89c0d4 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 1 Jul 2024 20:18:59 +0800 Subject: [PATCH 0229/1949] [TESTS][RL] Add user-events library to test interactions --- package-lock.json | 1 + package.json | 1 + 2 files changed, 2 insertions(+) diff --git a/package-lock.json b/package-lock.json index 4d18d11d4..71faf9cff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,6 +44,7 @@ "@storybook/test": "^8.1.6", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", + "@testing-library/user-event": "^14.5.2", "@types/fabric": "^5.3.7", "@types/jest": "^29.5.12", "@types/lodash": "^4.14.180", diff --git a/package.json b/package.json index 6050a74ba..52faeba53 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "@storybook/test": "^8.1.6", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", + "@testing-library/user-event": "^14.5.2", "@types/fabric": "^5.3.7", "@types/jest": "^29.5.12", "@types/lodash": "^4.14.180", From 554f12ffd5993ba6132724a99ca7307c5d734b6d Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 1 Jul 2024 20:29:14 +0800 Subject: [PATCH 0230/1949] [TESTS][RL] Add unit tests for date picker --- .../internal-calendar/calendar-dropdown.tsx | 2 +- tests/date-input/date-input.spec.tsx | 494 ++++++++++++++++++ 2 files changed, 495 insertions(+), 1 deletion(-) create mode 100644 tests/date-input/date-input.spec.tsx diff --git a/src/shared/internal-calendar/calendar-dropdown.tsx b/src/shared/internal-calendar/calendar-dropdown.tsx index 77bb9814d..5600ad004 100644 --- a/src/shared/internal-calendar/calendar-dropdown.tsx +++ b/src/shared/internal-calendar/calendar-dropdown.tsx @@ -8,7 +8,7 @@ const Component = ( ref: React.ForwardedRef ) => { return ( - + ); diff --git a/tests/date-input/date-input.spec.tsx b/tests/date-input/date-input.spec.tsx new file mode 100644 index 000000000..dadf606de --- /dev/null +++ b/tests/date-input/date-input.spec.tsx @@ -0,0 +1,494 @@ +import { + act, + render, + screen, + waitFor, + waitForElementToBeRemoved, + within, +} from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { DateInput } from "../../src"; + +const FIELD_TESTID = "e2e"; +const CALENDAR_TESTID = "calendar-dropdown"; + +// TODO: act can be removed after upgrading react-testing-library +// ============================================================================= +// UNIT TESTS +// ============================================================================= +describe("DateInput", () => { + beforeEach(() => { + jest.resetAllMocks(); + jest.useFakeTimers({ + doNotFake: ["setInterval", "setTimeout", "requestAnimationFrame"], + }).setSystemTime(new Date("2024-02-01T12:00:00")); + }); + + it("should render the field with calendar not shown by default", async () => { + render(); + + expect(screen.queryByTestId(FIELD_TESTID)).toBeVisible(); + expect(screen.queryByTestId(CALENDAR_TESTID)).not.toBeInTheDocument(); + }); + + it("should show calendar for current month by default", async () => { + const user = userEvent.setup(); + + render(); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => + expect(screen.queryByTestId(CALENDAR_TESTID)).toBeVisible() + ); + expect( + within(screen.queryByTestId(CALENDAR_TESTID)).getByText("Feb") + ).toBeVisible(); + expect( + within(screen.queryByTestId(CALENDAR_TESTID)).getByText("2024") + ).toBeVisible(); + }); + + it("should show calendar for selected month", async () => { + const user = userEvent.setup(); + + render(); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => + expect(screen.queryByTestId(CALENDAR_TESTID)).toBeVisible() + ); + expect(screen.getByText("Jan")).toBeVisible(); + expect(screen.getByText("2023")).toBeVisible(); + }); + + describe("focus/blur behaviour", () => { + it("should call onFocus on click and onBlur via outside click", async () => { + const user = userEvent.setup(); + const mockOnFocus = jest.fn(); + const mockOnBlur = jest.fn(); + + render( + + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => screen.getByTestId(CALENDAR_TESTID)); + + expect(mockOnFocus).toHaveBeenCalledTimes(1); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await user.click(screen.getByText("Done")); + + await waitForElementToBeRemoved(() => + screen.queryByTestId(CALENDAR_TESTID) + ); + + expect(mockOnFocus).toHaveBeenCalledTimes(1); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await user.click(document.body); + + expect(mockOnFocus).toHaveBeenCalledTimes(1); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + + it("should dismiss calendar if it is open", async () => { + const user = userEvent.setup(); + const mockOnFocus = jest.fn(); + const mockOnBlur = jest.fn(); + + render( + + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => screen.getByTestId(CALENDAR_TESTID)); + + expect(mockOnFocus).toHaveBeenCalledTimes(1); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.click(document.body); + }); + + await waitForElementToBeRemoved(() => + screen.queryByTestId(CALENDAR_TESTID) + ); + + expect(mockOnFocus).toHaveBeenCalledTimes(1); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + + it("should dismiss calendar via Esc key", async () => { + const user = userEvent.setup(); + const mockOnFocus = jest.fn(); + const mockOnBlur = jest.fn(); + + render( + + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => screen.getByTestId(CALENDAR_TESTID)); + + await user.keyboard("{Escape}"); + + await waitForElementToBeRemoved(() => + screen.queryByTestId(CALENDAR_TESTID) + ); + + expect(mockOnFocus).toHaveBeenCalledTimes(1); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await user.click(document.body); + + expect(mockOnFocus).toHaveBeenCalledTimes(1); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + + it("should call onFocus and onBlur when cycling through the tab sequence", async () => { + const user = userEvent.setup(); + const mockOnFocus = jest.fn(); + const mockOnBlur = jest.fn(); + + render( + <> +
    diff --git a/stories/data-table/doc-elements.tsx b/stories/data-table/doc-elements.tsx index df9b291a6..19bffbe8c 100644 --- a/stories/data-table/doc-elements.tsx +++ b/stories/data-table/doc-elements.tsx @@ -1,7 +1,7 @@ import React, { useState } from "react"; import styled from "styled-components"; import { Toggle } from "../../src/toggle"; -import { Text } from "../../src/text"; +import { v2_Text } from "../../src/v2_text"; const Container = styled.div<{ $height: Height }>` #table-wrapper { @@ -41,7 +41,7 @@ export const DataTableWithCustomHeight = ({
    Modify the options to view the scroll behaviour
    - Number of rows + Number of rows
    - Table height + Table height = { onOverlayClick={closeDrawer} heading="Header text" > - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - + ); @@ -63,7 +63,7 @@ export const HandlingContentOverflow: StoryObj = { padding: "1rem", }} > - = { Drawer content is scrollable when its height is taller than the current screen. The header remains at the top when scrolling down. - - + + This line marks the end of content. - +
    diff --git a/stories/filter/doc-elements.tsx b/stories/filter/doc-elements.tsx index 285909114..a5c2a9132 100644 --- a/stories/filter/doc-elements.tsx +++ b/stories/filter/doc-elements.tsx @@ -5,7 +5,7 @@ import styled from "styled-components"; import { v2_Color } from "../../src/v2_color"; import { Filter, Mode } from "../../src/filter"; import { Form } from "../../src/form"; -import { Text } from "../../src/text"; +import { v2_Text } from "../../src/v2_text"; interface Props { mode: Mode; @@ -46,7 +46,7 @@ export const DateFilter = ({ value, onChange }: Props) => { export const TextFilter = () => { return ( - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi venenatis neque felis, ac tempor erat iaculis et. Nam elementum at lectus et dapibus. Orci varius natoque penatibus et magnis dis @@ -56,7 +56,7 @@ export const TextFilter = () => { interdum. Fusce auctor pharetra lorem eu rhoncus. Integer consectetur in odio sed vestibulum. Nunc imperdiet ligula non eros faucibus, non aliquam dui aliquet. - + ); }; diff --git a/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx b/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx index 555878a8b..64088e53c 100644 --- a/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx +++ b/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { HistogramSlider } from "src/histogram-slider"; import { Layout } from "src/layout"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { BIN_DATA, LARGE_BIN_DATA } from "./histogram-data"; @@ -121,13 +121,13 @@ export const WithLabels: StoryObj = { showRangeLabels renderRangeLabel={(val) => val === 1 ? ( - + 1 photo - + ) : ( - + {val} photos - + ) } /> diff --git a/stories/form/form-input-group/form-input-group.stories.tsx b/stories/form/form-input-group/form-input-group.stories.tsx index 9cf5dce92..5f016b46c 100644 --- a/stories/form/form-input-group/form-input-group.stories.tsx +++ b/stories/form/form-input-group/form-input-group.stories.tsx @@ -4,7 +4,7 @@ import { useState } from "react"; import { Form } from "src/form"; import { InputGroup } from "src/input-group"; import { Layout } from "src/layout"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -73,7 +73,7 @@ export const WithDifferentAddons: StoryObj = { return ( - Static addon + Static addon
    = { }, }} /> - List addon + List addon
    = { position: "right", }} /> - Custom addon + Custom addon
    = { showSliderLabels renderSliderLabel={(val) => val === 1 ? ( - + 1 photo - + ) : ( - + {val} photos - + ) } /> diff --git a/stories/form/form-slider/form-slider.stories.tsx b/stories/form/form-slider/form-slider.stories.tsx index 554a234e2..38f69c73d 100644 --- a/stories/form/form-slider/form-slider.stories.tsx +++ b/stories/form/form-slider/form-slider.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { InputSlider } from "src/input-slider"; import { Layout } from "src/layout"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -82,13 +82,13 @@ export const WithLabels: StoryObj = { showSliderLabels renderSliderLabel={(val) => val === 1 ? ( - + 1 photo - + ) : ( - + {val} photos - + ) } /> diff --git a/stories/form/form-textarea/doc-elements.tsx b/stories/form/form-textarea/doc-elements.tsx index 438b907a4..c9635d855 100644 --- a/stories/form/form-textarea/doc-elements.tsx +++ b/stories/form/form-textarea/doc-elements.tsx @@ -1,8 +1,8 @@ -import { Text } from "../../../src/text/text"; +import { v2_Text } from "../../../src/v2_text/text"; import styled from "styled-components"; import React from "react"; -const CustomCounterLabel = styled(Text.H6)` +const CustomCounterLabel = styled(v2_Text.H6)` text-align: right; color: #a4a4a4 !important; font-size: 14px; diff --git a/stories/image-button/doc-elements.tsx b/stories/image-button/doc-elements.tsx index b1d2eeca7..826accff3 100644 --- a/stories/image-button/doc-elements.tsx +++ b/stories/image-button/doc-elements.tsx @@ -1,7 +1,7 @@ import React from "react"; import styled from "styled-components"; import { v2_MediaQuery } from "../../src/v2_media"; -import { Text } from "../../src/text"; +import { v2_Text } from "../../src/v2_text"; // ============================================================================= // STYLING @@ -19,7 +19,7 @@ export const Wrapper = styled.div` } `; -export const HeadingLabel = styled(Text.H6)` +export const HeadingLabel = styled(v2_Text.H6)` text-align: center; ${v2_MediaQuery.MaxWidth.mobileL} { diff --git a/stories/layout/col-div.stories.tsx b/stories/layout/col-div.stories.tsx index bf00f90dd..c976ee660 100644 --- a/stories/layout/col-div.stories.tsx +++ b/stories/layout/col-div.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Layout } from "src/layout"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { Wrapper } from "./doc-elements"; type Component = typeof Layout.ColDiv; @@ -27,7 +27,7 @@ export const ColumnDivs: StoryObj = { padding: "0.5rem 0", }} > - 1 + 1 = { padding: "0.5rem 0", }} > - 2 + 2 = { padding: "0.5rem 0", }} > - 3 + 3 = { padding: "0.5rem 0", }} > - 4 + 4 = { padding: "0.5rem 0", }} > - 5 + 5 = { padding: "0.5rem 0", }} > - 6 + 6 = { padding: "0.5rem 0", }} > - 7 + 7 = { padding: "0.5rem 0", }} > - 8 + 8 = { padding: "0.5rem 0", }} > - 9 + 9 = { padding: "0.5rem 0", }} > - 10 + 10 = { padding: "0.5rem 0", }} > - 11 + 11 = { padding: "0.5rem 0", }} > - 12 + 12
    ); @@ -168,7 +168,7 @@ export const SpecifyingRanges: StoryObj = { padding: "0.5rem 0", }} > - One + One = { padding: "0.5rem 0", }} > - Two + Two = { padding: "0.5rem 0", }} > - Three + Three ); diff --git a/stories/layout/doc-elements.tsx b/stories/layout/doc-elements.tsx index 3f03c68af..ef189e8a5 100644 --- a/stories/layout/doc-elements.tsx +++ b/stories/layout/doc-elements.tsx @@ -2,7 +2,7 @@ import React from "react"; import styled, { css } from "styled-components"; import { v2_Color } from "../../src/v2_color"; import { Layout } from "../../src/layout"; -import { Text } from "../../src/text"; +import { v2_Text } from "../../src/v2_text"; interface LabelProps { children: string; @@ -14,7 +14,7 @@ interface LabelProps { export const Label = ({ children }: LabelProps) => ( - {children} + {children} ); @@ -46,7 +46,7 @@ export const PaddingLabel = ({ }: PaddingLabelProps) => ( - {children} + {children} ); @@ -90,7 +90,7 @@ const Marker = styled.div` width: 1.5rem; height: 1rem; - ${Text.XSmall} { + ${v2_Text.XSmall} { position: absolute; top: -160%; left: -40%; diff --git a/stories/layout/layout.stories.tsx b/stories/layout/layout.stories.tsx index ebbb57648..f5c887f1d 100644 --- a/stories/layout/layout.stories.tsx +++ b/stories/layout/layout.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Layout } from "src/layout"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; const meta: Meta = { title: "Getting Started/Layout", @@ -22,14 +22,14 @@ export const GeneralUsage: StoryObj = { border: "2px dotted #A4A4A4", }} > - My content + My content
    - + You can adjust the viewport to see how the maximum width in the Layout.Container affects how the content looks. - +
    ); @@ -48,14 +48,14 @@ export const SplitUsage: StoryObj = { border: "2px dotted #A4A4A4", }} > - Split usage example + Split usage example
    - + You can adjust the viewport to see how the maximum width in the Layout.Container affects how the content looks. - +
    @@ -79,8 +79,8 @@ export const FlexColumnLayout: StoryObj = { }; return ( - {renderContent(First item)} - {renderContent(Second item)} + {renderContent(First item)} + {renderContent(Second item)} ); }, @@ -100,7 +100,9 @@ export const GridLayout: StoryObj = { }} key={index} > - {index + 1} + + {index + 1} +
    ); const renderColumns = () => { diff --git a/stories/masonry/doc-elements.tsx b/stories/masonry/doc-elements.tsx index fdbed819d..edd34d901 100644 --- a/stories/masonry/doc-elements.tsx +++ b/stories/masonry/doc-elements.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { v2_Color } from "../../src/v2_color"; -import { TextStyleHelper } from "../../src/text"; +import { v2_TextStyleHelper } from "../../src/v2_text"; export const DemoContainer = styled.div` display: flex; @@ -10,6 +10,6 @@ export const DemoContainer = styled.div` background: ${v2_Color.Accent.Light[3]}; height: 6rem; - ${TextStyleHelper.getTextStyle("Body", "semibold")} + ${v2_TextStyleHelper.getTextStyle("Body", "semibold")} text-align: center; `; diff --git a/stories/navbar/doc-elements.tsx b/stories/navbar/doc-elements.tsx index a9271ab86..87229e340 100644 --- a/stories/navbar/doc-elements.tsx +++ b/stories/navbar/doc-elements.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { InboxIcon } from "@lifesg/react-icons/inbox"; -import { Text } from "../../src/text/text"; +import { v2_Text } from "../../src/v2_text/text"; import { v2_Color } from "../../src/v2_color"; import { Button } from "../../src/button"; import React from "react"; @@ -24,7 +24,7 @@ export const DesktopCustomComponentWrapper = styled.div` margin-left: 1rem; `; -export const SubLabel = styled(Text.H6)` +export const SubLabel = styled(v2_Text.H6)` color: ${v2_Color.Neutral[4]}; `; @@ -53,7 +53,7 @@ export const MobileCustomComponent = ({ onClick }: Props) => { return ( <> - John Smith + John Smith john_smith@tech.gov.sg = { default. - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -40,8 +40,8 @@ export const Default: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - - + + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et @@ -59,7 +59,7 @@ export const Default: StoryObj = { voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? - +
    ); @@ -80,7 +80,7 @@ export const NonSticky: StoryObj = { This is a non sticky banner - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -90,8 +90,8 @@ export const NonSticky: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - - + + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et @@ -109,7 +109,7 @@ export const NonSticky: StoryObj = { voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? - +
    ); @@ -130,7 +130,7 @@ export const NonDismissible: StoryObj = { This is a non dismissible banner - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -140,7 +140,7 @@ export const NonDismissible: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - +
    ); @@ -176,7 +176,7 @@ export const TextStylingOptions: StoryObj = { - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -186,7 +186,7 @@ export const TextStylingOptions: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - +
    ); @@ -219,7 +219,7 @@ export const CustomContent: StoryObj = {
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -229,7 +229,7 @@ export const CustomContent: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - +
    ); @@ -246,7 +246,7 @@ export const ClickableBanner: StoryObj = { an action. - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -256,7 +256,7 @@ export const ClickableBanner: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - + ); @@ -267,19 +267,21 @@ export const HandlingLongContent: StoryObj = { render: () => { return (
    - - View more - - - ), - onClick: (event) => { - event.preventDefault(); - alert("I got clicked"); - }, - }}> + + View more + + + ), + onClick: (event) => { + event.preventDefault(); + alert("I got clicked"); + }, + }} + > This is a notification banner with maxCollapsedHeight set. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna diff --git a/stories/pill/pill.stories.tsx b/stories/pill/pill.stories.tsx index 81669d84e..7ad78c289 100644 --- a/stories/pill/pill.stories.tsx +++ b/stories/pill/pill.stories.tsx @@ -2,7 +2,7 @@ import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; import { PlusCircleFillIcon } from "@lifesg/react-icons/plus-circle-fill"; import type { Meta, StoryObj } from "@storybook/react"; import { Pill } from "src/pill"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { StoryContainer } from "../storybook-common"; import { Grid, Row, Wrapper } from "./doc-elements"; @@ -61,15 +61,15 @@ export const Variations: StoryObj = { - Black - Grey - Green - Yellow - Red - Blue + Black + Grey + Green + Yellow + Red + Blue - Outline + Outline Label @@ -90,7 +90,7 @@ export const Variations: StoryObj = { - Solid + Solid Label diff --git a/stories/popover/doc-elements.tsx b/stories/popover/doc-elements.tsx index 963b3e87a..39b03fe9f 100644 --- a/stories/popover/doc-elements.tsx +++ b/stories/popover/doc-elements.tsx @@ -3,7 +3,7 @@ import styled from "styled-components"; import { v2_Color } from "../../src/v2_color"; import { v2_MediaQuery } from "../../src/v2_media"; import { withPopover } from "../../src/popover"; -import { Text } from "../../src/text"; +import { v2_Text } from "../../src/v2_text"; // ============================================================================= // STYLING @@ -46,7 +46,7 @@ export const CustomDiv = styled.div` // ============================================================================= const Trigger = () => ( - Hover me + Hover me ); diff --git a/stories/radio-button/doc-elements.tsx b/stories/radio-button/doc-elements.tsx index a2279dab6..5d48a1f88 100644 --- a/stories/radio-button/doc-elements.tsx +++ b/stories/radio-button/doc-elements.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { TextStyleHelper } from "src/text"; +import { v2_TextStyleHelper } from "src/v2_text"; // ============================================================================= // STYLING @@ -17,6 +17,6 @@ export const OptionContainer = styled.div` `; export const Label = styled.label` - ${TextStyleHelper.getTextStyle("Body", "regular")} + ${v2_TextStyleHelper.getTextStyle("Body", "regular")} margin-left: 1rem; `; diff --git a/stories/storybook-common/tabs.tsx b/stories/storybook-common/tabs.tsx index 6b0e8352c..be4821950 100644 --- a/stories/storybook-common/tabs.tsx +++ b/stories/storybook-common/tabs.tsx @@ -2,7 +2,7 @@ import React from "react"; import { useState } from "react"; import styled, { css } from "styled-components"; import { v2_Color } from "../../src/v2_color"; -import { Text, TextStyleHelper } from "../../src/text"; +import { v2_Text, v2_TextStyleHelper } from "../../src/v2_text"; export interface TabAttribute { title: string; @@ -36,7 +36,7 @@ export const Tabs = ({ tabs }: TabsProps): JSX.Element => { return selectedTabItem.component; } - return No content; + return No content; }; return ( @@ -74,7 +74,7 @@ const ButtonRow = styled.div` `; const Button = styled.button` - ${TextStyleHelper.getTextStyle("BodySmall", "regular")} + ${v2_TextStyleHelper.getTextStyle("BodySmall", "regular")} border: none; background: none; cursor: pointer; diff --git a/stories/storybook-common/text.style.tsx b/stories/storybook-common/text.style.tsx index c7e19b616..d843d9fb7 100644 --- a/stories/storybook-common/text.style.tsx +++ b/stories/storybook-common/text.style.tsx @@ -3,7 +3,7 @@ import { Unstyled } from "@storybook/blocks"; import React from "react"; import styled from "styled-components"; import { v2_Color } from "../../src/v2_color"; -import { Text, TextProps, TextStyleHelper } from "../../src/text"; +import { v2_Text, v2_TextProps, v2_TextStyleHelper } from "../../src/v2_text"; interface HeadingProps { children: string; @@ -13,7 +13,7 @@ interface HeadingProps { // HOC // ============================================================================= const withLink = - (Component: React.ComponentType) => + (Component: React.ComponentType) => // eslint-disable-next-line react/display-name ({ children }: HeadingProps): JSX.Element => { const linkId = convertToLinkId(children); @@ -61,7 +61,7 @@ const LinkIcon = styled(DSLinkIcon)` transform: rotate(-45deg); `; -const StyledTitle = styled(Text.D1)` +const StyledTitle = styled(v2_Text.D1)` margin: 0 0 3rem; font-weight: bold; @@ -72,7 +72,7 @@ const StyledTitle = styled(Text.D1)` } `; -const StyledSecondary = styled(Text.H1)` +const StyledSecondary = styled(v2_Text.H1)` margin: 1rem 0 1.5rem; :hover { ${Link} { @@ -81,8 +81,8 @@ const StyledSecondary = styled(Text.H1)` } `; -const StyledTertiary = styled(Text.H2)` - ${TextStyleHelper.getFontFamily("H2", "semibold")} +const StyledTertiary = styled(v2_Text.H2)` + ${v2_TextStyleHelper.getFontFamily("H2", "semibold")} margin: 1rem 0 1.5rem; :hover { ${Link} { @@ -91,7 +91,7 @@ const StyledTertiary = styled(Text.H2)` } `; -const StyledQuaternary = styled(Text.H4)` +const StyledQuaternary = styled(v2_Text.H4)` margin: 1.5rem 0; :hover { ${Link} { diff --git a/stories/tab/tab.stories.tsx b/stories/tab/tab.stories.tsx index 5b365be04..460aa5d86 100644 --- a/stories/tab/tab.stories.tsx +++ b/stories/tab/tab.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Tab } from "src/tab"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { Content } from "./doc-elements"; import { useState } from "react"; @@ -22,56 +22,56 @@ export const Default: StoryObj = { - Section A + Section A
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam commodo eget turpis sit amet luctus. Duis fringilla, libero ac eleifend vehicula, sem arcu mattis diam, eget pellentesque urna libero feugiat sem. - +
    - Section B + Section B
    - + Donec metus augue, vulputate ut laoreet pretium, cursus sed odio. Aenean imperdiet sapien nec lectus gravida, vitae tincidunt sem feugiat. Nullam sit amet tortor purus. Sed eget nulla sapien. Proin a lacus pellentesque, facilisis augue quis, vestibulum sem. - +
    - Section C + Section C
    - + Maecenas tempor dolor sit amet turpis interdum convallis. Nunc ut elit vitae justo placerat vulputate. Mauris varius sem in lectus vestibulum, sed porttitor nisi ultricies. Morbi quis commodo ipsum. - +
    - Section D + Section D
    - + Nullam sit amet tortor purus. Sed eget nulla sapien. Proin a lacus pellentesque, facilisis augue quis, vestibulum sem. Nulla pretium gravida consectetur. Curabitur vestibulum erat nisi. Proin et accumsan purus. Donec blandit tortor risus, vitae tempus magna egestas nec. - +
    @@ -85,42 +85,42 @@ export const LongerLabels: StoryObj = { - Section A + Section A
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam commodo eget turpis sit amet luctus. Duis fringilla, libero ac eleifend vehicula, sem arcu mattis diam, eget pellentesque urna libero feugiat sem. - +
    - Section B + Section B
    - + Donec metus augue, vulputate ut laoreet pretium, cursus sed odio. Aenean imperdiet sapien nec lectus gravida, vitae tincidunt sem feugiat. Nullam sit amet tortor purus. Sed eget nulla sapien. Proin a lacus pellentesque, facilisis augue quis, vestibulum sem. - +
    - Section C + Section C
    - + Maecenas tempor dolor sit amet turpis interdum convallis. Nunc ut elit vitae justo placerat vulputate. Mauris varius sem in lectus vestibulum, sed porttitor nisi ultricies. Morbi quis commodo ipsum. - +
    @@ -140,42 +140,42 @@ export const ControlledMode: StoryObj = { - Section A + Section A
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam commodo eget turpis sit amet luctus. Duis fringilla, libero ac eleifend vehicula, sem arcu mattis diam, eget pellentesque urna libero feugiat sem. - +
    - Section B + Section B
    - + Donec metus augue, vulputate ut laoreet pretium, cursus sed odio. Aenean imperdiet sapien nec lectus gravida, vitae tincidunt sem feugiat. Nullam sit amet tortor purus. Sed eget nulla sapien. Proin a lacus pellentesque, facilisis augue quis, vestibulum sem. - +
    - Section C + Section C
    - + Maecenas tempor dolor sit amet turpis interdum convallis. Nunc ut elit vitae justo placerat vulputate. Mauris varius sem in lectus vestibulum, sed porttitor nisi ultricies. Morbi quis commodo ipsum. - +
    diff --git a/stories/tag/tag.stories.tsx b/stories/tag/tag.stories.tsx index 286fb4ced..95fb3a2f4 100644 --- a/stories/tag/tag.stories.tsx +++ b/stories/tag/tag.stories.tsx @@ -2,7 +2,7 @@ import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; import { PlusCircleFillIcon } from "@lifesg/react-icons/plus-circle-fill"; import type { Meta, StoryObj } from "@storybook/react"; import { Tag } from "src/tag"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { StoryContainer } from "../storybook-common"; import { Grid, Row, Wrapper } from "./doc-elements"; @@ -81,15 +81,15 @@ export const Variations: StoryObj = { - Black - Grey - Green - Yellow - Red - Blue + Black + Grey + Green + Yellow + Red + Blue - Outline + Outline Label @@ -110,7 +110,7 @@ export const Variations: StoryObj = { - Solid + Solid Label diff --git a/stories/text-list/text-list.stories.tsx b/stories/text-list/text-list.stories.tsx index 75da84093..7428c769a 100644 --- a/stories/text-list/text-list.stories.tsx +++ b/stories/text-list/text-list.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { TextList } from "src/text-list"; import { Container, CustomOrderedList, SubContainer } from "./doc-elements"; @@ -102,7 +102,7 @@ export const OtherFeatures: StoryObj = { return ( - Reverse count + Reverse count
  • Item A
  • @@ -111,7 +111,7 @@ export const OtherFeatures: StoryObj = {
    - Custom start count + Custom start count
  • First
  • diff --git a/stories/text/a-intro.stories.tsx b/stories/text/a-intro.stories.tsx index f0ab23840..5b86bc13c 100644 --- a/stories/text/a-intro.stories.tsx +++ b/stories/text/a-intro.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { DisplayContainer, LinkDiv, TextDisplay } from "./doc-elements"; const meta: Meta = { @@ -15,40 +15,40 @@ export const Styles: StoryObj = { return ( - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} ); @@ -60,18 +60,18 @@ export const Hyperlinks: StoryObj = { render: () => { return ( - Default link - - + Small link - + ); }, @@ -81,13 +81,13 @@ export const Hyperlinks: StoryObj = { export const ExternalHyperlinks: StoryObj = { render: () => { return ( - This is an external link with the indicator - + ); }, tags: ["pattern"], diff --git a/stories/text/b-advanced.stories.tsx b/stories/text/b-advanced.stories.tsx index 94d56703b..1657b9d03 100644 --- a/stories/text/b-advanced.stories.tsx +++ b/stories/text/b-advanced.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { ButtonContainer } from "./doc-elements"; const meta: Meta = { @@ -11,13 +11,13 @@ export default meta; export const Combined: StoryObj = { render: () => { return ( - + The quick brown fox  - + jumps over - +  the lazy dog - + ); }, tags: ["pattern"], @@ -26,17 +26,17 @@ export const Combined: StoryObj = { export const Inline: StoryObj = { render: () => { return ( - + The quick  - + brown fox - +   - + jumps over - +  the lazy dog - + ); }, tags: ["pattern"], @@ -46,16 +46,16 @@ export const Paragraph: StoryObj = { render: () => { return ( <> - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod quam eget ex tincidunt dapibus. Donec vitae leo vehicula, fermentum urna vitae, gravida ex. - - + + Aenean imperdiet faucibus velit, eu maximus libero facilisis ut. Donec nulla nisi, fermentum eget lorem at, feugiat ultricies ex. Aliquam volutpat nibh non suscipit rhoncus. - + ); }, @@ -66,11 +66,11 @@ export const RenderAs: StoryObj = { render: () => { return ( <> - This is the original + This is the original
    - + This becomes a span under the hood - + ); }, diff --git a/stories/text/collection-doc-elements.tsx b/stories/text/collection-doc-elements.tsx index c94b873ac..4aaa02c1a 100644 --- a/stories/text/collection-doc-elements.tsx +++ b/stories/text/collection-doc-elements.tsx @@ -1,16 +1,20 @@ import React from "react"; import styled, { ThemeProvider } from "styled-components"; import { v2_MediaQuery } from "../../src/v2_media"; -import { Text, TextStyleHelper, TextStyleSetType } from "../../src/text"; +import { + v2_Text, + v2_TextStyleHelper, + v2_TextStyleSetType, +} from "../../src/v2_text"; import { BaseTheme, ThemeSpec } from "../../src"; export const FontDisplay = () => { return ( - Light - Regular - Semibold - Bold + Light + Regular + Semibold + Bold ); }; @@ -30,7 +34,7 @@ const FontDisplayContainer = styled.div` // FONT SIZE DISPLAY // ============================================================================= interface FontSizeDisplayProps { - textStyles: TextStyleSetType; + textStyles: v2_TextStyleSetType; theme?: ThemeSpec; } @@ -41,33 +45,33 @@ export const FontSizeDisplay = ({ const getComponent = (key: string) => { switch (key) { case "D1": - return Text.D1; + return v2_Text.D1; case "D2": - return Text.D2; + return v2_Text.D2; case "D3": - return Text.D3; + return v2_Text.D3; case "D4": - return Text.D4; + return v2_Text.D4; case "DBody": - return Text.DBody; + return v2_Text.DBody; case "H1": - return Text.H1; + return v2_Text.H1; case "H2": - return Text.H2; + return v2_Text.H2; case "H3": - return Text.H3; + return v2_Text.H3; case "H4": - return Text.H4; + return v2_Text.H4; case "H5": - return Text.H5; + return v2_Text.H5; case "H6": - return Text.H6; + return v2_Text.H6; case "BodySmall": - return Text.BodySmall; + return v2_Text.BodySmall; case "XSmall": - return Text.XSmall; + return v2_Text.XSmall; default: - return Text.Body; + return v2_Text.Body; } }; @@ -167,7 +171,7 @@ const FontSpecContainerItem = styled.li` display: flex; `; -const SpecValueLabel = styled(Text.BodySmall)` +const SpecValueLabel = styled(v2_Text.BodySmall)` ${v2_MediaQuery.MaxWidth.mobileM} { font-size: 0.75rem !important; } @@ -176,10 +180,10 @@ const SpecValueLabel = styled(Text.BodySmall)` const FontSpecLabelContainer = styled.div` width: 8rem; margin-right: 1rem; - ${TextStyleHelper.getTextStyle("BodySmall", "semibold")} + ${v2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} ${v2_MediaQuery.MaxWidth.mobileM} { width: 5rem; - ${TextStyleHelper.getTextStyle("XSmall", "semibold")} + ${v2_TextStyleHelper.getTextStyle("XSmall", "semibold")} } `; diff --git a/stories/text/doc-elements.tsx b/stories/text/doc-elements.tsx index 8d5bd3057..e9f3f2b3d 100644 --- a/stories/text/doc-elements.tsx +++ b/stories/text/doc-elements.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; -import { TextStyleHelper } from "../../src"; +import { v2_TextStyleHelper } from "../../src"; import { v2_Color } from "../../src/v2_color/color"; -import { Text } from "../../src/text/text"; +import { v2_Text } from "../../src/v2_text/text"; // ============================================================================= // TEXT DISPLAY LABEL @@ -125,7 +125,7 @@ const LabelContainer = styled.div` }} `; -const Label = styled(Text.BodySmall)` +const Label = styled(v2_Text.BodySmall)` color: ${v2_Color.Neutral[8]}; margin: 0; `; @@ -141,6 +141,6 @@ export const LinkDiv = styled.div` `; export const ButtonContainer = styled.button` - ${TextStyleHelper.getTextStyle("BodySmall", "bold")} + ${v2_TextStyleHelper.getTextStyle("BodySmall", "bold")} padding: 0.5rem; `; diff --git a/stories/timeline/timeline.stories.tsx b/stories/timeline/timeline.stories.tsx index c80444270..3ebf7298e 100644 --- a/stories/timeline/timeline.stories.tsx +++ b/stories/timeline/timeline.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Button } from "src/button"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { Timeline } from "src/timeline"; import { StoryContainer } from "../storybook-common"; import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; @@ -26,10 +26,10 @@ export const Default: StoryObj = { title: "Item 1", content: ( <> - + Just a regular text based item. Lorem ipsum dolor sit amet, consectetur. - + ), }, @@ -37,13 +37,13 @@ export const Default: StoryObj = { title: "Item 2", content: ( <> - + An example with a  - + link - + . - + ), }, @@ -51,16 +51,16 @@ export const Default: StoryObj = { title: "Item 3", content: ( <> - + This one comes with an  - - + external link - + . ), @@ -69,9 +69,9 @@ export const Default: StoryObj = { title: "Item 4", content: ( <> - + This item comes with an action button. - + { @@ -86,9 +86,9 @@ export const Default: StoryObj = { { title: "Item 5", content: ( - + This one comes with Pill DS icons. - + ), statuses: [ { @@ -108,10 +108,10 @@ export const Default: StoryObj = { { title: "Item 6", content: ( - + This one comes with Pill DS icons with long status text. - + ), statuses: [ { @@ -146,58 +146,58 @@ export const Variants: StoryObj = { title: "Item 1", variant: "completed", content: ( - + An example with completed{" "} variant - + ), }, { title: "Item 2", variant: "current", content: ( - + An example with current variant - + ), }, { title: "Item 3", variant: "upcoming-active", content: ( - + An example with upcoming-active{" "} variant - + ), }, { title: "Item 4", variant: "upcoming-inactive", content: ( - + An example with{" "} upcoming-inactive variant - + ), }, { title: "Item 5", variant: "error", content: ( - + An example with error variant - + ), }, { title: "Item 6", variant: "disabled", content: ( - + An example with disabled{" "} variant - + ), }, ]} diff --git a/stories/toast/toast.stories.tsx b/stories/toast/toast.stories.tsx index 791d11a24..f0b9cff30 100644 --- a/stories/toast/toast.stories.tsx +++ b/stories/toast/toast.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Button } from "src/button"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { Toast } from "src/toast"; type Component = typeof Toast; @@ -181,15 +181,15 @@ export const WithCustomDisplay: StoryObj = { + This is a JSX Element - + } label={ - + This is a JSX element that contains a{" "} - link - + link + } fixed={false} /> diff --git a/stories/toggle/doc-elements.tsx b/stories/toggle/doc-elements.tsx index a8bf87fa1..3f2f2b50a 100644 --- a/stories/toggle/doc-elements.tsx +++ b/stories/toggle/doc-elements.tsx @@ -1,6 +1,6 @@ import React from "react"; import styled, { css } from "styled-components"; -import { Text } from "../../src/text"; +import { v2_Text } from "../../src/v2_text"; import { v2_MediaQuery } from "../../src/v2_media"; interface StyleProps { @@ -62,7 +62,7 @@ export const Wrapper = styled.div` }} `; -export const HeadingLabel = styled(Text.H6)` +export const HeadingLabel = styled(v2_Text.H6)` text-align: center; ${v2_MediaQuery.MaxWidth.mobileL} { diff --git a/stories/toggle/toggle-6-examples.stories.tsx b/stories/toggle/toggle-6-examples.stories.tsx index f7ce9703b..b8df74d98 100644 --- a/stories/toggle/toggle-6-examples.stories.tsx +++ b/stories/toggle/toggle-6-examples.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Toggle } from "../../src"; import { Form } from "../../src/form"; -import { Text } from "../../src/text"; +import { v2_Text } from "../../src/v2_text"; type Component = typeof Toggle; @@ -106,14 +106,14 @@ export const InteractiveSublabel: StoryObj = { Clicking here toggles the button.
    Clicking here does not and{" "} - this link - {" "} + {" "} is accessible
    diff --git a/stories/uneditable-section/uneditable-section.stories.tsx b/stories/uneditable-section/uneditable-section.stories.tsx index 71db1f37f..dd315bc87 100644 --- a/stories/uneditable-section/uneditable-section.stories.tsx +++ b/stories/uneditable-section/uneditable-section.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Alert } from "src/alert"; import { Button } from "src/button"; -import { Text } from "src/text"; +import { v2_Text } from "src/v2_text"; import { UneditableSection, UneditableSectionItemMaskState, @@ -307,7 +307,7 @@ export const ComposingFromScratch: StoryObj = { marginBottom: "2rem", }} > - My custom content + My custom content Pull latest records @@ -318,12 +318,12 @@ export const ComposingFromScratch: StoryObj = { users. - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam pellentesque enim eu neque gravida, ut pulvinar magna tristique. Aenean sed malesuada arcu. Integer convallis dapibus suscipit. - + = { value="Block 287, #05-11, Tampines street 22, Singapore 534788" /> - + Another section - + { beforeEach(() => { @@ -18,9 +18,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -38,9 +38,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -55,9 +55,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -71,9 +71,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -85,9 +85,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -108,10 +108,10 @@ describe("Accordion", () => { render( - {DEFAULT_TEXT_CONTENT} + {DEFAULT_TEXT_CONTENT} - {DEFAULT_TEXT_CONTENT} + {DEFAULT_TEXT_CONTENT} ); @@ -140,9 +140,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -159,9 +159,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -177,10 +177,10 @@ describe("Accordion", () => { render( - {DEFAULT_TEXT_CONTENT} + {DEFAULT_TEXT_CONTENT} - {DEFAULT_TEXT_CONTENT} + {DEFAULT_TEXT_CONTENT} ); @@ -196,7 +196,7 @@ describe("Accordion", () => { render( - {DEFAULT_TEXT_CONTENT} + {DEFAULT_TEXT_CONTENT} ); @@ -224,9 +224,9 @@ describe("Accordion", () => { title="Item title" collapsible={false} > - + {DEFAULT_TEXT_CONTENT} - + ); From 7fd2f1a21426527b6254413fe946de4adf0da626 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 6 Aug 2024 14:57:14 +0800 Subject: [PATCH 0321/1949] [CCUBE-1521][MAHI]Deprecate component layout to V2 --- codemods/deprecate-version/deprecate-data.ts | 202 ++++++++++++++++++ codemods/deprecate-version/index.ts | 129 +---------- src/divider/divider.tsx | 6 +- src/divider/types.ts | 4 +- src/footer/footer.style.tsx | 6 +- src/form/form-wrapper.style.tsx | 4 +- src/form/types.ts | 4 +- src/index.ts | 2 +- src/layout/index.ts | 13 -- src/navbar/navbar.tsx | 6 +- .../notification-banner.styles.tsx | 4 +- .../uneditable-section.styles.tsx | 4 +- src/{layout => v2_layout}/col-div.style.tsx | 2 + src/{layout => v2_layout}/col-div.tsx | 7 +- src/{layout => v2_layout}/container.tsx | 9 +- src/{layout => v2_layout}/content.tsx | 19 +- src/v2_layout/index.ts | 13 ++ src/{layout => v2_layout}/section.tsx | 7 +- src/{layout => v2_layout}/types.ts | 29 ++- stories/divider/divider.stories.tsx | 10 +- stories/divider/doc-elements.tsx | 8 +- stories/footer/footer.stories.tsx | 6 +- .../form-date-input.stories.tsx | 6 +- .../form-date-range-input.stories.tsx | 6 +- .../form-e-signature.stories.tsx | 6 +- .../form-histogram-slider.stories.tsx | 6 +- .../form-input-group.stories.tsx | 6 +- .../form/form-input/form-input.stories.tsx | 6 +- .../form-masked-input.stories.tsx | 6 +- .../form-multi-select.stories.tsx | 6 +- .../form-nested-multi-select.stories.tsx | 6 +- .../form-nested-select.stories.tsx | 6 +- .../form-phone-number-input.stories.tsx | 6 +- .../form-predictive-text-input.stories.tsx | 6 +- .../form-range-select.stories.tsx | 6 +- .../form-range-slider.stories.tsx | 6 +- .../form/form-select/form-select.stories.tsx | 6 +- .../form/form-slider/form-slider.stories.tsx | 6 +- .../form-textarea/form-textarea.stories.tsx | 6 +- .../form-time-range-picker.stories.tsx | 6 +- .../form-timepicker.stories.tsx | 6 +- .../form-unit-number-input.stories.tsx | 6 +- stories/layout/col-div.stories.tsx | 66 +++--- stories/layout/doc-elements.tsx | 10 +- stories/layout/layout.stories.tsx | 22 +- stories/notification-banner/doc-elements.tsx | 4 +- 46 files changed, 402 insertions(+), 314 deletions(-) create mode 100644 codemods/deprecate-version/deprecate-data.ts delete mode 100644 src/layout/index.ts rename src/{layout => v2_layout}/col-div.style.tsx (99%) rename src/{layout => v2_layout}/col-div.tsx (90%) rename src/{layout => v2_layout}/container.tsx (91%) rename src/{layout => v2_layout}/content.tsx (66%) create mode 100644 src/v2_layout/index.ts rename src/{layout => v2_layout}/section.tsx (88%) rename src/{layout => v2_layout}/types.ts (74%) diff --git a/codemods/deprecate-version/deprecate-data.ts b/codemods/deprecate-version/deprecate-data.ts new file mode 100644 index 000000000..4a069b792 --- /dev/null +++ b/codemods/deprecate-version/deprecate-data.ts @@ -0,0 +1,202 @@ +export const componentMap = [ + { + oldName: "DesignToken", + newName: "v2_DesignToken", + newPath: "v2_design-token", + }, + { + oldName: "DesignTokenSet", + newName: "v2_DesignTokenSet", + newPath: "v2_design-token", + }, + { + oldName: "CssValue", + newName: "v2_CssValue", + newPath: "v2_design-token", + }, + { + oldName: "DesignTokenSetOptions", + newName: "v2_DesignTokenSetOptions", + newPath: "v2_design-token", + }, + { + oldName: "MediaQuery", + newName: "v2_MediaQuery", + newPath: "v2_media", + }, + { + oldName: "MediaWidths", + newName: "v2_MediaWidths", + newPath: "v2_media", + }, + { + oldName: "MediaWidth", + newName: "v2_MediaWidth", + newPath: "v2_media", + }, + { + oldName: "MediaType", + newName: "v2_MediaType", + newPath: "v2_media", + }, + { + oldName: "Color", + newName: "v2_Color", + newPath: "v2_color", + }, + { + oldName: "ColorSet", + newName: "v2_ColorSet", + newPath: "v2_color", + }, + { + oldName: "ValidationElementAttributes", + newName: "v2_ValidationElementAttributes", + newPath: "v2_color", + }, + { + oldName: "ValidationTypes", + newName: "v2_ValidationTypes", + newPath: "v2_color", + }, + { + oldName: "ColorSetOptions", + newName: "v2_ColorSetOptions", + newPath: "v2_color", + }, + { + oldName: "Text", + newName: "v2_Text", + newPath: "v2_text", + }, + { + oldName: "TextStyleHelper", + newName: "v2_TextStyleHelper", + newPath: "v2_text", + }, + { + oldName: "TextStyle", + newName: "v2_TextStyle", + newPath: "v2_text", + }, + { + oldName: "TextSizeType", + newName: "v2_TextSizeType", + newPath: "v2_text", + }, + { + oldName: "TextLinkSizeType", + newName: "v2_TextLinkSizeType", + newPath: "v2_text", + }, + { + oldName: "TextStyleSpec", + newName: "v2_TextStyleSpec", + newPath: "v2_text", + }, + { + oldName: "TextStyleSetType", + newName: "v2_TextStyleSetType", + newPath: "v2_text", + }, + { + oldName: "TextStyleSetOptionsType", + newName: "v2_TextStyleSetOptionsType", + newPath: "v2_text", + }, + { + oldName: "TextWeight", + newName: "v2_TextWeight", + newPath: "v2_text", + }, + { + oldName: "TextProps", + newName: "v2_TextProps", + newPath: "v2_text", + }, + { + oldName: "TextLinkProps", + newName: "v2_TextLinkProps", + newPath: "v2_text", + }, + { + oldName: "TextLinkStyleProps", + newName: "v2_TextLinkStyleProps", + newPath: "v2_text", + }, + { + oldName: "Layout", + newName: "v2_Layout", + newPath: "v2_layout", + }, + { + oldName: "StyledDivStyleProps", + newName: "v2_StyledDivStyleProps", + newPath: "v2_layout", + }, + { + oldName: "StyledDiv", + newName: "v2_StyledDiv", + newPath: "v2_layout", + }, + { + oldName: "ColDiv", + newName: "v2_ColDiv", + newPath: "v2_layout", + }, + { + oldName: "Container", + newName: "v2_Container", + newPath: "v2_layout", + }, + { + oldName: "Content", + newName: "v2_Content", + newPath: "v2_layout", + }, + { + oldName: "Section", + newName: "v2_Section", + newPath: "v2_layout", + }, + { + oldName: "CommonLayoutProps", + newName: "v2_CommonLayoutProps", + newPath: "v2_layout", + }, + { + oldName: "SectionProps", + newName: "v2_SectionProps", + newPath: "v2_layout", + }, + { + oldName: "ContainerType", + newName: "v2_ContainerType", + newPath: "v2_layout", + }, + { + oldName: "ContainerProps", + newName: "v2_ContainerProps", + newPath: "v2_layout", + }, + { + oldName: "ContentProps", + newName: "v2_ContentProps", + newPath: "v2_layout", + }, + { + oldName: "DivRef", + newName: "v2_DivRef", + newPath: "v2_layout", + }, + { + oldName: "ColProps", + newName: "v2_ColProps", + newPath: "v2_layout", + }, + { + oldName: "ColDivProps", + newName: "v2_ColDivProps", + newPath: "v2_layout", + }, +]; diff --git a/codemods/deprecate-version/index.ts b/codemods/deprecate-version/index.ts index 88452d583..3ba54e234 100644 --- a/codemods/deprecate-version/index.ts +++ b/codemods/deprecate-version/index.ts @@ -1,132 +1,5 @@ import { API, FileInfo, JSCodeshift } from "jscodeshift"; - -const componentMap = [ - { - oldName: "DesignToken", - newName: "v2_DesignToken", - newPath: "v2_design-token", - }, - { - oldName: "DesignTokenSet", - newName: "v2_DesignTokenSet", - newPath: "v2_design-token", - }, - { - oldName: "CssValue", - newName: "v2_CssValue", - newPath: "v2_design-token", - }, - { - oldName: "DesignTokenSetOptions", - newName: "v2_DesignTokenSetOptions", - newPath: "v2_design-token", - }, - { - oldName: "MediaQuery", - newName: "v2_MediaQuery", - newPath: "v2_media", - }, - { - oldName: "MediaWidths", - newName: "v2_MediaWidths", - newPath: "v2_media", - }, - { - oldName: "MediaWidth", - newName: "v2_MediaWidth", - newPath: "v2_media", - }, - { - oldName: "MediaType", - newName: "v2_MediaType", - newPath: "v2_media", - }, - { - oldName: "Color", - newName: "v2_Color", - newPath: "v2_color", - }, - { - oldName: "ColorSet", - newName: "v2_ColorSet", - newPath: "v2_color", - }, - { - oldName: "ValidationElementAttributes", - newName: "v2_ValidationElementAttributes", - newPath: "v2_color", - }, - { - oldName: "ValidationTypes", - newName: "v2_ValidationTypes", - newPath: "v2_color", - }, - { - oldName: "ColorSetOptions", - newName: "v2_ColorSetOptions", - newPath: "v2_color", - }, - { - oldName: "Text", - newName: "v2_Text", - newPath: "v2_text", - }, - { - oldName: "TextStyleHelper", - newName: "v2_TextStyleHelper", - newPath: "v2_text", - }, - { - oldName: "TextStyle", - newName: "v2_TextStyle", - newPath: "v2_text", - }, - { - oldName: "TextSizeType", - newName: "v2_TextSizeType", - newPath: "v2_text", - }, - { - oldName: "TextLinkSizeType", - newName: "v2_TextLinkSizeType", - newPath: "v2_text", - }, - { - oldName: "TextStyleSpec", - newName: "v2_TextStyleSpec", - newPath: "v2_text", - }, - { - oldName: "TextStyleSetType", - newName: "v2_TextStyleSetType", - newPath: "v2_text", - }, - { - oldName: "TextStyleSetOptionsType", - newName: "v2_TextStyleSetOptionsType", - newPath: "v2_text", - }, - { - oldName: "TextWeight", - newName: "v2_TextWeight", - newPath: "v2_text", - }, - { - oldName: "TextProps", - newName: "v2_TextProps", - newPath: "v2_text", - }, - { - oldName: "TextLinkProps", - newName: "v2_TextLinkProps", - newPath: "v2_text", - }, - { - oldName: "TextLinkStyleProps", - newName: "v2_TextLinkStyleProps", - newPath: "v2_text", - }, -]; +import { componentMap } from "./deprecate-data"; export default function transformer(file: FileInfo, api: API, options: any) { const j: JSCodeshift = api.jscodeshift; diff --git a/src/divider/divider.tsx b/src/divider/divider.tsx index f3c6ce826..9af5559ad 100644 --- a/src/divider/divider.tsx +++ b/src/divider/divider.tsx @@ -1,4 +1,4 @@ -import { ColDiv } from "../layout/col-div"; +import { V2_ColDiv } from "../v2_layout/col-div"; import { Line } from "./divider.style"; import { DividerProps } from "./types"; @@ -26,7 +26,7 @@ export const Divider = ({ ); case "grid": return ( - - + ); } }; diff --git a/src/divider/types.ts b/src/divider/types.ts index f4135e65c..f1d0d8ec2 100644 --- a/src/divider/types.ts +++ b/src/divider/types.ts @@ -1,10 +1,10 @@ -import { ColProps } from "../layout/types"; +import { V2_ColProps } from "../v2_layout/types"; export type DividerLineStyleType = "solid" | "dashed"; type DividerLayoutType = "flex" | "grid"; export interface DividerProps - extends ColProps, + extends V2_ColProps, Omit, "color"> { /** The thickness of the Divider in px */ thickness?: number | undefined; diff --git a/src/footer/footer.style.tsx b/src/footer/footer.style.tsx index be8e5b73f..bdbfebff1 100644 --- a/src/footer/footer.style.tsx +++ b/src/footer/footer.style.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { Layout } from "../layout"; +import { v2_Layout } from "../v2_layout"; import { v2_MediaQuery } from "../v2_media"; import { v2_Color } from "../v2_color"; import { v2_Text, v2_TextStyleHelper } from "../v2_text"; @@ -20,7 +20,7 @@ export const StyledFooterLink = styled(v2_Text.Hyperlink.Small)` // TOP SECTION // ============================================================================= -export const TopSection = styled(Layout.Content)` +export const TopSection = styled(v2_Layout.V2_Content)` padding: 4rem 0; border-bottom: 1px solid ${v2_Color.Neutral[5]}; @@ -118,7 +118,7 @@ export const MobileOnlyBorder = styled.div` } `; -export const BottomSection = styled(Layout.Content)` +export const BottomSection = styled(v2_Layout.V2_Content)` padding: 1.375rem 0; ${v2_MediaQuery.MaxWidth.tablet} { diff --git a/src/form/form-wrapper.style.tsx b/src/form/form-wrapper.style.tsx index 7b55b5bc9..08ddec1ce 100644 --- a/src/form/form-wrapper.style.tsx +++ b/src/form/form-wrapper.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { Layout } from "../layout"; +import { v2_Layout } from "../v2_layout"; const commonStyles = css` display: flex; @@ -14,6 +14,6 @@ export const Container = styled.div` ${commonStyles} `; -export const ColDivContainer = styled(Layout.ColDiv)` +export const ColDivContainer = styled(v2_Layout.V2_ColDiv)` ${commonStyles} `; diff --git a/src/form/types.ts b/src/form/types.ts index 2ac98263c..980c8930d 100644 --- a/src/form/types.ts +++ b/src/form/types.ts @@ -12,7 +12,7 @@ import { InputSelectPartialProps } from "../input-select/types"; import { InputSliderProps } from "../input-slider"; import { TextareaPartialProps } from "../input-textarea/types"; import { InputPartialProps } from "../input/types"; -import { ColProps } from "../layout/types"; +import { V2_ColProps } from "../v2_layout/types"; import { MaskedInputPartialProps } from "../masked-input/types"; import { PhoneNumberInputProps } from "../phone-number-input/types"; import { PredictiveTextInputProps } from "../predictive-text-input/types"; @@ -47,7 +47,7 @@ export interface FormLabelProps export type FormElementLayoutType = "flex" | "grid"; -export interface BaseFormElementProps extends ColProps { +export interface BaseFormElementProps extends V2_ColProps { label?: FormLabelProps | string | undefined; errorMessage?: string | undefined; "data-error-testid"?: string | undefined; diff --git a/src/index.ts b/src/index.ts index 57a617ad8..b8c3c6b24 100644 --- a/src/index.ts +++ b/src/index.ts @@ -38,7 +38,7 @@ export * from "./input-range-slider"; export * from "./input-select"; export * from "./input-slider"; export * from "./input-textarea"; -export * from "./layout"; +export * from "./v2_layout"; export * from "./link-list"; export * from "./markup"; export * from "./masked-input"; diff --git a/src/layout/index.ts b/src/layout/index.ts deleted file mode 100644 index 2a295b7a6..000000000 --- a/src/layout/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ColDiv } from "./col-div"; -import { Container } from "./container"; -import { Content } from "./content"; -import { Section } from "./section"; - -export const Layout = { - Section, - Container, - Content, - ColDiv, -}; - -export * from "./types"; diff --git a/src/navbar/navbar.tsx b/src/navbar/navbar.tsx index 4209d5ba5..53d230fed 100644 --- a/src/navbar/navbar.tsx +++ b/src/navbar/navbar.tsx @@ -6,7 +6,7 @@ import React, { useState, } from "react"; import { ButtonProps } from "../button/types"; -import { Layout } from "../layout"; +import { v2_Layout } from "../v2_layout"; import { Masthead } from "../masthead/masthead"; import { Overlay } from "../overlay/overlay"; import { MediaWidths } from "../spec/media-spec"; @@ -268,7 +268,7 @@ const Component = ( const renderNavbar = () => { return ( - + {!hideNavElements && renderDrawer()} - + ); }; diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 1a7be879b..18a1c6606 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -1,7 +1,7 @@ import { CrossIcon } from "@lifesg/react-icons/cross"; import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; -import { Layout } from "../layout"; +import { v2_Layout } from "../v2_layout"; import { ClickableIcon } from "../shared/clickable-icon"; import { v2_Text, v2_TextStyleHelper } from "../v2_text"; import { Transition } from "../transition"; @@ -51,7 +51,7 @@ export const Wrapper = styled.div` cursor: ${(props) => (props.$clickable ? "pointer" : "default")}; `; -export const Container = styled(Layout.Content)` +export const Container = styled(v2_Layout.V2_Content)` display: flex; `; diff --git a/src/uneditable-section/uneditable-section.styles.tsx b/src/uneditable-section/uneditable-section.styles.tsx index a2b6686d8..0f54670e3 100644 --- a/src/uneditable-section/uneditable-section.styles.tsx +++ b/src/uneditable-section/uneditable-section.styles.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { Layout } from "../layout"; +import { v2_Layout } from "../v2_layout"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { v2_Text } from "../v2_text"; @@ -14,7 +14,7 @@ interface WrapperStyleProps { // ============================================================================= // STYLING // ============================================================================= -export const Wrapper = styled(Layout.Content)` +export const Wrapper = styled(v2_Layout.V2_Content)` background: ${({ $background }) => $background ? v2_Color.Neutral[7] : "transparent"}; padding-top: 2rem; diff --git a/src/layout/col-div.style.tsx b/src/v2_layout/col-div.style.tsx similarity index 99% rename from src/layout/col-div.style.tsx rename to src/v2_layout/col-div.style.tsx index d1c80618b..0e80f2046 100644 --- a/src/layout/col-div.style.tsx +++ b/src/v2_layout/col-div.style.tsx @@ -4,6 +4,7 @@ import { v2_MediaQuery } from "../v2_media/media"; // ============================================================================= // STYLE INTERFACES // ============================================================================= + export interface StyledDivStyleProps { $desktopStart?: number | undefined; $desktopSpan?: number | undefined; @@ -16,6 +17,7 @@ export interface StyledDivStyleProps { // ============================================================================= // STYLING // ============================================================================= + export const StyledDiv = styled.div` position: relative; ${(props) => { diff --git a/src/layout/col-div.tsx b/src/v2_layout/col-div.tsx similarity index 90% rename from src/layout/col-div.tsx rename to src/v2_layout/col-div.tsx index 56fffde02..e79b2ea7c 100644 --- a/src/layout/col-div.tsx +++ b/src/v2_layout/col-div.tsx @@ -1,8 +1,8 @@ import React from "react"; -import { ColDivProps, DivRef } from "./types"; +import { V2_ColDivProps, V2_DivRef } from "./types"; import { StyledDiv, StyledDivStyleProps } from "./col-div.style"; -const Component = (props: ColDivProps, ref: DivRef): JSX.Element => { +const Component = (props: V2_ColDivProps, ref: V2_DivRef): JSX.Element => { const { mobileCols, tabletCols, desktopCols, ...otherProps } = props; const getStyleProps = (): StyledDivStyleProps => { @@ -29,7 +29,8 @@ const Component = (props: ColDivProps, ref: DivRef): JSX.Element => { return ; }; -export const ColDiv = React.forwardRef(Component); +/** @deprecated */ +export const V2_ColDiv = React.forwardRef(Component); // ============================================================================= // HELPER FUNCTIONS diff --git a/src/layout/container.tsx b/src/v2_layout/container.tsx similarity index 91% rename from src/layout/container.tsx rename to src/v2_layout/container.tsx index 150b4bf69..4ec345b24 100644 --- a/src/layout/container.tsx +++ b/src/v2_layout/container.tsx @@ -1,9 +1,9 @@ import React from "react"; import styled, { css } from "styled-components"; import { v2_MediaQuery } from "../v2_media/media"; -import { ContainerProps, ContainerType, DivRef } from "./types"; +import { V2_ContainerProps, V2_ContainerType, V2_DivRef } from "./types"; -const Component = (props: ContainerProps, ref: DivRef): JSX.Element => { +const Component = (props: V2_ContainerProps, ref: V2_DivRef): JSX.Element => { const { children, "data-testid": testId = "container", @@ -28,13 +28,14 @@ const Component = (props: ContainerProps, ref: DivRef): JSX.Element => { // ============================================================================= // EXPORT // ============================================================================= -export const Container = React.forwardRef(Component); +/** @deprecated */ +export const V2_Container = React.forwardRef(Component); // ============================================================================= // STYLING // ============================================================================= interface StyleProps { - $type: ContainerType; + $type: V2_ContainerType; $stretch: boolean; } diff --git a/src/layout/content.tsx b/src/v2_layout/content.tsx similarity index 66% rename from src/layout/content.tsx rename to src/v2_layout/content.tsx index 697861ed1..b66adc1ca 100644 --- a/src/layout/content.tsx +++ b/src/v2_layout/content.tsx @@ -1,9 +1,9 @@ import React from "react"; -import { Container } from "./container"; -import { Section } from "./section"; -import { ContentProps, DivRef } from "./types"; +import { V2_Container } from "./container"; +import { V2_Section } from "./section"; +import { V2_ContentProps, V2_DivRef } from "./types"; -const Component = (props: ContentProps, ref: DivRef): JSX.Element => { +const Component = (props: V2_ContentProps, ref: V2_DivRef): JSX.Element => { const { children, "data-testid": testId = "content", @@ -14,26 +14,27 @@ const Component = (props: ContentProps, ref: DivRef): JSX.Element => { } = props; return ( -
    - {children} - -
    + + ); }; // ============================================================================= // EXPORT // ============================================================================= -export const Content = React.forwardRef(Component); +/** @deprecated */ +export const V2_Content = React.forwardRef(Component); diff --git a/src/v2_layout/index.ts b/src/v2_layout/index.ts new file mode 100644 index 000000000..406493436 --- /dev/null +++ b/src/v2_layout/index.ts @@ -0,0 +1,13 @@ +import { V2_ColDiv } from "./col-div"; +import { V2_Container } from "./container"; +import { V2_Content } from "./content"; +import { V2_Section } from "./section"; + +export const v2_Layout = { + V2_Section: V2_Section, + V2_Container: V2_Container, + V2_Content: V2_Content, + V2_ColDiv: V2_ColDiv, +}; + +export * from "./types"; diff --git a/src/layout/section.tsx b/src/v2_layout/section.tsx similarity index 88% rename from src/layout/section.tsx rename to src/v2_layout/section.tsx index 0b12449bf..8c59c98d9 100644 --- a/src/layout/section.tsx +++ b/src/v2_layout/section.tsx @@ -1,9 +1,9 @@ import React from "react"; import styled, { css } from "styled-components"; -import { DivRef, SectionProps } from "./types"; +import { V2_DivRef, V2_SectionProps } from "./types"; import { v2_MediaQuery } from "../v2_media"; -const Component = (props: SectionProps, ref: DivRef): JSX.Element => { +const Component = (props: V2_SectionProps, ref: V2_DivRef): JSX.Element => { const { children, "data-testid": testId = "section", @@ -26,7 +26,8 @@ const Component = (props: SectionProps, ref: DivRef): JSX.Element => { // ============================================================================= // EXPORT // ============================================================================= -export const Section = React.forwardRef(Component); +/** @deprecated */ +export const V2_Section = React.forwardRef(Component); // ============================================================================= // STYLING diff --git a/src/layout/types.ts b/src/v2_layout/types.ts similarity index 74% rename from src/layout/types.ts rename to src/v2_layout/types.ts index 805705b50..293f50c64 100644 --- a/src/layout/types.ts +++ b/src/v2_layout/types.ts @@ -1,22 +1,27 @@ -export interface CommonLayoutProps +/** @deprecated */ +export interface V2_CommonLayoutProps extends React.HTMLAttributes { children: React.ReactNode; "data-testid"?: string | undefined; stretch?: boolean; } -export interface SectionProps extends CommonLayoutProps {} +/** @deprecated */ +export interface V2_SectionProps extends V2_CommonLayoutProps {} -export type ContainerType = "flex" | "flex-column" | "grid"; +/** @deprecated */ +export type V2_ContainerType = "flex" | "flex-column" | "grid"; -export interface ContainerProps extends CommonLayoutProps { +/** @deprecated */ +export interface V2_ContainerProps extends V2_CommonLayoutProps { /** The type of display style. Values: "flex" | "flex-column" | "grid" */ - type?: ContainerType | undefined; + type?: V2_ContainerType | undefined; } +/** @deprecated */ +export interface V2_ContentProps extends V2_ContainerProps {} -export interface ContentProps extends ContainerProps {} - -export type DivRef = React.Ref; +/** @deprecated */ +export type V2_DivRef = React.Ref; type MobileCol = 1 | 2 | 3 | 4; type MobileColRange = MobileCol | 5; @@ -27,7 +32,8 @@ type TabletColRange = TabletCol | 9; type DesktopCol = TabletCol | 9 | 10 | 11 | 12; type DesktopColRange = DesktopCol | 13; -export interface ColProps { +/** @deprecated */ +export interface V2_ColProps { /** * Specifies the number of columns to be span across in mobile viewports. * If an array is specified, the format is as such [startCol, endCol]. @@ -58,8 +64,9 @@ export interface ColProps { desktopCols?: DesktopCol | [DesktopColRange, DesktopColRange] | undefined; } -export interface ColDivProps +/** @deprecated */ +export interface V2_ColDivProps extends React.HTMLAttributes, - ColProps { + V2_ColProps { "data-testid"?: string | undefined; } diff --git a/stories/divider/divider.stories.tsx b/stories/divider/divider.stories.tsx index 7e91662eb..af142421f 100644 --- a/stories/divider/divider.stories.tsx +++ b/stories/divider/divider.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { v2_Color } from "src/v2_color"; import { Divider } from "src/divider"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { DisplayText, Wrapper } from "./doc-elements"; type Component = typeof Divider; @@ -35,7 +35,7 @@ export const Default: StoryObj = { export const UsingInGridLayout: StoryObj = { render: () => { return ( - + Dividers in the grid layout = { tabletCols={[1, 4]} desktopCols={[1, 5]} /> - + ); }, }; @@ -66,7 +66,7 @@ export const UsingInGridLayout: StoryObj = { export const Customisations: StoryObj = { render: () => { return ( - + Changing the color (pure string) = { thickness={5} style={{ marginBottom: "1.5rem" }} /> - + ); }, }; diff --git a/stories/divider/doc-elements.tsx b/stories/divider/doc-elements.tsx index 25536e0ae..e8550a64e 100644 --- a/stories/divider/doc-elements.tsx +++ b/stories/divider/doc-elements.tsx @@ -1,8 +1,8 @@ import styled from "styled-components"; -import { Layout } from "../../src/layout"; +import { v2_Layout } from "../../src/v2_layout"; import { v2_Text } from "../../src/v2_text"; -export const Wrapper = styled(Layout.Content)` +export const Wrapper = styled(v2_Layout.V2_Content)` padding: 5rem; `; @@ -12,8 +12,8 @@ export const TextComponent = styled(v2_Text.Body)` export const DisplayText = ({ children }: { children: React.ReactNode }) => { return ( - + {children} - + ); }; diff --git a/stories/footer/footer.stories.tsx b/stories/footer/footer.stories.tsx index b4ae6cf64..79c078380 100644 --- a/stories/footer/footer.stories.tsx +++ b/stories/footer/footer.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Footer } from "src/footer"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; type Component = typeof Footer; @@ -67,7 +67,7 @@ export const WithCustomContent: StoryObj = { render: () => { return (
    - +
    = { > My custom content
    -
    +
    ); }, diff --git a/stories/form/form-date-input/form-date-input.stories.tsx b/stories/form/form-date-input/form-date-input.stories.tsx index a6fe9871b..bd8da38bf 100644 --- a/stories/form/form-date-input/form-date-input.stories.tsx +++ b/stories/form/form-date-input/form-date-input.stories.tsx @@ -3,7 +3,7 @@ import dayjs from "dayjs"; import { useState } from "react"; import { DateInput } from "src/date-input"; import { Form } from "src/form"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -105,7 +105,7 @@ export const AllowDisabledSelection: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-date-range-input/form-date-range-input.stories.tsx b/stories/form/form-date-range-input/form-date-range-input.stories.tsx index c1107acd6..826d9c2e3 100644 --- a/stories/form/form-date-range-input/form-date-range-input.stories.tsx +++ b/stories/form/form-date-range-input/form-date-range-input.stories.tsx @@ -3,7 +3,7 @@ import dayjs from "dayjs"; import { useState } from "react"; import { DateRangeInput } from "src/date-range-input"; import { Form } from "src/form"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; type Component = typeof Form.DateRangeInput; @@ -213,7 +213,7 @@ export const AllowDisabledSelection: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-e-signature/form-e-signature.stories.tsx b/stories/form/form-e-signature/form-e-signature.stories.tsx index dfcfc6ad9..903961cb6 100644 --- a/stories/form/form-e-signature/form-e-signature.stories.tsx +++ b/stories/form/form-e-signature/form-e-signature.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { ESignature } from "src/e-signature"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { signatureDataURL } from "./doc-elements"; @@ -64,7 +64,7 @@ export const WithLoadingIndicator: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, }; diff --git a/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx b/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx index 64088e53c..4e3fcd7c3 100644 --- a/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx +++ b/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { HistogramSlider } from "src/histogram-slider"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { v2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -140,7 +140,7 @@ export const WithLabels: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { bins={LARGE_BIN_DATA} interval={100} /> - + ); }, parameters: { diff --git a/stories/form/form-input-group/form-input-group.stories.tsx b/stories/form/form-input-group/form-input-group.stories.tsx index 5f016b46c..515dca320 100644 --- a/stories/form/form-input-group/form-input-group.stories.tsx +++ b/stories/form/form-input-group/form-input-group.stories.tsx @@ -3,7 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; import { InputGroup } from "src/input-group"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { v2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -279,7 +279,7 @@ export const AllowClear: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-input/form-input.stories.tsx b/stories/form/form-input/form-input.stories.tsx index fd17fd819..8ebb0baef 100644 --- a/stories/form/form-input/form-input.stories.tsx +++ b/stories/form/form-input/form-input.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; import { Input } from "src/input"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -68,14 +68,14 @@ export const Default: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + - + ); }, parameters: { diff --git a/stories/form/form-masked-input/form-masked-input.stories.tsx b/stories/form/form-masked-input/form-masked-input.stories.tsx index b7cec238f..fd2ac1913 100644 --- a/stories/form/form-masked-input/form-masked-input.stories.tsx +++ b/stories/form/form-masked-input/form-masked-input.stories.tsx @@ -2,7 +2,7 @@ import { ToggleOffIcon } from "@lifesg/react-icons/toggle-off"; import { ToggleOffFillIcon } from "@lifesg/react-icons/toggle-off-fill"; import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { MaskedInput, MaskedInputLoadState } from "src/masked-input"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -205,7 +205,7 @@ export const WithCustomizations: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-multi-select/form-multi-select.stories.tsx b/stories/form/form-multi-select/form-multi-select.stories.tsx index ae3c4d8e4..b380cfb2e 100644 --- a/stories/form/form-multi-select/form-multi-select.stories.tsx +++ b/stories/form/form-multi-select/form-multi-select.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { InputMultiSelect } from "src/input-multi-select"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -84,7 +84,7 @@ export const WithSearch: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx b/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx index d7efed4d5..e795269e2 100644 --- a/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx +++ b/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; import { InputNestedMultiSelect } from "src/input-nested-multi-select"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { options, @@ -105,7 +105,7 @@ export const WithSearch: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-nested-select/form-nested-select.stories.tsx b/stories/form/form-nested-select/form-nested-select.stories.tsx index 400421807..41f6728f7 100644 --- a/stories/form/form-nested-select/form-nested-select.stories.tsx +++ b/stories/form/form-nested-select/form-nested-select.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; import { InputNestedSelect } from "src/input-nested-select"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { options, twoTierOptions } from "./nested-data-list"; @@ -109,7 +109,7 @@ export const WithSearch: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx b/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx index b41ae7b91..d0082199f 100644 --- a/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx +++ b/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { PhoneNumberInput, PhoneNumberInputValue, @@ -109,7 +109,7 @@ export const AllowClear: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-predictive-text/form-predictive-text-input.stories.tsx b/stories/form/form-predictive-text/form-predictive-text-input.stories.tsx index 417cf5e67..ddbf99bf2 100644 --- a/stories/form/form-predictive-text/form-predictive-text-input.stories.tsx +++ b/stories/form/form-predictive-text/form-predictive-text-input.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { PredictiveTextInput } from "src/predictive-text-input"; import { Container } from "../shared-doc-elements"; import { @@ -108,7 +108,7 @@ export const WithSecondaryLabel: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-range-select/form-range-select.stories.tsx b/stories/form/form-range-select/form-range-select.stories.tsx index 9fd6202db..6069b3499 100644 --- a/stories/form/form-range-select/form-range-select.stories.tsx +++ b/stories/form/form-range-select/form-range-select.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { InputRangeSelect } from "src/input-range-select"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { @@ -225,7 +225,7 @@ export const WithSearch: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-range-slider/form-range-slider.stories.tsx b/stories/form/form-range-slider/form-range-slider.stories.tsx index f45689b01..079d5afb0 100644 --- a/stories/form/form-range-slider/form-range-slider.stories.tsx +++ b/stories/form/form-range-slider/form-range-slider.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { InputRangeSlider } from "src/input-range-slider"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { v2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -132,7 +132,7 @@ export const WithLabels: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { tabletCols={[1, 9]} value={[25, 50]} /> - + ); }, parameters: { diff --git a/stories/form/form-select/form-select.stories.tsx b/stories/form/form-select/form-select.stories.tsx index baf31b88c..dcbf9a98b 100644 --- a/stories/form/form-select/form-select.stories.tsx +++ b/stories/form/form-select/form-select.stories.tsx @@ -3,7 +3,7 @@ import { ComponentProps, useEffect, useState } from "react"; import { Button } from "src/button"; import { Form } from "src/form"; import { InputSelect } from "src/input-select"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { @@ -276,7 +276,7 @@ export const LoadState: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-slider/form-slider.stories.tsx b/stories/form/form-slider/form-slider.stories.tsx index 38f69c73d..9628c945b 100644 --- a/stories/form/form-slider/form-slider.stories.tsx +++ b/stories/form/form-slider/form-slider.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { InputSlider } from "src/input-slider"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { v2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -109,14 +109,14 @@ export const WithLabels: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + - + ); }, parameters: { diff --git a/stories/form/form-textarea/form-textarea.stories.tsx b/stories/form/form-textarea/form-textarea.stories.tsx index cf23bfa04..b4bf77057 100644 --- a/stories/form/form-textarea/form-textarea.stories.tsx +++ b/stories/form/form-textarea/form-textarea.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { Textarea } from "src/input-textarea"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { renderCustomCounter } from "./doc-elements"; @@ -75,7 +75,7 @@ export const WithCustomCounter: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx index b2ccef561..64958cfbf 100644 --- a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx +++ b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { TimeRangePicker } from "src/time-range-picker"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -84,7 +84,7 @@ export const TwelveHourFormat: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-timepicker/form-timepicker.stories.tsx b/stories/form/form-timepicker/form-timepicker.stories.tsx index 99b7a9649..88f4c80cd 100644 --- a/stories/form/form-timepicker/form-timepicker.stories.tsx +++ b/stories/form/form-timepicker/form-timepicker.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { Timepicker } from "src/timepicker"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -71,7 +71,7 @@ export const TwelveHourFormat: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-unit-number-input/form-unit-number-input.stories.tsx b/stories/form/form-unit-number-input/form-unit-number-input.stories.tsx index e7b6d3421..993efc15c 100644 --- a/stories/form/form-unit-number-input/form-unit-number-input.stories.tsx +++ b/stories/form/form-unit-number-input/form-unit-number-input.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { UnitNumberInput } from "src/unit-number"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -47,7 +47,7 @@ export const Default: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/layout/col-div.stories.tsx b/stories/layout/col-div.stories.tsx index c976ee660..df0a50803 100644 --- a/stories/layout/col-div.stories.tsx +++ b/stories/layout/col-div.stories.tsx @@ -1,13 +1,13 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { v2_Text } from "src/v2_text"; import { Wrapper } from "./doc-elements"; -type Component = typeof Layout.ColDiv; +type Component = typeof v2_Layout.V2_ColDiv; const meta: Meta = { title: "Getting Started/Layout/Column Divs", - component: Layout.ColDiv, + component: v2_Layout.V2_ColDiv, parameters: { layout: "fullscreen", }, @@ -19,7 +19,7 @@ export const ColumnDivs: StoryObj = { render: () => { return ( - = { }} > 1 - - + = { }} > 2 - - + = { }} > 3 - - + = { }} > 4 - - + = { }} > 5 - - + = { }} > 6 - - + = { }} > 7 - - + = { }} > 8 - - + = { }} > 9 - - + = { }} > 10 - - + = { }} > 11 - - + = { }} > 12 - + ); }, @@ -160,7 +160,7 @@ export const SpecifyingRanges: StoryObj = { render: () => { return ( - = { }} > One - - + = { }} > Two - - + = { }} > Three - + ); }, diff --git a/stories/layout/doc-elements.tsx b/stories/layout/doc-elements.tsx index ef189e8a5..19bb84435 100644 --- a/stories/layout/doc-elements.tsx +++ b/stories/layout/doc-elements.tsx @@ -1,7 +1,7 @@ import React from "react"; import styled, { css } from "styled-components"; import { v2_Color } from "../../src/v2_color"; -import { Layout } from "../../src/layout"; +import { v2_Layout } from "../../src/v2_layout"; import { v2_Text } from "../../src/v2_text"; interface LabelProps { @@ -101,12 +101,12 @@ const Marker = styled.div` // ============================================================================= // eslint-disable-next-line @typescript-eslint/no-explicit-any export const Wrapper = ({ children }: any) => ( - - + {children} - - + + ); diff --git a/stories/layout/layout.stories.tsx b/stories/layout/layout.stories.tsx index f5c887f1d..71c6e95bc 100644 --- a/stories/layout/layout.stories.tsx +++ b/stories/layout/layout.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { Layout } from "src/layout"; +import { v2_Layout } from "src/v2_layout"; import { v2_Text } from "src/v2_text"; const meta: Meta = { @@ -14,7 +14,7 @@ export default meta; export const GeneralUsage: StoryObj = { render: () => { return ( - +
    -
    + ); }, }; @@ -39,8 +39,8 @@ export const GeneralUsage: StoryObj = { export const SplitUsage: StoryObj = { render: () => { return ( - - + +
    -
    -
    + + ); }, }; @@ -78,10 +78,10 @@ export const FlexColumnLayout: StoryObj = { ); }; return ( - + {renderContent(First item)} {renderContent(Second item)} - + ); }, }; @@ -113,9 +113,9 @@ export const GridLayout: StoryObj = { return columns; }; return ( - + {renderColumns()} - + ); }, }; diff --git a/stories/notification-banner/doc-elements.tsx b/stories/notification-banner/doc-elements.tsx index de1b03591..1bf7424cb 100644 --- a/stories/notification-banner/doc-elements.tsx +++ b/stories/notification-banner/doc-elements.tsx @@ -1,11 +1,11 @@ import styled from "styled-components"; -import { Layout } from "../../src/layout"; +import { v2_Layout } from "../../src/v2_layout"; import { withNotificationBanner } from "../../src/notification-banner"; interface ContentProps { $color?: string | undefined; } -export const StyledContent = styled(Layout.Content)` +export const StyledContent = styled(v2_Layout.V2_Content)` [data-id="container"] { flex-direction: column; background-color: ${(props) => props?.$color}; From b33660b30cf66c2492260aee89f679ac2562dc1c Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 6 Aug 2024 15:17:49 +0800 Subject: [PATCH 0322/1949] [CCUBE-1520][MAHI]Deprecate component Text to V2 --- src/accordion/accordion-item.style.tsx | 6 +- src/accordion/accordion.style.tsx | 4 +- src/alert/alert.style.tsx | 12 +-- src/box-container/box-container.styles.tsx | 6 +- src/breadcrumb/breadcrumb.style.tsx | 6 +- src/button/button.style.tsx | 6 +- src/card/card.tsx | 4 +- src/countdown-timer/countdown-timer.style.tsx | 6 +- src/data-table/data-table.styles.tsx | 4 +- src/data-table/data-table.tsx | 12 +-- src/drawer/drawer.styles.tsx | 4 +- src/e-signature/e-signature.styles.ts | 8 +- src/e-signature/e-signature.tsx | 4 +- src/error-display/error-display.style.tsx | 10 +- src/feedback-rating/feedback-rating.tsx | 6 +- src/file-upload/dropzone.styles.tsx | 4 +- src/file-upload/file-item-edit.styles.tsx | 6 +- .../file-list-item-thumbnail.tsx | 4 +- .../file-list-item/file-list-item.styles.tsx | 6 +- src/file-upload/file-upload.styles.tsx | 8 +- .../addons/filter-item-checkbox.styles.tsx | 4 +- src/filter/filter-item.styles.tsx | 6 +- src/filter/filter.styles.tsx | 4 +- src/footer/footer-download-app.style.tsx | 4 +- src/footer/footer-helper.ts | 8 +- src/footer/footer.style.tsx | 8 +- src/footer/footer.tsx | 6 +- src/footer/types.ts | 6 +- src/form/form-label.style.tsx | 12 +-- src/form/form-label.tsx | 4 +- .../fullscreen-image-carousel.style.tsx | 4 +- src/histogram-slider/histogram-slider.tsx | 6 +- src/image-button/image-button.style.tsx | 6 +- .../input-group-list-addon.style.tsx | 10 +- src/input-group/input-group.style.tsx | 4 +- .../input-range-slider.styles.ts | 4 +- src/input-textarea/textara-counter.style.tsx | 4 +- src/input-textarea/textarea.style.tsx | 4 +- src/input/input.style.tsx | 4 +- src/link-list/link-list.styles.tsx | 10 +- src/markup/types.ts | 4 +- src/masked-input/masked-input.style.tsx | 8 +- src/navbar/menu.styles.tsx | 8 +- src/navbar/navbar-action-buttons.styles.tsx | 4 +- src/navbar/navbar-items.styles.tsx | 4 +- src/navbar/navbar-items.tsx | 4 +- src/navbar/types.ts | 4 +- .../notification-banner.styles.tsx | 12 +-- src/notification-banner/types.ts | 8 +- src/pagination/pagination.styles.tsx | 24 ++--- src/pill/pill.style.tsx | 4 +- src/popover-v2/popover.tsx | 4 +- src/popover/popover.tsx | 4 +- .../progress-indicator.style.tsx | 6 +- .../dropdown-label.styles.tsx | 8 +- .../dropdown-list-v2/dropdown-label.tsx | 6 +- .../dropdown-list-v2/dropdown-list.styles.tsx | 6 +- .../expandable-element.styles.tsx | 8 +- .../dropdown-list/dropdown-list.styles.tsx | 12 +-- .../dropdown-wrapper.styles.tsx | 8 +- src/shared/html-content/html-content.ts | 10 +- src/shared/input-wrapper/input-wrapper.tsx | 4 +- .../calendar-manager.style.tsx | 4 +- .../day-cell/day-cell.style.tsx | 8 +- .../fixed-range-calendar-day-view.tsx | 6 +- .../internal-calendar-month.style.tsx | 8 +- .../internal-calendar-year.style.tsx | 8 +- .../standard-calendar-day-view.style.tsx | 8 +- .../standard/standard-calendar-day-view.tsx | 6 +- .../week/week-calendar-day-view.tsx | 6 +- .../nested-dropdown-list/list-item.styles.tsx | 8 +- .../nested-dropdown-list.styles.tsx | 6 +- .../standalone-date-input.style.tsx | 8 +- .../timepicker-dropdown.styles.tsx | 4 +- src/sidenav/sidenav-drawer-item.styles.tsx | 4 +- src/sidenav/sidenav-drawer-subitem.styles.tsx | 6 +- src/sidenav/sidenav-item.styles.tsx | 10 +- .../smart-app-banner.styles.ts | 10 +- src/spec/text-spec/base-text-style-set.ts | 4 +- .../text-spec/oneservice-text-style-set.ts | 4 +- src/tab/tab-link-chain.style.tsx | 6 +- src/tag/tag.style.ts | 6 +- src/text-list/text-list.styles.tsx | 6 +- src/text-list/types.ts | 4 +- src/theme/text-theme-helper.ts | 4 +- src/theme/types.ts | 8 +- .../time-slot-bar-week-days.style.tsx | 8 +- src/time-slot-bar/time-slot-bar.styles.tsx | 6 +- .../time-slot-week-days.style.tsx | 6 +- .../time-slot-week-days.tsx | 6 +- src/timeline/timeline.style.tsx | 8 +- src/timeline/timeline.tsx | 6 +- src/toast/toast.styles.tsx | 4 +- src/toast/toast.tsx | 6 +- src/toggle/toggle.styles.tsx | 16 +-- src/tooltip/tooltip.tsx | 4 +- .../section-item.styles.tsx | 6 +- src/uneditable-section/section-item.tsx | 6 +- .../uneditable-section.styles.tsx | 6 +- src/unit-number/unit-number-input.style.tsx | 6 +- src/v2_text/helper.ts | 26 ++--- src/v2_text/text-style.ts | 6 +- src/v2_text/text.tsx | 100 +++++++++--------- src/v2_text/types.ts | 26 ++--- stories/accordion/accordion.stories.tsx | 50 ++++----- .../box-container/box-container.stories.tsx | 22 ++-- stories/card/card.stories.tsx | 6 +- stories/data-table/doc-elements.tsx | 6 +- stories/divider/doc-elements.tsx | 4 +- stories/drawer/drawer.stories.tsx | 14 +-- stories/filter/doc-elements.tsx | 6 +- .../form-histogram-slider.stories.tsx | 10 +- .../form-input-group.stories.tsx | 8 +- .../form-range-slider.stories.tsx | 10 +- .../form/form-slider/form-slider.stories.tsx | 10 +- stories/form/form-textarea/doc-elements.tsx | 4 +- stories/image-button/doc-elements.tsx | 4 +- stories/layout/col-div.stories.tsx | 32 +++--- stories/layout/doc-elements.tsx | 8 +- stories/layout/layout.stories.tsx | 22 ++-- stories/masonry/doc-elements.tsx | 4 +- stories/navbar/doc-elements.tsx | 6 +- .../notification-banner.stories.tsx | 34 +++--- stories/pill/pill.stories.tsx | 18 ++-- stories/popover/doc-elements.tsx | 4 +- stories/radio-button/doc-elements.tsx | 4 +- stories/storybook-common/tabs.tsx | 6 +- stories/storybook-common/text.style.tsx | 14 +-- stories/tab/tab.stories.tsx | 62 +++++------ stories/tag/tag.stories.tsx | 18 ++-- stories/text-list/text-list.stories.tsx | 6 +- stories/text/a-intro.stories.tsx | 38 +++---- stories/text/b-advanced.stories.tsx | 36 +++---- stories/text/collection-doc-elements.tsx | 50 ++++----- stories/text/doc-elements.tsx | 8 +- stories/timeline/timeline.stories.tsx | 58 +++++----- stories/toast/toast.stories.tsx | 12 +-- stories/toggle/doc-elements.tsx | 4 +- stories/toggle/toggle-6-examples.stories.tsx | 6 +- .../uneditable-section.stories.tsx | 12 +-- tests/accordion/accordion.spec.tsx | 44 ++++---- 141 files changed, 734 insertions(+), 734 deletions(-) diff --git a/src/accordion/accordion-item.style.tsx b/src/accordion/accordion-item.style.tsx index b477b11ce..d9403ee2e 100644 --- a/src/accordion/accordion-item.style.tsx +++ b/src/accordion/accordion-item.style.tsx @@ -4,7 +4,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; import { Transition } from "../transition"; // ============================================================================= @@ -42,13 +42,13 @@ const TITLE_STYLE = (isCollapsed?: boolean) => css` transition: ${Transition.Base}; `; -export const Title = styled(v2_Text.H3)` +export const Title = styled(V2_Text.H3)` ${(props) => { return TITLE_STYLE(props.$isCollapsed); }} `; -export const TitleH4 = styled(v2_Text.H4)` +export const TitleH4 = styled(V2_Text.H4)` ${(props) => { return TITLE_STYLE(props.$isCollapsed); }} diff --git a/src/accordion/accordion.style.tsx b/src/accordion/accordion.style.tsx index 53ba239fa..80233ad4e 100644 --- a/src/accordion/accordion.style.tsx +++ b/src/accordion/accordion.style.tsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { Button } from "../button"; import { v2_MediaQuery } from "../v2_media"; import { v2_Color } from "../v2_color"; -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; import { TitleStyleProps, TitleWrapperStyleProps } from "./types"; // ============================================================================ @@ -24,7 +24,7 @@ export const TitleWrapper = styled.div` } `; -export const Title = styled(v2_Text.H2)` +export const Title = styled(V2_Text.H2)` display: flex; align-self: flex-start; flex: 1; diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index 0b8e3f8b6..c4caacc48 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -2,7 +2,7 @@ import { ChevronDownIcon } from "@lifesg/react-icons"; import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color/color"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { AlertSizeType, AlertType } from "./types"; // ============================================================================= @@ -121,16 +121,16 @@ export const AlertIconWrapper = styled.div` }} `; -export const ActionLinkText = styled(v2_Text.Hyperlink.Small)` +export const ActionLinkText = styled(V2_Text.Hyperlink.Small)` ${(props) => { if (props.$sizeType === "small") return css` - ${v2_TextStyleHelper.getTextStyle("H6", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H6", "semibold")} margin-top: 0.25rem; `; else { return css` - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} margin-top: 0.5rem; `; } @@ -182,11 +182,11 @@ export const ShowMoreButton = styled.button` ${(props) => { if (props.$sizeType === "small") return css` - ${v2_TextStyleHelper.getTextStyle("H6", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H6", "semibold")} `; else { return css` - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} `; } }} diff --git a/src/box-container/box-container.styles.tsx b/src/box-container/box-container.styles.tsx index aa55b2d71..623ba0323 100644 --- a/src/box-container/box-container.styles.tsx +++ b/src/box-container/box-container.styles.tsx @@ -4,7 +4,7 @@ import { animated } from "react-spring"; import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; import { Transition } from "../transition"; import { BoxContainerDisplayState } from "./types"; @@ -66,7 +66,7 @@ export const Header = styled.div` }} `; -export const LabelText = styled(v2_Text.H3)` +export const LabelText = styled(V2_Text.H3)` word-wrap: break-word; overflow-wrap: anywhere; display: flex; @@ -144,7 +144,7 @@ export const Handle = styled.button` } `; -export const HandleLabel = styled(v2_Text.H4)` +export const HandleLabel = styled(V2_Text.H4)` color: ${v2_Color.Primary}; `; diff --git a/src/breadcrumb/breadcrumb.style.tsx b/src/breadcrumb/breadcrumb.style.tsx index 3b90b48a8..b116c52d6 100644 --- a/src/breadcrumb/breadcrumb.style.tsx +++ b/src/breadcrumb/breadcrumb.style.tsx @@ -2,7 +2,7 @@ import { ChevronRightIcon } from "@lifesg/react-icons/chevron-right"; import styled from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; // ============================================================================= // STYLE TYPES, transient props are denoted with $ @@ -110,10 +110,10 @@ export const Caret = styled(ChevronRightIcon)` color: ${v2_Color.Neutral[4]}; `; -export const CurrentLabel = styled(v2_Text.BodySmall)` +export const CurrentLabel = styled(V2_Text.BodySmall)` margin: 0.25rem !important; `; -export const PreviousLink = styled(v2_Text.Hyperlink.Small)` +export const PreviousLink = styled(V2_Text.Hyperlink.Small)` margin: 0.25rem !important; `; diff --git a/src/button/button.style.tsx b/src/button/button.style.tsx index 4cbd4df81..114417724 100644 --- a/src/button/button.style.tsx +++ b/src/button/button.style.tsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color/color"; import { v2_MediaQuery } from "../v2_media/media"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_TextStyleHelper } from "../v2_text"; import { MainStyleProps } from "./types"; import { v2_DesignToken } from "../v2_design-token"; @@ -105,7 +105,7 @@ export const Main = styled.button` case "small": return css` height: 2.5rem; - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} ${v2_MediaQuery.MaxWidth.mobileS} { height: auto; @@ -114,7 +114,7 @@ export const Main = styled.button` default: return css` height: 3rem; - ${v2_TextStyleHelper.getTextStyle("H4", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} ${v2_MediaQuery.MaxWidth.mobileS} { height: auto; diff --git a/src/card/card.tsx b/src/card/card.tsx index e52efc19b..71b11871c 100644 --- a/src/card/card.tsx +++ b/src/card/card.tsx @@ -1,4 +1,4 @@ -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; import { StyledCard } from "./card.style"; import { CardProps } from "./types"; @@ -13,7 +13,7 @@ export const Card = ({ children, ...otherProps }: CardProps): JSX.Element => { // ============================================================================= const renderContent = () => typeof children === "string" ? ( - {children} + {children} ) : ( children ); diff --git a/src/countdown-timer/countdown-timer.style.tsx b/src/countdown-timer/countdown-timer.style.tsx index b7ebf4c9d..7a6d859c6 100644 --- a/src/countdown-timer/countdown-timer.style.tsx +++ b/src/countdown-timer/countdown-timer.style.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_TextStyleHelper } from "../v2_text"; import { v2_MediaQuery } from "../v2_media"; // ============================================================================= @@ -24,7 +24,7 @@ export const Wrapper = styled.div` `; export const BaseCountdown = styled.div` - ${v2_TextStyleHelper.getTextStyle("H4", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} display: flex; align-items: center; padding: 0.5rem 1rem; @@ -78,7 +78,7 @@ export const FixedCountdown = styled(BaseCountdown)` `; export const TimeLeft = styled.div` - ${v2_TextStyleHelper.getTextStyle("H4", "bold")} + ${V2_TextStyleHelper.getTextStyle("H4", "bold")} margin-left: 0.5rem; margin-right: 1.5rem; diff --git a/src/data-table/data-table.styles.tsx b/src/data-table/data-table.styles.tsx index bc444780c..232d1deb9 100644 --- a/src/data-table/data-table.styles.tsx +++ b/src/data-table/data-table.styles.tsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { ErrorDisplay } from "../error-display"; import { v2_DesignToken } from "../v2_design-token"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; // ============================================================================= // STYLE INTERFACE, transient props are denoted with $ @@ -220,7 +220,7 @@ export const BodyCell = styled.td` border-bottom: 1px solid ${borderColor}; `; -export const BodyCellContent = styled(v2_Text.Body)` +export const BodyCellContent = styled(V2_Text.Body)` overflow: hidden; text-overflow: ellipsis; display: -webkit-box; diff --git a/src/data-table/data-table.tsx b/src/data-table/data-table.tsx index 0e783f90e..aee6d0c05 100644 --- a/src/data-table/data-table.tsx +++ b/src/data-table/data-table.tsx @@ -21,7 +21,7 @@ import { } from "./data-table.styles"; import { DataTableProps, HeaderProps, RowProps } from "./types"; import { ArrowDownIcon, ArrowUpIcon } from "@lifesg/react-icons"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { Checkbox } from "../checkbox"; import { Button } from "../button"; import { useEventListener } from "../util/use-event-listener"; @@ -236,7 +236,7 @@ export const DataTable = ({ > {typeof label === "string" ? ( - {label} + {label} ) : ( label )} @@ -376,12 +376,12 @@ export const DataTable = ({ title={ emptyView?.title ? ( typeof emptyView.title === "string" ? ( - {emptyView.title} + {emptyView.title} ) : ( emptyView.title ) ) : ( - {"No found"} + {"No found"} ) } description={ @@ -419,9 +419,9 @@ export const DataTable = ({ } $scrollable={scrollable} > - {`${selectedIds.length} item${ + {`${selectedIds.length} item${ selectedIds.length > 1 ? "s" : "" - } selected`} + } selected`} { return ( {loadingLabel && ( - {loadingLabel} + {loadingLabel} )} { /> )} - + {componentDescription} - + ` display: flex; diff --git a/src/file-upload/file-list-item/file-list-item-thumbnail.tsx b/src/file-upload/file-list-item/file-list-item-thumbnail.tsx index dd0931afe..b891353b1 100644 --- a/src/file-upload/file-list-item/file-list-item-thumbnail.tsx +++ b/src/file-upload/file-list-item/file-list-item-thumbnail.tsx @@ -2,7 +2,7 @@ import styled from "styled-components"; import { v2_Color } from "../../v2_color"; import { v2_MediaQuery } from "../../v2_media"; import { ImageWithFallback } from "../../shared/image-with-fallback/image-with-fallback"; -import { v2_TextStyleHelper } from "../../v2_text"; +import { V2_TextStyleHelper } from "../../v2_text"; interface Props { thumbnailImageDataUrl: string; @@ -71,7 +71,7 @@ export const ReplaceButton = styled.button` border: none; background: transparent; cursor: pointer; - ${v2_TextStyleHelper.getTextStyle("BodySmall", "semibold")}; + ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")}; color: ${v2_Color.Primary}; :hover { color: ${v2_Color.PrimaryDark}; diff --git a/src/file-upload/file-list-item/file-list-item.styles.tsx b/src/file-upload/file-list-item/file-list-item.styles.tsx index eeb07d1e2..137428e9a 100644 --- a/src/file-upload/file-list-item/file-list-item.styles.tsx +++ b/src/file-upload/file-list-item/file-list-item.styles.tsx @@ -3,7 +3,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../../v2_color"; import { IconButton as DSIconButton } from "../../icon-button"; import { v2_MediaQuery } from "../../v2_media"; -import { v2_Text } from "../../v2_text"; +import { V2_Text } from "../../v2_text"; import { ClickableIcon } from "../../shared/clickable-icon"; // ============================================================================= @@ -208,12 +208,12 @@ export const FileSizeSection = styled.div` } `; -export const ItemText = styled(v2_Text.BodySmall)``; +export const ItemText = styled(V2_Text.BodySmall)``; export const ItemDescriptionText = styled(ItemText)` margin-top: 0.25rem; `; -export const BaseErrorMessage = styled(v2_Text.XSmall)` +export const BaseErrorMessage = styled(V2_Text.XSmall)` font-size: 0.875rem !important; color: ${v2_Color.Validation.Red.Text}; `; diff --git a/src/file-upload/file-upload.styles.tsx b/src/file-upload/file-upload.styles.tsx index 29bd9fe3c..132c31f23 100644 --- a/src/file-upload/file-upload.styles.tsx +++ b/src/file-upload/file-upload.styles.tsx @@ -4,7 +4,7 @@ import { Button } from "../button"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; // ============================================================================= // STYLING @@ -15,7 +15,7 @@ export const TextContainer = styled.div` margin-bottom: 2rem; `; -export const Title = styled(v2_Text.H4)` +export const Title = styled(V2_Text.H4)` margin-bottom: 0.5rem; `; @@ -24,7 +24,7 @@ export const TitleContainer = styled.div` ${applyHtmlContentStyle({ textSize: "Body" })} `; -export const Description = styled(v2_Text.BodySmall)` +export const Description = styled(V2_Text.BodySmall)` margin-bottom: 0; color: ${v2_Color.Neutral[3]}; `; @@ -57,7 +57,7 @@ export const UploadButton = styled(Button.Small)` } `; export const UploadButtonLabel = styled.label` - ${v2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} + ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} color: ${v2_Color.Neutral[3]}; margin-top: 0.5rem; width: 10rem; diff --git a/src/filter/addons/filter-item-checkbox.styles.tsx b/src/filter/addons/filter-item-checkbox.styles.tsx index 096debc65..b36fdbe1b 100644 --- a/src/filter/addons/filter-item-checkbox.styles.tsx +++ b/src/filter/addons/filter-item-checkbox.styles.tsx @@ -3,7 +3,7 @@ import { Button } from "../../button/button"; import { v2_Color } from "../../v2_color/color"; import { v2_MediaQuery } from "../../v2_media/media"; import { ToggleIcon } from "../../shared/toggle-icon/toggle-icon"; -import { v2_TextStyleHelper } from "../../v2_text/helper"; +import { V2_TextStyleHelper } from "../../v2_text/helper"; import { Toggle } from "../../toggle"; import { FilterItem } from "../filter-item"; @@ -50,7 +50,7 @@ export const Item = styled.label<{ $visible: boolean; $selected: boolean }>` padding: 0.5rem; cursor: pointer; - ${v2_TextStyleHelper.getTextStyle("BodySmall", "regular")} + ${V2_TextStyleHelper.getTextStyle("BodySmall", "regular")} ${(props) => props.$selected && css` diff --git a/src/filter/filter-item.styles.tsx b/src/filter/filter-item.styles.tsx index 3e9f1ed7c..014ec29e5 100644 --- a/src/filter/filter-item.styles.tsx +++ b/src/filter/filter-item.styles.tsx @@ -5,7 +5,7 @@ import { Button } from "../button/button"; import { v2_Color } from "../v2_color/color"; import { v2_MediaQuery } from "../v2_media/media"; import { ClickableIcon } from "../shared/clickable-icon"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; // ============================================================================= // STYLES INTERFACE @@ -78,11 +78,11 @@ export const ChevronIcon = styled(ChevronDownIcon)` } `; -export const FilterItemTitle = styled(v2_Text.H4)` +export const FilterItemTitle = styled(V2_Text.H4)` margin: 1.5rem 0 1.5rem 1.25rem; ${v2_MediaQuery.MaxWidth.tablet} { - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} margin: 1.5rem 1.25rem 0 1.25rem; } `; diff --git a/src/filter/filter.styles.tsx b/src/filter/filter.styles.tsx index 063b81e75..8d312a615 100644 --- a/src/filter/filter.styles.tsx +++ b/src/filter/filter.styles.tsx @@ -4,7 +4,7 @@ import { Button } from "../button/button"; import { v2_Color } from "../v2_color/color"; import { v2_MediaQuery } from "../v2_media/media"; import { ClickableIcon } from "../shared/clickable-icon"; -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; // ============================================================================= // CONTAINER STYLES @@ -53,7 +53,7 @@ export const FilterHeader = styled.div` } `; -export const FilterTitle = styled(v2_Text.H4)` +export const FilterTitle = styled(V2_Text.H4)` flex: 1; margin: 1.5rem 0 1rem 1.25rem; diff --git a/src/footer/footer-download-app.style.tsx b/src/footer/footer-download-app.style.tsx index f157a51f6..9181ae98d 100644 --- a/src/footer/footer-download-app.style.tsx +++ b/src/footer/footer-download-app.style.tsx @@ -1,5 +1,5 @@ import { v2_MediaQuery } from "../v2_media"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import styled from "styled-components"; export const Wrapper = styled.div` @@ -13,7 +13,7 @@ export const Wrapper = styled.div` } `; -export const Label = styled(v2_Text.H5).attrs({ as: "p" })` +export const Label = styled(V2_Text.H5).attrs({ as: "p" })` margin-bottom: 1rem; `; diff --git a/src/footer/footer-helper.ts b/src/footer/footer-helper.ts index 51aa4596f..722a14d5c 100644 --- a/src/footer/footer-helper.ts +++ b/src/footer/footer-helper.ts @@ -1,12 +1,12 @@ import dayjs from "dayjs"; -import { v2_TextLinkProps } from "../v2_text"; +import { V2_TextLinkProps } from "../v2_text"; import { DisclaimerLinks } from "./types"; /* Internally used. Not to be exported */ interface InternalDisclaimerLinks { - privacy?: v2_TextLinkProps | undefined; - termsOfUse?: v2_TextLinkProps | undefined; - reportVulnerability?: v2_TextLinkProps | undefined; + privacy?: V2_TextLinkProps | undefined; + termsOfUse?: V2_TextLinkProps | undefined; + reportVulnerability?: V2_TextLinkProps | undefined; } export namespace FooterHelper { diff --git a/src/footer/footer.style.tsx b/src/footer/footer.style.tsx index bdbfebff1..db2d368cb 100644 --- a/src/footer/footer.style.tsx +++ b/src/footer/footer.style.tsx @@ -2,7 +2,7 @@ import styled from "styled-components"; import { v2_Layout } from "../v2_layout"; import { v2_MediaQuery } from "../v2_media"; import { v2_Color } from "../v2_color"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; // ============================================================================= // GENERIC @@ -12,7 +12,7 @@ export const BaseFooter = styled.footer` background: ${v2_Color.Neutral[7]}; `; -export const StyledFooterLink = styled(v2_Text.Hyperlink.Small)` +export const StyledFooterLink = styled(V2_Text.Hyperlink.Small)` color: ${v2_Color.Neutral[1]}; `; @@ -164,8 +164,8 @@ export const CopyrightSection = styled(BottomSectionContent)` } `; -export const DisclaimerTextLink = styled(v2_Text.Hyperlink.Small)` - ${v2_TextStyleHelper.getTextStyle("XSmall", "regular")} +export const DisclaimerTextLink = styled(V2_Text.Hyperlink.Small)` + ${V2_TextStyleHelper.getTextStyle("XSmall", "regular")} color: ${v2_Color.Neutral[1]}; &:not(:last-child) { margin-right: 1.5rem; diff --git a/src/footer/footer.tsx b/src/footer/footer.tsx index e96fa7e8c..b3391afb2 100644 --- a/src/footer/footer.tsx +++ b/src/footer/footer.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { DownloadApp } from "./footer-download-app"; import { FooterHelper } from "./footer-helper"; import { @@ -141,14 +141,14 @@ export const Footer = ({ {renderDisclaimerLinks()} - + {copyrightInfo || ( <> ©{" "} {FooterHelper.getCopyrightInfo(lastUpdated)} )} - + diff --git a/src/footer/types.ts b/src/footer/types.ts index 141f062c0..b0c387bf6 100644 --- a/src/footer/types.ts +++ b/src/footer/types.ts @@ -1,6 +1,6 @@ -import { v2_TextLinkProps } from "../v2_text/types"; +import { V2_TextLinkProps } from "../v2_text/types"; -type DisclaimerTextLinkProps = Omit; +type DisclaimerTextLinkProps = Omit; export interface DisclaimerLinks { privacy?: DisclaimerTextLinkProps | undefined; @@ -8,7 +8,7 @@ export interface DisclaimerLinks { reportVulnerability?: DisclaimerTextLinkProps | undefined; } -export interface FooterLinkProps extends v2_TextLinkProps { +export interface FooterLinkProps extends V2_TextLinkProps { /** Any custom attributes you would like to pass to the link */ "data-options"?: T | undefined; "data-testid"?: string | undefined; diff --git a/src/form/form-label.style.tsx b/src/form/form-label.style.tsx index 0e91f7cd0..e52afd357 100644 --- a/src/form/form-label.style.tsx +++ b/src/form/form-label.style.tsx @@ -1,12 +1,12 @@ import styled from "styled-components"; import { v2_Color } from "../v2_color"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; // ============================================================================= // STYLING // ============================================================================= export const Label = styled.label` - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} color: ${v2_Color.Neutral[2]}; margin-bottom: 0.5rem; display: inline-block; @@ -14,7 +14,7 @@ export const Label = styled.label` a, span, p { - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} } a { @@ -33,16 +33,16 @@ export const Label = styled.label` } `; -export const ErrorMessage = styled(v2_Text.H6)` +export const ErrorMessage = styled(V2_Text.H6)` color: ${v2_Color.Validation.Red.Text}; margin-top: 0.5rem; margin-bottom: 0; outline: none; `; -export const Subtitle = styled(v2_Text.BodySmall)` +export const Subtitle = styled(V2_Text.BodySmall)` && { color: ${v2_Color.Neutral[3]}; - ${v2_TextStyleHelper.getFontFamily("BodySmall", "regular")} + ${V2_TextStyleHelper.getFontFamily("BodySmall", "regular")} } `; diff --git a/src/form/form-label.tsx b/src/form/form-label.tsx index 12fa8143e..0fdefd772 100644 --- a/src/form/form-label.tsx +++ b/src/form/form-label.tsx @@ -1,4 +1,4 @@ -import { v2_TextProps } from "../v2_text"; +import { V2_TextProps } from "../v2_text"; import { PopoverAddon } from "./form-label-addon"; import { ErrorMessage, Label, Subtitle } from "./form-label.style"; import { FormLabelProps } from "./types"; @@ -41,6 +41,6 @@ export const FormLabel = ({ ); }; -export const FormErrorMessage = (props: v2_TextProps): JSX.Element => { +export const FormErrorMessage = (props: V2_TextProps): JSX.Element => { return ; }; diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx index 1e13cd753..4b37a42b8 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx @@ -3,7 +3,7 @@ import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { ImagePlaceholder } from "../shared/image-placeholder"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { StatefulImage } from "./stateful-image"; // ============================================================================= @@ -168,7 +168,7 @@ export const BoxChip = styled.div` z-index: 3; `; -export const Chip = styled(v2_Text.XSmall)` +export const Chip = styled(V2_Text.XSmall)` display: inline-flex; padding: 0.25rem 1rem; justify-content: center; diff --git a/src/histogram-slider/histogram-slider.tsx b/src/histogram-slider/histogram-slider.tsx index d02e9da5d..5fde3e586 100644 --- a/src/histogram-slider/histogram-slider.tsx +++ b/src/histogram-slider/histogram-slider.tsx @@ -1,5 +1,5 @@ import { useEffect, useMemo, useState } from "react"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { Bar, Histogram, @@ -93,11 +93,11 @@ export const HistogramSlider = ({ return renderRangeLabel(value); } return ( - + {rangeLabelPrefix} {value} {rangeLabelSuffix} - + ); }; diff --git a/src/image-button/image-button.style.tsx b/src/image-button/image-button.style.tsx index 56f413b4c..45a000c54 100644 --- a/src/image-button/image-button.style.tsx +++ b/src/image-button/image-button.style.tsx @@ -1,7 +1,7 @@ import { v2_MediaQuery } from "../v2_media"; import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color/color"; -import { v2_TextStyleHelper } from "../v2_text/helper"; +import { V2_TextStyleHelper } from "../v2_text/helper"; export const Main = styled.button<{ $selected?: boolean; @@ -20,7 +20,7 @@ export const Main = styled.button<{ cursor: pointer; max-width: 13rem; transition: all 200ms ease; - ${v2_TextStyleHelper.getTextStyle("Body", "semibold")} + ${V2_TextStyleHelper.getTextStyle("Body", "semibold")} color: ${({ $selected }) => $selected && v2_Color.Primary}; overflow-wrap: anywhere; @@ -34,7 +34,7 @@ export const Main = styled.button<{ ${v2_MediaQuery.MaxWidth.mobileL} { padding: 0.5rem 0.25rem; gap: 0.25rem; - ${v2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} + ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} } ${(props) => { diff --git a/src/input-group/input-group-list-addon.style.tsx b/src/input-group/input-group-list-addon.style.tsx index 2b357c1da..64676fc7f 100644 --- a/src/input-group/input-group-list-addon.style.tsx +++ b/src/input-group/input-group-list-addon.style.tsx @@ -2,8 +2,8 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { Selector as DropdownSelector } from "../shared/dropdown-wrapper/dropdown-wrapper.styles"; -import { v2_Text } from "../v2_text/text"; -import { v2_TextStyle } from "../v2_text/text-style"; +import { V2_Text } from "../v2_text/text"; +import { V2_TextStyle } from "../v2_text/text-style"; import { Transition } from "../transition"; import { InputGroupAddonPosition } from "./types"; @@ -83,8 +83,8 @@ export const IconContainer = styled.div` export const StyledChevronIcon = styled(ChevronDownIcon)` color: ${v2_Color.Neutral[3]}; - height: ${v2_TextStyle.Body.fontSize}rem; - width: ${v2_TextStyle.Body.fontSize}rem; + height: ${V2_TextStyle.Body.fontSize}rem; + width: ${V2_TextStyle.Body.fontSize}rem; vertical-align: bottom; `; @@ -93,7 +93,7 @@ export const LabelContainer = styled.div` flex: 1 1 auto; `; -export const ValueLabel = styled(v2_Text.Body)` +export const ValueLabel = styled(V2_Text.Body)` text-align: left; display: -webkit-box; -webkit-line-clamp: 2; diff --git a/src/input-group/input-group.style.tsx b/src/input-group/input-group.style.tsx index a7b34817d..bb0962474 100644 --- a/src/input-group/input-group.style.tsx +++ b/src/input-group/input-group.style.tsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_DesignToken } from "../v2_design-token"; import { Input } from "../input/input"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_TextStyleHelper } from "../v2_text"; import { InputGroupAddonPosition } from "./types"; // ============================================================================= @@ -95,7 +95,7 @@ export const AddOnContainer = styled.div` display: flex; align-items: center; - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} color: ${v2_Color.Neutral[1]}; /* SVG Icon */ diff --git a/src/input-range-slider/input-range-slider.styles.ts b/src/input-range-slider/input-range-slider.styles.ts index 4b8f5a191..04a6c0d67 100644 --- a/src/input-range-slider/input-range-slider.styles.ts +++ b/src/input-range-slider/input-range-slider.styles.ts @@ -1,7 +1,7 @@ import ReactSlider from "react-slider"; import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; // ============================================================================= // STYLE INTERFACES @@ -33,7 +33,7 @@ export const IndicatorLabelContainer = styled.div` margin-bottom: 1rem; `; -export const LabelText = styled(v2_Text.Body)` +export const LabelText = styled(V2_Text.Body)` overflow-wrap: anywhere; `; diff --git a/src/input-textarea/textara-counter.style.tsx b/src/input-textarea/textara-counter.style.tsx index 945397ffe..2ab3d5605 100644 --- a/src/input-textarea/textara-counter.style.tsx +++ b/src/input-textarea/textara-counter.style.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; // ============================================================================= // STYLE INTERFACE @@ -12,7 +12,7 @@ interface StyleProps { // ============================================================================= // STYLING // ============================================================================= -export const CounterLabel = styled(v2_Text.H6)` +export const CounterLabel = styled(V2_Text.H6)` text-align: right; color: ${v2_Color.Neutral[3]}; diff --git a/src/input-textarea/textarea.style.tsx b/src/input-textarea/textarea.style.tsx index ae0ec3bda..9215c7d15 100644 --- a/src/input-textarea/textarea.style.tsx +++ b/src/input-textarea/textarea.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_DesignToken } from "../v2_design-token"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_TextStyleHelper } from "../v2_text"; import { Transition } from "../transition"; // ============================================================================= @@ -28,7 +28,7 @@ export const Element = styled.textarea` width: 100%; transition: ${Transition.Base}; - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} color: ${v2_Color.Neutral[1]}; background: ${v2_Color.Neutral[8]}; diff --git a/src/input/input.style.tsx b/src/input/input.style.tsx index 396b1aacf..c7fbed9fd 100644 --- a/src/input/input.style.tsx +++ b/src/input/input.style.tsx @@ -1,7 +1,7 @@ import { CrossIcon } from "@lifesg/react-icons/cross"; import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; -import { v2_TextStyleHelper } from "../v2_text/helper"; +import { V2_TextStyleHelper } from "../v2_text/helper"; // ============================================================================= // STYLE INTERFACe @@ -14,7 +14,7 @@ export interface InputStyleProps { // STYLING // ============================================================================= export const InputElement = styled.input` - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} color: ${v2_Color.Neutral[1]}; // overwrite default styles diff --git a/src/link-list/link-list.styles.tsx b/src/link-list/link-list.styles.tsx index a5ed924f1..e10e64c69 100644 --- a/src/link-list/link-list.styles.tsx +++ b/src/link-list/link-list.styles.tsx @@ -4,7 +4,7 @@ import { PlusIcon } from "@lifesg/react-icons/plus"; import { animated } from "react-spring"; import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; // ============================================================================= // STYLE INTERFACE, transient props are denoted with $ @@ -28,11 +28,11 @@ export const Container = styled.div` border-bottom: 1px solid ${v2_Color.Neutral[5]}; `; -export const ItemTitleDefault = styled(v2_Text.H3)` +export const ItemTitleDefault = styled(V2_Text.H3)` color: ${v2_Color.Primary}; margin-bottom: 0.5rem; `; -export const ItemTitleSmall = styled(v2_Text.Body)` +export const ItemTitleSmall = styled(V2_Text.Body)` color: ${v2_Color.Primary}; `; @@ -67,7 +67,7 @@ export const ItemContent = styled.div` margin-right: 1rem; `; -export const Description = styled(v2_Text.BodySmall)` +export const Description = styled(V2_Text.BodySmall)` margin-top: 0.25rem; `; @@ -79,7 +79,7 @@ export const ExpandableChild = styled.div` border-top: 1px solid ${v2_Color.Neutral[5]}; `; -export const ToggleButtonLabel = styled(v2_Text.H5)` +export const ToggleButtonLabel = styled(V2_Text.H5)` color: ${v2_Color.Primary}; margin-right: 0.5rem; `; diff --git a/src/markup/types.ts b/src/markup/types.ts index 9a03cf6ec..823e56c81 100644 --- a/src/markup/types.ts +++ b/src/markup/types.ts @@ -1,8 +1,8 @@ -import { v2_TextSizeType } from "../v2_text"; +import { V2_TextSizeType } from "../v2_text"; export interface MarkupProps extends React.HTMLAttributes { /** The default font size. If not specified, inherited from the parent */ - baseTextSize?: v2_TextSizeType | undefined; + baseTextSize?: V2_TextSizeType | undefined; /** The default font color. If not specified, inherited from the parent */ baseTextColor?: string | ((props: unknown) => string) | undefined; /** diff --git a/src/masked-input/masked-input.style.tsx b/src/masked-input/masked-input.style.tsx index 003e8c20d..cfe8eab1f 100644 --- a/src/masked-input/masked-input.style.tsx +++ b/src/masked-input/masked-input.style.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { v2_Color } from "../v2_color"; import { InputGroup } from "../input-group"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; import { ExclamationTriangleIcon } from "@lifesg/react-icons/exclamation-triangle"; @@ -52,7 +52,7 @@ export const LoadingWrapper = styled.div` height: 3rem; `; -export const LoadingLabel = styled(v2_Text.Body)` +export const LoadingLabel = styled(V2_Text.Body)` color: ${v2_Color.Neutral[3]}; `; @@ -70,7 +70,7 @@ export const Spinner = styled(ComponentLoadingSpinner)` // ERROR DISPLAY // ----------------------------------------------------------------------------- -export const TryAgainLabel = styled(v2_Text.Body)` +export const TryAgainLabel = styled(V2_Text.Body)` color: ${v2_Color.Primary}; text-decoration: underline; `; @@ -88,7 +88,7 @@ export const ErrorIcon = styled(ExclamationTriangleIcon)` width: 1.125rem; `; -export const ErrorLabel = styled(v2_Text.Body)` +export const ErrorLabel = styled(V2_Text.Body)` color: ${v2_Color.Validation.Orange.Text}; `; diff --git a/src/navbar/menu.styles.tsx b/src/navbar/menu.styles.tsx index 2a8fc497b..4095a786b 100644 --- a/src/navbar/menu.styles.tsx +++ b/src/navbar/menu.styles.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { v2_DesignToken } from "../v2_design-token"; // ============================================================================= // STYLE INTERFACE, transient props are denoted with $ @@ -44,8 +44,8 @@ export const MobileWrapper = styled.ul` // LINK ITEMS // ============================================================================= -export const Link = styled(v2_Text.Hyperlink.Small)` - ${v2_TextStyleHelper.getTextStyle("H6", "regular")}; +export const Link = styled(V2_Text.Hyperlink.Small)` + ${V2_TextStyleHelper.getTextStyle("H6", "regular")}; width: 100%; display: flex; position: relative; @@ -70,7 +70,7 @@ export const Link = styled(v2_Text.Hyperlink.Small)` } ${v2_MediaQuery.MaxWidth.tablet} { - ${v2_TextStyleHelper.getTextStyle("H5", "bold")} + ${V2_TextStyleHelper.getTextStyle("H5", "bold")} width: 100%; padding-left: 1.5rem; padding-right: 1.5rem; diff --git a/src/navbar/navbar-action-buttons.styles.tsx b/src/navbar/navbar-action-buttons.styles.tsx index 92a4a0e6b..0181cd337 100644 --- a/src/navbar/navbar-action-buttons.styles.tsx +++ b/src/navbar/navbar-action-buttons.styles.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { Button } from "../button"; import { v2_MediaQuery } from "../v2_media"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; // ============================================================================= // WRAPPER @@ -102,7 +102,7 @@ export const DownloadAppWrapper = styled.div` } `; -export const DownloadAppTitle = styled(v2_Text.BodySmall)` +export const DownloadAppTitle = styled(V2_Text.BodySmall)` margin-bottom: 0.5rem; `; diff --git a/src/navbar/navbar-items.styles.tsx b/src/navbar/navbar-items.styles.tsx index 3dee6206d..357d035e7 100644 --- a/src/navbar/navbar-items.styles.tsx +++ b/src/navbar/navbar-items.styles.tsx @@ -3,7 +3,7 @@ import styled from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; // ============================================================================= // STYLE INTERFACE, transient props are denoted with $ @@ -68,7 +68,7 @@ export const LinkItem = styled.li` } `; -export const Link = styled(v2_Text.Hyperlink.Small)` +export const Link = styled(V2_Text.Hyperlink.Small)` display: flex; position: relative; align-items: center; diff --git a/src/navbar/navbar-items.tsx b/src/navbar/navbar-items.tsx index 17d99712c..22c603c4d 100644 --- a/src/navbar/navbar-items.tsx +++ b/src/navbar/navbar-items.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useRef, useState } from "react"; -import { v2_TextWeight } from "../v2_text"; +import { V2_TextWeight } from "../v2_text"; import { Menu } from "./menu"; import { ChevronIcon, @@ -109,7 +109,7 @@ export const NavbarItems = ({ const selected = checkSelected(item); const { children, options, ...otherItemAttrs } = item; - const textWeight: v2_TextWeight = selected + const textWeight: V2_TextWeight = selected ? mobile ? "bold" : "semibold" diff --git a/src/navbar/types.ts b/src/navbar/types.ts index 6ff70fcf7..8f8377c0e 100644 --- a/src/navbar/types.ts +++ b/src/navbar/types.ts @@ -1,5 +1,5 @@ import { ButtonProps } from "../button"; -import { v2_TextLinkProps } from "../v2_text"; +import { V2_TextLinkProps } from "../v2_text"; // ============================================================================= // NAV ITEM TYPES @@ -16,7 +16,7 @@ export interface NavItemComponentProps { export type NavItemProps = NavItemLinkProps | NavItemComponentProps; -export interface NavItemCommonProps extends v2_TextLinkProps { +export interface NavItemCommonProps extends V2_TextLinkProps { id: string; "data-testid"?: string | undefined; options?: T | undefined; diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 18a1c6606..f4a4fa5a3 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -3,7 +3,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_Layout } from "../v2_layout"; import { ClickableIcon } from "../shared/clickable-icon"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { Transition } from "../transition"; // ============================================================================= @@ -68,7 +68,7 @@ export const Content = styled.div` display: inline-block; width: 100%; - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} color: ${v2_Color.Neutral[8]}; p { @@ -76,12 +76,12 @@ export const Content = styled.div` } strong { - ${v2_TextStyleHelper.getFontFamily("Body", "semibold")} + ${V2_TextStyleHelper.getFontFamily("Body", "semibold")} color: ${v2_Color.Neutral[8]}; } a { - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} ${commonLinkStyle} } @@ -98,7 +98,7 @@ export const Content = styled.div` }} `; -export const ContentLink = styled(v2_Text.Hyperlink.Default)` +export const ContentLink = styled(V2_Text.Hyperlink.Default)` position: relative; ${commonLinkStyle} @@ -126,7 +126,7 @@ export const ActionButton = styled.button` border: none; background: transparent; color: ${v2_Color.Validation.Orange.Icon}; - ${v2_TextStyleHelper.getTextStyle("BodySmall", "semibold")}; + ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")}; cursor: pointer; `; diff --git a/src/notification-banner/types.ts b/src/notification-banner/types.ts index ee42c89b5..ce710ad81 100644 --- a/src/notification-banner/types.ts +++ b/src/notification-banner/types.ts @@ -1,4 +1,4 @@ -import { v2_TextLinkProps, v2_TextProps } from "../v2_text/types"; +import { V2_TextLinkProps, V2_TextProps } from "../v2_text/types"; export interface NotificationBannerProps extends React.HTMLAttributes { @@ -21,11 +21,11 @@ export interface NotificationBannerWithForwardedRefProps export type ContentType = "text" | "link"; -export interface ContentLinkAttributes extends v2_TextLinkProps {} -export interface ContentTextAttributes extends v2_TextProps {} +export interface ContentLinkAttributes extends V2_TextLinkProps {} +export interface ContentTextAttributes extends V2_TextProps {} export interface NotificationContentAttributes { type: ContentType; content: string; - otherAttributes?: v2_TextLinkProps | v2_TextProps | undefined; + otherAttributes?: V2_TextLinkProps | V2_TextProps | undefined; } diff --git a/src/pagination/pagination.styles.tsx b/src/pagination/pagination.styles.tsx index bb47b262d..9f51f48e3 100644 --- a/src/pagination/pagination.styles.tsx +++ b/src/pagination/pagination.styles.tsx @@ -4,7 +4,7 @@ import { v2_Color } from "../v2_color"; import { Input } from "../input"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; // ============================================================================= // STYLE INTERFACE, transient props are denoted with $ @@ -129,11 +129,11 @@ export const PageItem = styled(Button.Default)` ${(props) => { if (props.$selected) { return css` - ${v2_TextStyleHelper.getTextStyle("Body", 700)}; + ${V2_TextStyleHelper.getTextStyle("Body", 700)}; `; } else { return css` - ${v2_TextStyleHelper.getTextStyle("Body", 400)}; + ${V2_TextStyleHelper.getTextStyle("Body", 400)}; `; } }} @@ -152,11 +152,11 @@ export const PageItem = styled(Button.Default)` ${(props) => { if (props.$selected) { return css` - ${v2_TextStyleHelper.getTextStyle("Body", 700)}; + ${V2_TextStyleHelper.getTextStyle("Body", 700)}; `; } else { return css` - ${v2_TextStyleHelper.getTextStyle("Body", 600)}; + ${V2_TextStyleHelper.getTextStyle("Body", 600)}; `; } }} @@ -176,11 +176,11 @@ export const PageItem = styled(Button.Default)` ${(props) => { if (props.$selected) { return css` - ${v2_TextStyleHelper.getTextStyle("Body", 700)}; + ${V2_TextStyleHelper.getTextStyle("Body", 700)}; `; } else { return css` - ${v2_TextStyleHelper.getTextStyle("Body", 400)}; + ${V2_TextStyleHelper.getTextStyle("Body", 400)}; `; } }} @@ -237,17 +237,17 @@ export const PaginationMobileInput = styled.div` justify-content: center; `; -export const Label = styled(v2_Text.Body)` +export const Label = styled(V2_Text.Body)` white-space: nowrap; `; -export const LabelDivider = styled(v2_Text.Body)` +export const LabelDivider = styled(V2_Text.Body)` white-space: nowrap; margin: 0 1rem; `; export const InputView = styled(Input)` - ${v2_TextStyleHelper.getTextStyle("Body", 400)}; + ${V2_TextStyleHelper.getTextStyle("Body", 400)}; justify-content: center; width: 3.5rem; height: 2.5rem; @@ -259,13 +259,13 @@ export const InputView = styled(Input)` text-align: center; ::placeholder { - ${v2_TextStyleHelper.getTextStyle("XSmall", 400)}; + ${V2_TextStyleHelper.getTextStyle("XSmall", 400)}; } } `; export const Hover = styled.div` - ${v2_TextStyleHelper.getTextStyle("XSmall", 400)}; + ${V2_TextStyleHelper.getTextStyle("XSmall", 400)}; background-color: ${v2_Color.Primary}; border: none; diff --git a/src/pill/pill.style.tsx b/src/pill/pill.style.tsx index c52a1e1a7..81549c091 100644 --- a/src/pill/pill.style.tsx +++ b/src/pill/pill.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color/color"; import { PillColorType, PillType } from "./types"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_TextStyleHelper } from "../v2_text"; // ============================================================================= // STYLING @@ -16,7 +16,7 @@ export const Wrapper = styled.div` padding: 0.125rem 0.5rem; width: fit-content; max-width: 100%; - ${v2_TextStyleHelper.getTextStyle("XSmall", "semibold")} + ${V2_TextStyleHelper.getTextStyle("XSmall", "semibold")} display: flex; align-items: center; gap: 0.25rem; diff --git a/src/popover-v2/popover.tsx b/src/popover-v2/popover.tsx index e1da4015a..5f1775da1 100644 --- a/src/popover-v2/popover.tsx +++ b/src/popover-v2/popover.tsx @@ -1,7 +1,7 @@ import { useMediaQuery } from "react-responsive"; import { Modal } from "../modal/modal"; import { MediaWidths } from "../spec/media-spec"; -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; import { ContentWrapper, MobileModalBox, @@ -38,7 +38,7 @@ export const PopoverV2 = ({ // ============================================================================= const renderContent = () => typeof children === "string" ? ( - {children} + {children} ) : ( children ); diff --git a/src/popover/popover.tsx b/src/popover/popover.tsx index 1cdbb10b5..7a7e9ca83 100644 --- a/src/popover/popover.tsx +++ b/src/popover/popover.tsx @@ -4,7 +4,7 @@ import { useMediaQuery } from "react-responsive"; import { Card } from "src/card"; import { Modal } from "../modal/modal"; import { MediaWidths } from "../spec/media-spec"; -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; import { BubbleWrap, ContentWrapper, @@ -136,7 +136,7 @@ export const Popover = ({ // ============================================================================= const renderContent = () => typeof children === "string" ? ( - {children} + {children} ) : ( children ); diff --git a/src/progress-indicator/progress-indicator.style.tsx b/src/progress-indicator/progress-indicator.style.tsx index 5e1b6817f..fd900bef7 100644 --- a/src/progress-indicator/progress-indicator.style.tsx +++ b/src/progress-indicator/progress-indicator.style.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; // Units in rem export const INDICATOR_BAR_MARGIN_RIGHT_MOBILE = 0.5; @@ -54,7 +54,7 @@ export const IndicatorBar = styled.div` }}; `; -export const IndicatorTitleDesktop = styled(v2_Text.BodySmall)` +export const IndicatorTitleDesktop = styled(V2_Text.BodySmall)` overflow-wrap: anywhere; ${(props) => { const { highlighted } = props; @@ -63,7 +63,7 @@ export const IndicatorTitleDesktop = styled(v2_Text.BodySmall)` }}; `; -export const IndicatorTitleMobile = styled(v2_Text.BodySmall)` +export const IndicatorTitleMobile = styled(V2_Text.BodySmall)` overflow-wrap: anywhere; color: ${v2_Color.Neutral[1]}; `; diff --git a/src/shared/dropdown-list-v2/dropdown-label.styles.tsx b/src/shared/dropdown-list-v2/dropdown-label.styles.tsx index 993ec2f6d..41a09c1fa 100644 --- a/src/shared/dropdown-list-v2/dropdown-label.styles.tsx +++ b/src/shared/dropdown-list-v2/dropdown-label.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../../v2_color"; -import { v2_TextStyleHelper } from "../../v2_text"; +import { V2_TextStyleHelper } from "../../v2_text"; import { DropdownVariantType, LabelDisplayType, @@ -33,7 +33,7 @@ const lineClampCss = css` export const PrimaryText = styled.div` ${(props) => - v2_TextStyleHelper.getTextStyle( + V2_TextStyleHelper.getTextStyle( props.$variant === "small" ? "BodySmall" : "Body", "regular" )} @@ -54,12 +54,12 @@ export const SecondaryText = styled.div` switch (props.$labelDisplayType) { case "next-line": return css` - ${v2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} + ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} `; case "inline": default: return css` - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} `; } }} diff --git a/src/shared/dropdown-list-v2/dropdown-label.tsx b/src/shared/dropdown-list-v2/dropdown-label.tsx index 2f382b44d..ff9e48da7 100644 --- a/src/shared/dropdown-list-v2/dropdown-label.tsx +++ b/src/shared/dropdown-list-v2/dropdown-label.tsx @@ -1,7 +1,7 @@ import { useCallback, useMemo } from "react"; import { useResizeDetector } from "react-resize-detector"; import { useTheme } from "styled-components"; -import { v2_TextStyle } from "../../v2_text"; +import { V2_TextStyle } from "../../v2_text"; import { BaseTheme } from "../../theme"; import { StringHelper } from "../../util/string-helper"; import { DropdownVariantType, LabelDisplayType } from "../dropdown-list/types"; @@ -33,8 +33,8 @@ export const DropdownLabel = ({ variant, }: DropdownLabelProps): JSX.Element => { const theme = useTheme() || BaseTheme; - const fontSize = v2_TextStyle.Body.fontSize({ theme }); - const fontFamily = v2_TextStyle.Body.fontFamily({ theme }); + const fontSize = V2_TextStyle.Body.fontSize({ theme }); + const fontFamily = V2_TextStyle.Body.fontFamily({ theme }); const { ref, width } = useResizeDetector(); // ========================================================================= diff --git a/src/shared/dropdown-list-v2/dropdown-list.styles.tsx b/src/shared/dropdown-list-v2/dropdown-list.styles.tsx index 6ab56fa00..20f3ecfe2 100644 --- a/src/shared/dropdown-list-v2/dropdown-list.styles.tsx +++ b/src/shared/dropdown-list-v2/dropdown-list.styles.tsx @@ -5,7 +5,7 @@ import { TickIcon } from "@lifesg/react-icons/tick"; import styled, { css } from "styled-components"; import { v2_Color } from "../../v2_color"; import { v2_MediaQuery } from "../../v2_media"; -import { v2_TextStyleHelper } from "../../v2_text"; +import { V2_TextStyleHelper } from "../../v2_text"; import { DropdownVariantType } from "../dropdown-list/types"; import { BasicButton } from "../input-wrapper/input-wrapper"; @@ -133,7 +133,7 @@ export const SelectAllContainer = styled.div` export const DropdownCommonButton = styled(BasicButton)` ${(props) => - v2_TextStyleHelper.getTextStyle( + V2_TextStyleHelper.getTextStyle( props.$variant === "small" ? "BodySmall" : "Body", "semibold" )} @@ -159,7 +159,7 @@ export const ResultStateContainer = styled.div` export const ResultStateText = styled.div` ${(props) => - v2_TextStyleHelper.getTextStyle( + V2_TextStyleHelper.getTextStyle( props.$variant === "small" ? "BodySmall" : "Body", "regular" )} diff --git a/src/shared/dropdown-list-v2/expandable-element.styles.tsx b/src/shared/dropdown-list-v2/expandable-element.styles.tsx index 2649db0c5..d8c9247cb 100644 --- a/src/shared/dropdown-list-v2/expandable-element.styles.tsx +++ b/src/shared/dropdown-list-v2/expandable-element.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../../v2_color"; -import { v2_TextStyle, v2_TextStyleHelper } from "../../v2_text"; +import { V2_TextStyle, V2_TextStyleHelper } from "../../v2_text"; import { Transition } from "../../transition"; import { BasicButton } from "../input-wrapper/input-wrapper"; import { DropdownVariantType } from "./types"; @@ -25,7 +25,7 @@ export const Selector = styled(BasicButton)` props.$variant === "small" ? "0.4375rem 1rem" : "0.6875rem 1rem"}; ${(props) => - v2_TextStyleHelper.getTextStyle( + V2_TextStyleHelper.getTextStyle( props.$variant === "small" ? "BodySmall" : "Body", "regular" )} @@ -46,8 +46,8 @@ export const IconContainer = styled.div` ${(props) => { const size = props.$variant === "small" - ? v2_TextStyle.BodySmall.fontSize - : v2_TextStyle.Body.fontSize; + ? V2_TextStyle.BodySmall.fontSize + : V2_TextStyle.Body.fontSize; return css` height: ${size}rem; width: ${size}rem; diff --git a/src/shared/dropdown-list/dropdown-list.styles.tsx b/src/shared/dropdown-list/dropdown-list.styles.tsx index a5b7d8988..ca6941cdb 100644 --- a/src/shared/dropdown-list/dropdown-list.styles.tsx +++ b/src/shared/dropdown-list/dropdown-list.styles.tsx @@ -4,7 +4,7 @@ import styled, { css } from "styled-components"; import { Checkbox } from "../../checkbox"; import { v2_Color } from "../../v2_color"; import { v2_MediaQuery } from "../../v2_media"; -import { v2_TextStyleHelper } from "../../v2_text"; +import { V2_TextStyleHelper } from "../../v2_text"; import { DropdownVariantType, IconProps, @@ -159,7 +159,7 @@ const lineClampCss = css` export const PrimaryText = styled.div` ${(props) => - v2_TextStyleHelper.getTextStyle( + V2_TextStyleHelper.getTextStyle( props.$variant === "small" ? "BodySmall" : "Body", "regular" )} @@ -179,12 +179,12 @@ export const SecondaryText = styled.div` switch (props.$labelDisplayType) { case "next-line": return css` - ${v2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} + ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} `; case "inline": default: return css` - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} `; } }} @@ -253,7 +253,7 @@ export const SelectAllContainer = styled.div` export const DropdownCommonButton = styled.button` ${(props) => - v2_TextStyleHelper.getTextStyle( + V2_TextStyleHelper.getTextStyle( props.$variant === "small" ? "BodySmall" : "Body", "semibold" )} @@ -279,7 +279,7 @@ export const ResultStateContainer = styled.div` export const ResultStateText = styled.div` ${(props) => - v2_TextStyleHelper.getTextStyle( + V2_TextStyleHelper.getTextStyle( props.$variant === "small" ? "BodySmall" : "Body", "regular" )} diff --git a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx index ed7e05aa5..2872d6e3c 100644 --- a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx +++ b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx @@ -2,7 +2,7 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import styled, { css, keyframes } from "styled-components"; import { v2_Color } from "../../v2_color"; import { v2_DesignToken } from "../../v2_design-token"; -import { v2_TextStyle, v2_TextStyleHelper } from "../../v2_text"; +import { V2_TextStyle, V2_TextStyleHelper } from "../../v2_text"; import { Transition } from "../../transition"; import { DropdownVariantType, TruncateType } from "../dropdown-list/types"; @@ -171,9 +171,9 @@ export const IconContainer = styled.div` export const StyledChevronIcon = styled(ChevronDownIcon)` color: ${v2_Color.Neutral[3]}; ${(props) => { - let size = v2_TextStyle.Body.fontSize; + let size = V2_TextStyle.Body.fontSize; if (props.$variant === "small") { - size = v2_TextStyle.BodySmall.fontSize; + size = V2_TextStyle.BodySmall.fontSize; } return css` height: ${size}rem; @@ -196,7 +196,7 @@ export const LabelContainer = styled.div` export const ValueLabel = styled.div` ${(props) => - v2_TextStyleHelper.getTextStyle( + V2_TextStyleHelper.getTextStyle( props.$variant === "small" ? "BodySmall" : "Body", "regular" )} diff --git a/src/shared/html-content/html-content.ts b/src/shared/html-content/html-content.ts index c83cf7ef6..56705f5e4 100644 --- a/src/shared/html-content/html-content.ts +++ b/src/shared/html-content/html-content.ts @@ -1,10 +1,10 @@ import { css } from "styled-components"; import { v2_Color } from "../../v2_color"; import { FontFamily } from "../../spec/text-spec/font-spec"; -import { v2_TextSizeType, v2_TextStyleHelper } from "../../v2_text"; +import { V2_TextSizeType, V2_TextStyleHelper } from "../../v2_text"; export interface HtmlContentStyleOptions { - textSize?: v2_TextSizeType | undefined; + textSize?: V2_TextSizeType | undefined; } export const applyHtmlContentStyle = (options?: HtmlContentStyleOptions) => { @@ -12,11 +12,11 @@ export const applyHtmlContentStyle = (options?: HtmlContentStyleOptions) => { return css` // Text styling - ${textSize && v2_TextStyleHelper.getTextStyle(textSize, "regular")} + ${textSize && V2_TextStyleHelper.getTextStyle(textSize, "regular")} strong { font-family: ${FontFamily.OpenSans.Semibold}; - ${textSize && v2_TextStyleHelper.getTextStyle(textSize, "semibold")} + ${textSize && V2_TextStyleHelper.getTextStyle(textSize, "semibold")} } p { @@ -26,7 +26,7 @@ export const applyHtmlContentStyle = (options?: HtmlContentStyleOptions) => { // Link styling a { font-family: ${FontFamily.OpenSans.Semibold}; - ${textSize && v2_TextStyleHelper.getTextStyle(textSize, "semibold")} + ${textSize && V2_TextStyleHelper.getTextStyle(textSize, "semibold")} color: ${v2_Color.Primary}; text-decoration: none; diff --git a/src/shared/input-wrapper/input-wrapper.tsx b/src/shared/input-wrapper/input-wrapper.tsx index 6a31c8ed3..1616cc3b4 100644 --- a/src/shared/input-wrapper/input-wrapper.tsx +++ b/src/shared/input-wrapper/input-wrapper.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../../v2_color"; import { v2_DesignToken } from "../../v2_design-token"; -import { v2_TextStyleHelper } from "../../v2_text"; +import { V2_TextStyleHelper } from "../../v2_text"; import { DropdownVariantType } from "../dropdown-list/types"; // ============================================================================= @@ -109,7 +109,7 @@ export const InputWrapper = styled(InputBox)` */ export const BasicInput = styled.input` ${(props) => - v2_TextStyleHelper.getTextStyle( + V2_TextStyleHelper.getTextStyle( props.$variant === "small" ? "BodySmall" : "Body", "regular" )} diff --git a/src/shared/internal-calendar/calendar-manager.style.tsx b/src/shared/internal-calendar/calendar-manager.style.tsx index 3ac3d5c57..8c6368bb3 100644 --- a/src/shared/internal-calendar/calendar-manager.style.tsx +++ b/src/shared/internal-calendar/calendar-manager.style.tsx @@ -4,7 +4,7 @@ import { ChevronRightIcon } from "@lifesg/react-icons/chevron-right"; import styled, { css } from "styled-components"; import { Button } from "../../button"; import { v2_Color } from "../../v2_color"; -import { v2_TextStyleHelper } from "../../v2_text"; +import { V2_TextStyleHelper } from "../../v2_text"; import { ClickableIcon } from "../clickable-icon"; // ============================================================================= @@ -122,7 +122,7 @@ export const DropdownButton = styled.button` `; export const DropdownText = styled.p` - ${v2_TextStyleHelper.getTextStyle("H5", "regular")} + ${V2_TextStyleHelper.getTextStyle("H5", "regular")} `; export const HeaderArrows = styled.div` diff --git a/src/shared/internal-calendar/day-cell/day-cell.style.tsx b/src/shared/internal-calendar/day-cell/day-cell.style.tsx index 9fced9b15..c39df0b07 100644 --- a/src/shared/internal-calendar/day-cell/day-cell.style.tsx +++ b/src/shared/internal-calendar/day-cell/day-cell.style.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../../../v2_color"; -import { v2_Text, v2_TextStyleHelper } from "../../../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../../../v2_text"; import { CellType, LabelType } from "./types"; // ============================================================================= @@ -168,7 +168,7 @@ export const RightCircle = styled(Circle)` } `; -export const Label = styled(v2_Text.H5)` +export const Label = styled(V2_Text.H5)` position: absolute; top: 0; bottom: 0; @@ -197,7 +197,7 @@ export const Label = styled(v2_Text.H5)` if ($disabled) { if ($type === "selected") { return css` - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")}; + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")}; color: ${v2_Color.Accent.Light[2]}; `; } @@ -210,7 +210,7 @@ export const Label = styled(v2_Text.H5)` switch ($type) { case "selected": return css` - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")}; + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")}; color: ${v2_Color.Primary}; `; case "current": diff --git a/src/shared/internal-calendar/fixed-range/fixed-range-calendar-day-view.tsx b/src/shared/internal-calendar/fixed-range/fixed-range-calendar-day-view.tsx index a0c256d53..dc8dd18c4 100644 --- a/src/shared/internal-calendar/fixed-range/fixed-range-calendar-day-view.tsx +++ b/src/shared/internal-calendar/fixed-range/fixed-range-calendar-day-view.tsx @@ -1,6 +1,6 @@ import dayjs, { Dayjs } from "dayjs"; import { useMemo, useState } from "react"; -import { v2_Text } from "../../../v2_text/text"; +import { V2_Text } from "../../../v2_text/text"; import { CalendarHelper } from "../../../util/calendar-helper"; import { HeaderCell, RowDayCell, Wrapper } from "../standard"; import { CommonCalendarProps } from "../types"; @@ -64,9 +64,9 @@ export const FixedRangeCalendarDayView = ({ const renderHeader = () => { return weeksOfTheMonth[0].map((day, index) => ( - + {dayjs(day).format("ddd")} - + )); }; diff --git a/src/shared/internal-calendar/internal-calendar-month.style.tsx b/src/shared/internal-calendar/internal-calendar-month.style.tsx index cbd43bd00..2351187f6 100644 --- a/src/shared/internal-calendar/internal-calendar-month.style.tsx +++ b/src/shared/internal-calendar/internal-calendar-month.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../../v2_color"; -import { v2_TextStyleHelper } from "../../v2_text/helper"; -import { v2_Text } from "../../v2_text/text"; +import { V2_TextStyleHelper } from "../../v2_text/helper"; +import { V2_Text } from "../../v2_text/text"; import { MonthVariant } from "./internal-calendar-month"; import { CalendarType } from "./types"; @@ -87,7 +87,7 @@ export const MonthCell = styled.div` }} `; -export const CellLabel = styled(v2_Text.H5)` +export const CellLabel = styled(V2_Text.H5)` ${(props) => { if (props.$disabledDisplay) { return css` @@ -102,7 +102,7 @@ export const CellLabel = styled(v2_Text.H5)` `; case "selected-month": return css` - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} color: ${v2_Color.Primary(props)}; `; case "default": diff --git a/src/shared/internal-calendar/internal-calendar-year.style.tsx b/src/shared/internal-calendar/internal-calendar-year.style.tsx index 26ce3eb65..b043a168b 100644 --- a/src/shared/internal-calendar/internal-calendar-year.style.tsx +++ b/src/shared/internal-calendar/internal-calendar-year.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../../v2_color"; -import { v2_TextStyleHelper } from "../../v2_text/helper"; -import { v2_Text } from "../../v2_text/text"; +import { V2_TextStyleHelper } from "../../v2_text/helper"; +import { V2_Text } from "../../v2_text/text"; import { YearVariant } from "./internal-calendar-year"; import { CalendarType } from "./types"; @@ -89,7 +89,7 @@ export const YearCell = styled.div` }}; `; -export const CellLabel = styled(v2_Text.H5)` +export const CellLabel = styled(V2_Text.H5)` ${(props) => { if (props.$disabledDisplay) { return css` @@ -104,7 +104,7 @@ export const CellLabel = styled(v2_Text.H5)` `; case "selected-year": return css` - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} color: ${v2_Color.Primary(props)}; `; case "other-decade": diff --git a/src/shared/internal-calendar/standard/standard-calendar-day-view.style.tsx b/src/shared/internal-calendar/standard/standard-calendar-day-view.style.tsx index d4a88d760..6ed13ea6f 100644 --- a/src/shared/internal-calendar/standard/standard-calendar-day-view.style.tsx +++ b/src/shared/internal-calendar/standard/standard-calendar-day-view.style.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../../../v2_color"; -import { v2_Text, v2_TextStyleHelper } from "../../../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../../../v2_text"; import { DayVariant } from "./standard-calendar-day-view"; // ============================================================================= @@ -88,13 +88,13 @@ export const BaseInteractiveCircle = styled.div` position: absolute; `; -export const DayLabel = styled(v2_Text.H5)` +export const DayLabel = styled(V2_Text.H5)` ${(props) => { const { $disabledDisplay, $selected, $variant } = props; if ($disabledDisplay && $selected) { return css` - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")}; + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")}; color: ${v2_Color.Accent.Light[2]}; `; } @@ -107,7 +107,7 @@ export const DayLabel = styled(v2_Text.H5)` if ($selected) { return css` - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")}; + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")}; color: ${v2_Color.Primary}; `; } diff --git a/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx b/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx index fb2e06376..d41a09310 100644 --- a/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx +++ b/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx @@ -1,7 +1,7 @@ import dayjs, { Dayjs } from "dayjs"; import isBetween from "dayjs/plugin/isBetween"; import { useMemo, useState } from "react"; -import { v2_Text } from "../../../v2_text/text"; +import { V2_Text } from "../../../v2_text/text"; import { CalendarHelper } from "../../../util/calendar-helper"; import { CommonCalendarProps, FocusType } from "../types"; import { @@ -75,9 +75,9 @@ export const StandardCalendarDayView = ({ const renderHeader = () => { return weeksOfTheMonth[0].map((day, index) => ( - + {dayjs(day).format("ddd")} - + )); }; diff --git a/src/shared/internal-calendar/week/week-calendar-day-view.tsx b/src/shared/internal-calendar/week/week-calendar-day-view.tsx index c04c699e6..aa5f366ad 100644 --- a/src/shared/internal-calendar/week/week-calendar-day-view.tsx +++ b/src/shared/internal-calendar/week/week-calendar-day-view.tsx @@ -1,6 +1,6 @@ import dayjs, { Dayjs } from "dayjs"; import { useMemo, useState } from "react"; -import { v2_Text } from "../../../v2_text/text"; +import { V2_Text } from "../../../v2_text/text"; import { CalendarHelper } from "../../../util/calendar-helper"; import { HeaderCell, RowDayCell, Wrapper } from "../standard"; import { CommonCalendarProps } from "../types"; @@ -64,9 +64,9 @@ export const WeekCalendarDayView = ({ const renderHeader = () => { return weeksOfTheMonth[0].map((day, index) => ( - + {dayjs(day).format("ddd")} - + )); }; diff --git a/src/shared/nested-dropdown-list/list-item.styles.tsx b/src/shared/nested-dropdown-list/list-item.styles.tsx index 67540840a..6603f0a19 100644 --- a/src/shared/nested-dropdown-list/list-item.styles.tsx +++ b/src/shared/nested-dropdown-list/list-item.styles.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../../v2_color"; import { Checkbox } from "../../checkbox"; -import { v2_TextStyleHelper } from "../../v2_text"; +import { V2_TextStyleHelper } from "../../v2_text"; import { TruncateType } from "./types"; import { IconButton } from "../../icon-button"; import { TriangleForwardFillIcon } from "@lifesg/react-icons/triangle-forward-fill"; @@ -90,7 +90,7 @@ export const Item = styled.li` `; export const Label = styled.div` - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} overflow: hidden; ${(props) => { @@ -110,7 +110,7 @@ export const Label = styled.div` `; export const Bold = styled.span` - ${v2_TextStyleHelper.getTextStyle("Body", "semibold")} + ${V2_TextStyleHelper.getTextStyle("Body", "semibold")} `; export const TruncateContainer = styled.div` @@ -183,7 +183,7 @@ export const TriangleIcon = styled(TriangleForwardFillIcon)` `; export const TitleButton = styled.button` - ${v2_TextStyleHelper.getTextStyle("H4", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} color: ${v2_Color.Neutral[1]}; text-align: left; line-height: 1.625rem; diff --git a/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx b/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx index 4f475005c..cc35d0e65 100644 --- a/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx +++ b/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx @@ -3,7 +3,7 @@ import { animated } from "react-spring"; import styled from "styled-components"; import { v2_Color } from "../../v2_color"; import { v2_MediaQuery } from "../../v2_media"; -import { v2_Text, v2_TextStyleHelper } from "../../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../../v2_text"; // ============================================================================= // STYLE INTERFACE @@ -57,7 +57,7 @@ export const ResultStateContainer = styled.div` align-items: center; `; -export const ResultStateText = styled(v2_Text.Body)``; +export const ResultStateText = styled(V2_Text.Body)``; export const LabelIcon = styled(ExclamationCircleFillIcon)` margin-right: 0.625rem; @@ -74,7 +74,7 @@ export const SelectAllContainer = styled.div` `; export const DropdownCommonButton = styled.button` - ${v2_TextStyleHelper.getTextStyle("Body", "semibold")} + ${V2_TextStyleHelper.getTextStyle("Body", "semibold")} color: ${v2_Color.Primary}; background-color: transparent; border: none; diff --git a/src/shared/standalone-date-input/standalone-date-input.style.tsx b/src/shared/standalone-date-input/standalone-date-input.style.tsx index 1f21bfcfd..253d2a15e 100644 --- a/src/shared/standalone-date-input/standalone-date-input.style.tsx +++ b/src/shared/standalone-date-input/standalone-date-input.style.tsx @@ -1,8 +1,8 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../../v2_color"; import { BasicInput } from "../input-wrapper/input-wrapper"; -import { v2_TextStyleHelper } from "../../v2_text/helper"; -import { v2_Text } from "../../v2_text/text"; +import { V2_TextStyleHelper } from "../../v2_text/helper"; +import { V2_Text } from "../../v2_text/text"; // ============================================================================= // STYLE INTERFACE, transient props are denoted with $ @@ -67,7 +67,7 @@ export const YearInput = styled(BaseInput)` margin-left: 0.25rem; `; -export const Divider = styled(v2_Text.Body)` +export const Divider = styled(V2_Text.Body)` ${(props) => { if (props.$inactive) { return css` @@ -78,7 +78,7 @@ export const Divider = styled(v2_Text.Body)` `; export const Placeholder = styled.div` - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} background-color: ${v2_Color.Neutral[8]}; color: ${v2_Color.Neutral[3]}; position: absolute; diff --git a/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx b/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx index b2d0e9dc7..09aa75720 100644 --- a/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx +++ b/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx @@ -3,7 +3,7 @@ import styled from "styled-components"; import { Button } from "../../button"; import { v2_Color } from "../../v2_color"; import { v2_MediaQuery } from "../../v2_media"; -import { v2_Text } from "../../v2_text"; +import { V2_Text } from "../../v2_text"; import { Toggle } from "../../toggle"; import { ClickableIcon } from "../clickable-icon"; import { BasicInput } from "../input-wrapper/input-wrapper"; @@ -116,7 +116,7 @@ export const SwitchButton = styled(ClickableIcon)` } `; -export const DividerLabel = styled(v2_Text.Body)` +export const DividerLabel = styled(V2_Text.Body)` width: 1.5rem; margin: 0 0.25rem; text-align: center; diff --git a/src/sidenav/sidenav-drawer-item.styles.tsx b/src/sidenav/sidenav-drawer-item.styles.tsx index d30b49116..ee3f79468 100644 --- a/src/sidenav/sidenav-drawer-item.styles.tsx +++ b/src/sidenav/sidenav-drawer-item.styles.tsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; import { Button } from "../button"; import { v2_Color } from "../v2_color"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_TextStyleHelper } from "../v2_text"; import { animated } from "react-spring"; //============================================================================= @@ -34,7 +34,7 @@ export const LinkButton = styled(Button.Default)` display: flex; flex-direction: row; justify-content: space-between; - ${v2_TextStyleHelper.getFontFamily("H5", "semibold")} + ${V2_TextStyleHelper.getFontFamily("H5", "semibold")} font-size: 1rem !important; color: ${v2_Color.Neutral[1]} !important; } diff --git a/src/sidenav/sidenav-drawer-subitem.styles.tsx b/src/sidenav/sidenav-drawer-subitem.styles.tsx index 1c34ae5b7..af0010d36 100644 --- a/src/sidenav/sidenav-drawer-subitem.styles.tsx +++ b/src/sidenav/sidenav-drawer-subitem.styles.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { Button } from "../button"; import { v2_Color } from "../v2_color"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_TextStyleHelper } from "../v2_text"; //============================================================================= // STYLING @@ -16,7 +16,7 @@ export const LinkButton = styled(Button.Default)` outline-offset: -0.125rem; span { - ${v2_TextStyleHelper.getFontFamily("H5", "regular")} + ${V2_TextStyleHelper.getFontFamily("H5", "regular")} font-size: 1rem !important; color: ${v2_Color.Neutral[1]} !important; overflow: hidden; @@ -30,7 +30,7 @@ export const LinkButton = styled(Button.Default)` :focus { background-color: ${v2_Color.Accent.Light[5]}; span { - ${v2_TextStyleHelper.getFontFamily("H5", "semibold")} + ${V2_TextStyleHelper.getFontFamily("H5", "semibold")} color: ${v2_Color.Primary} !important; } } diff --git a/src/sidenav/sidenav-item.styles.tsx b/src/sidenav/sidenav-item.styles.tsx index 6d66a5755..cb5071f9f 100644 --- a/src/sidenav/sidenav-item.styles.tsx +++ b/src/sidenav/sidenav-item.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { v2_Color } from "../v2_color"; import { Button } from "../button"; @@ -33,7 +33,7 @@ export const DefaultButton = styled(Button.Default)` } span { - ${v2_TextStyleHelper.getFontFamily("XSmall", "regular")} + ${V2_TextStyleHelper.getFontFamily("XSmall", "regular")} font-size: 0.75rem !important; overflow: hidden; display: -webkit-box; @@ -51,7 +51,7 @@ export const DefaultButton = styled(Button.Default)` } span { - ${v2_TextStyleHelper.getFontFamily("XSmall", "semibold")} + ${V2_TextStyleHelper.getFontFamily("XSmall", "semibold")} color: ${v2_Color.Primary} !important; } } @@ -66,7 +66,7 @@ export const DefaultButton = styled(Button.Default)` } span { - ${v2_TextStyleHelper.getFontFamily("XSmall", "semibold")} + ${V2_TextStyleHelper.getFontFamily("XSmall", "semibold")} color: ${v2_Color.Primary}; } } @@ -80,4 +80,4 @@ export const IconContainer = styled.div` margin-bottom: 0.25rem; `; -export const TitleText = styled(v2_Text.XSmall)``; +export const TitleText = styled(V2_Text.XSmall)``; diff --git a/src/smart-app-banner/smart-app-banner.styles.ts b/src/smart-app-banner/smart-app-banner.styles.ts index 6bb62a6f0..3a46c0dd0 100644 --- a/src/smart-app-banner/smart-app-banner.styles.ts +++ b/src/smart-app-banner/smart-app-banner.styles.ts @@ -7,7 +7,7 @@ import { Button } from "../button"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; const slideDown = keyframes` from { @@ -97,18 +97,18 @@ export const StyledButton = styled(Button.Small)` height: auto; & > span { overflow-wrap: anywhere; - ${v2_TextStyleHelper.getTextStyle("XSmall", "semibold")}; + ${V2_TextStyleHelper.getTextStyle("XSmall", "semibold")}; } `; -export const Title = styled(v2_Text.H6)` +export const Title = styled(V2_Text.H6)` overflow-wrap: anywhere; ${v2_MediaQuery.MaxWidth.mobileM} { - ${v2_TextStyleHelper.getTextStyle("XSmall", "semibold")} + ${V2_TextStyleHelper.getTextStyle("XSmall", "semibold")} } `; -export const Description = styled(v2_Text.XSmall)` +export const Description = styled(V2_Text.XSmall)` overflow-wrap: anywhere; `; diff --git a/src/spec/text-spec/base-text-style-set.ts b/src/spec/text-spec/base-text-style-set.ts index 7f2348631..182536b36 100644 --- a/src/spec/text-spec/base-text-style-set.ts +++ b/src/spec/text-spec/base-text-style-set.ts @@ -1,8 +1,8 @@ import { FontFamily } from "./font-spec"; -import { v2_TextStyleSetType } from "../../v2_text/types"; +import { V2_TextStyleSetType } from "../../v2_text/types"; // In rem unit -export const BaseTextStyleSet: v2_TextStyleSetType = { +export const BaseTextStyleSet: V2_TextStyleSetType = { D1: { fontFamily: FontFamily.OpenSans.Bold, fontSize: 3, diff --git a/src/spec/text-spec/oneservice-text-style-set.ts b/src/spec/text-spec/oneservice-text-style-set.ts index 1d1eab26b..789f5457c 100644 --- a/src/spec/text-spec/oneservice-text-style-set.ts +++ b/src/spec/text-spec/oneservice-text-style-set.ts @@ -1,8 +1,8 @@ import { FontFamily } from "./font-spec"; -import { v2_TextStyleSetType } from "../../v2_text/types"; +import { V2_TextStyleSetType } from "../../v2_text/types"; // In rem unit -export const OneServiceTextStyleSet: v2_TextStyleSetType = { +export const OneServiceTextStyleSet: V2_TextStyleSetType = { D1: { fontFamily: FontFamily.OpenSans.Bold, fontSize: 2.5, diff --git a/src/tab/tab-link-chain.style.tsx b/src/tab/tab-link-chain.style.tsx index 83a3bd694..02048fe45 100644 --- a/src/tab/tab-link-chain.style.tsx +++ b/src/tab/tab-link-chain.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { FadeWrapper } from "../shared/fade-wrapper"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { v2_MediaQuery } from "../v2_media"; // ============================================================================= @@ -51,7 +51,7 @@ export const ChainLink = styled.button` cursor: pointer; `; -export const Label = styled(v2_Text.Body)` +export const Label = styled(V2_Text.Body)` position: absolute; top: 50%; left: 50%; @@ -68,7 +68,7 @@ export const Label = styled(v2_Text.Body)` }} `; -export const BoldLabel = styled(v2_Text.Body)` +export const BoldLabel = styled(V2_Text.Body)` color: ${v2_Color.Primary}; opacity: 0; ${(props) => { diff --git a/src/tag/tag.style.ts b/src/tag/tag.style.ts index d611b6fbe..97ab5d900 100644 --- a/src/tag/tag.style.ts +++ b/src/tag/tag.style.ts @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color/color"; import { TagColorType, TagType } from "./types"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_TextStyleHelper } from "../v2_text"; import { v2_MediaQuery } from "../v2_media"; // ============================================================================= @@ -18,7 +18,7 @@ export const Wrapper = styled.div` padding: 0.125rem 0.5rem; width: fit-content; max-width: 100%; - ${v2_TextStyleHelper.getTextStyle("XSmall", "semibold")} + ${V2_TextStyleHelper.getTextStyle("XSmall", "semibold")} transition: all 200ms ease; cursor: ${({ $interactive }) => ($interactive ? "pointer" : "default")}; display: flex; @@ -117,7 +117,7 @@ export const Wrapper = styled.div` ${({ $interactive }) => { if ($interactive) { return css` - ${v2_TextStyleHelper.getTextStyle("H5", "semibold")}; + ${V2_TextStyleHelper.getTextStyle("H5", "semibold")}; padding: calc(0.5rem - 1px) 1rem; `; } diff --git a/src/text-list/text-list.styles.tsx b/src/text-list/text-list.styles.tsx index 083cbd6c5..fa0661a16 100644 --- a/src/text-list/text-list.styles.tsx +++ b/src/text-list/text-list.styles.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_MediaQuery } from "../v2_media"; import { v2_Color } from "../v2_color"; -import { v2_TextStyleHelper } from "../v2_text/helper"; +import { V2_TextStyleHelper } from "../v2_text/helper"; import { OrderedListProps, UnorderedListProps } from "./types"; const baseListStyle = (bottomMargin: number) => ` @@ -25,7 +25,7 @@ export const StyledOrderedList = styled.ol` counter-reset: list; li { - ${(props) => v2_TextStyleHelper.getTextStyle(props.size, "regular")} + ${(props) => V2_TextStyleHelper.getTextStyle(props.size, "regular")} position: relative; color: ${v2_Color.Neutral[1]}; } @@ -80,7 +80,7 @@ export const StyledUnorderedList = styled.ul` list-style-type: ${(props) => props.bulletType || "disc"}; li { - ${(props) => v2_TextStyleHelper.getTextStyle(props.size, "regular")} + ${(props) => V2_TextStyleHelper.getTextStyle(props.size, "regular")} color: ${v2_Color.Neutral[1]}; } diff --git a/src/text-list/types.ts b/src/text-list/types.ts index f880f7a29..444d10cd4 100644 --- a/src/text-list/types.ts +++ b/src/text-list/types.ts @@ -1,9 +1,9 @@ -import { v2_TextSizeType } from "../v2_text/types"; +import { V2_TextSizeType } from "../v2_text/types"; interface BaseListProps { children: JSX.Element | JSX.Element[]; bottomMargin?: number | undefined; - size?: v2_TextSizeType | undefined; + size?: V2_TextSizeType | undefined; } export type CounterType = "lower-alpha" | "decimal" | "lower-roman"; diff --git a/src/theme/text-theme-helper.ts b/src/theme/text-theme-helper.ts index 012f3ea87..377a519ae 100644 --- a/src/theme/text-theme-helper.ts +++ b/src/theme/text-theme-helper.ts @@ -1,6 +1,6 @@ import { BaseTextStyleSet } from "../spec/text-spec/base-text-style-set"; import { OneServiceTextStyleSet } from "../spec/text-spec/oneservice-text-style-set"; -import { v2_TextStyleSetType } from "../v2_text/types"; +import { V2_TextStyleSetType } from "../v2_text/types"; import { getCollection, getValue } from "./helper"; import { FontStyleCollectionsMap, @@ -30,7 +30,7 @@ const TextStyleSpec: ThemeCollectionSpec< export const getThemeTextStyles = (attributePath: string) => { return (props: any): string | number => { const theme = props.theme as ThemeSpec; - const textStyleSet: v2_TextStyleSetType = getCollection( + const textStyleSet: V2_TextStyleSetType = getCollection( TextStyleSpec, theme[ThemeContextKeys.textStyleScheme] ); diff --git a/src/theme/types.ts b/src/theme/types.ts index 2d19cb684..8c47242db 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -5,8 +5,8 @@ import { v2_DesignTokenSetOptions, } from "../v2_design-token/types"; import { - v2_TextStyleSetOptionsType, - v2_TextStyleSetType, + V2_TextStyleSetOptionsType, + V2_TextStyleSetType, } from "../v2_text/types"; export type ThemeLayout = "normal"; @@ -30,7 +30,7 @@ export type ColorCollectionsMap = { // ============================================================================= export type TextStyleScheme = "base" | "oneservice"; export type FontStyleCollectionsMap = { - [key in TextStyleScheme]: v2_TextStyleSetType; + [key in TextStyleScheme]: V2_TextStyleSetType; }; // ============================================================================= @@ -60,7 +60,7 @@ export enum ThemeContextKeys { export interface ThemeSpecOptions { /** for color customisation, can specify subset of set */ color?: v2_ColorSetOptions | undefined; - textStyle?: v2_TextStyleSetOptionsType | undefined; + textStyle?: V2_TextStyleSetOptionsType | undefined; designToken?: v2_DesignTokenSetOptions | undefined; } diff --git a/src/time-slot-bar-week/time-slot-bar-week-days.style.tsx b/src/time-slot-bar-week/time-slot-bar-week-days.style.tsx index 7e1556a97..bfafef2e7 100644 --- a/src/time-slot-bar-week/time-slot-bar-week-days.style.tsx +++ b/src/time-slot-bar-week/time-slot-bar-week-days.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; -import { v2_Text } from "../v2_text/text"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_Text } from "../v2_text/text"; +import { V2_TextStyleHelper } from "../v2_text"; import { Button } from "../button"; import { ChevronUpIcon } from "@lifesg/react-icons"; import { Transition } from "../transition"; @@ -38,7 +38,7 @@ export const HeaderCellWeek = styled.div` flex: 1; `; -export const CellWeekText = styled(v2_Text.XSmall)` +export const CellWeekText = styled(V2_Text.XSmall)` ${(props) => props.$disabled && css` @@ -90,7 +90,7 @@ export const TimeColumnWrapper = styled.div` `; export const TimeColumnText = styled.div` - ${v2_TextStyleHelper.getFontFamily("Body", 700)} + ${V2_TextStyleHelper.getFontFamily("Body", 700)} color: ${v2_Color.Neutral[3]}; font-size: 0.625rem !important; line-height: 0.75rem !important; diff --git a/src/time-slot-bar/time-slot-bar.styles.tsx b/src/time-slot-bar/time-slot-bar.styles.tsx index b91353251..0acbc4019 100644 --- a/src/time-slot-bar/time-slot-bar.styles.tsx +++ b/src/time-slot-bar/time-slot-bar.styles.tsx @@ -3,7 +3,7 @@ import { ChevronRightIcon } from "@lifesg/react-icons/chevron-right"; import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { ClickableIcon } from "../shared/clickable-icon"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { Direction, SlotStyle, TimeSlotBarVariant } from "./types"; const MAX_LINE_HEIGHT = 1.25; // NOTE in rem @@ -159,7 +159,7 @@ export const TimeMarker = styled.div` }} `; -export const TimeLabel = styled(v2_Text.XSmall)` +export const TimeLabel = styled(V2_Text.XSmall)` color: ${v2_Color.Neutral[2]}; position: absolute; bottom: 10%; @@ -210,7 +210,7 @@ export const Border = styled.div<{ $variant: TimeSlotBarVariant }>` border-right: 1px solid ${v2_Color.Neutral[2]}; `; -export const CellText = styled(v2_Text.XSmall)` +export const CellText = styled(V2_Text.XSmall)` color: ${(props) => props.$color || v2_Color.Neutral[2](props)}; position: absolute; bottom: 0; diff --git a/src/time-slot-week-view/time-slot-week-days.style.tsx b/src/time-slot-week-view/time-slot-week-days.style.tsx index 0f06bd953..18d6b8628 100644 --- a/src/time-slot-week-view/time-slot-week-days.style.tsx +++ b/src/time-slot-week-view/time-slot-week-days.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { DayLabel } from "../shared/internal-calendar/standard"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_TextStyleHelper } from "../v2_text"; export const DayLabelWeek = styled(DayLabel)` ${(props) => { @@ -9,7 +9,7 @@ export const DayLabelWeek = styled(DayLabel)` switch ($variant) { case "default": return css` - ${v2_TextStyleHelper.getFontFamily("H5", "semibold")} + ${V2_TextStyleHelper.getFontFamily("H5", "semibold")} color: ${v2_Color.Neutral[3]}; `; } @@ -37,7 +37,7 @@ export const ColumnWeekCell = styled.div` min-height: 7.625rem; `; export const TimeSlotText = styled.div` - ${v2_TextStyleHelper.getTextStyle("XSmall", "semibold")} + ${V2_TextStyleHelper.getTextStyle("XSmall", "semibold")} margin: 1rem 0rem; display: flex; flex-direction: column; diff --git a/src/time-slot-week-view/time-slot-week-days.tsx b/src/time-slot-week-view/time-slot-week-days.tsx index a6c6bb9cd..8315bf7df 100644 --- a/src/time-slot-week-view/time-slot-week-days.tsx +++ b/src/time-slot-week-view/time-slot-week-days.tsx @@ -8,7 +8,7 @@ import { RowDayCell, StyleProps, } from "../shared/internal-calendar/standard"; -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; import { TimeSlot as TimeSlotComponent } from "../time-slot-bar/time-slot-bar.styles"; import { TimeSlot } from "../time-slot-bar/types"; import { CalendarHelper } from "../util/calendar-helper"; @@ -128,9 +128,9 @@ export const TimeSlotWeekDays = ({ const renderWeek = () => { return currentCalendarWeek.map((day, index) => ( - + {dayjs(day).format("ddd")} - + )); }; diff --git a/src/timeline/timeline.style.tsx b/src/timeline/timeline.style.tsx index 3aa535470..1f6405cef 100644 --- a/src/timeline/timeline.style.tsx +++ b/src/timeline/timeline.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { Variant } from "./types"; import { Pill } from "../pill"; @@ -123,7 +123,7 @@ export const TimelineWrapper = styled.div` } `; -export const TimelineTitle = styled(v2_Text.H3)` +export const TimelineTitle = styled(V2_Text.H3)` margin-bottom: 1rem; ${v2_MediaQuery.MaxWidth.tablet} { @@ -131,7 +131,7 @@ export const TimelineTitle = styled(v2_Text.H3)` } `; -export const TimelineItemTitle = styled(v2_Text.H4)` +export const TimelineItemTitle = styled(V2_Text.H4)` margin-top: -0.125rem; margin-bottom: 0.5rem; `; @@ -150,7 +150,7 @@ export const TimelineItemContent = styled.div` width: 100%; `; -export const TimelinePills = styled(v2_Text.H3)` +export const TimelinePills = styled(V2_Text.H3)` display: flex; flex-wrap: wrap; margin-bottom: 0.5rem; diff --git a/src/timeline/timeline.tsx b/src/timeline/timeline.tsx index 31125ac4e..9fa79b2fb 100644 --- a/src/timeline/timeline.tsx +++ b/src/timeline/timeline.tsx @@ -1,5 +1,5 @@ import { ExclamationCircleFillIcon, TickIcon } from "@lifesg/react-icons"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { CircleIndicator, LineIndicator, @@ -30,9 +30,9 @@ export const Timeline = ({ const renderContent = (content: string | JSX.Element): JSX.Element => { if (typeof content === "string") { return ( - + {content} - + ); } diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index 85d1060a3..da372d852 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -6,7 +6,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color/color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { ToastType } from "./types"; //============================================================================= @@ -102,7 +102,7 @@ export const TextContainer = styled.div` flex-direction: column; `; -export const Title = styled(v2_Text.H4)` +export const Title = styled(V2_Text.H4)` display: flex; ${(props) => { diff --git a/src/toast/toast.tsx b/src/toast/toast.tsx index bbe4dbc8f..8adb09ac7 100644 --- a/src/toast/toast.tsx +++ b/src/toast/toast.tsx @@ -9,7 +9,7 @@ import { useEffect, useState } from "react"; import { useMediaQuery } from "react-responsive"; import { easings, useSpring } from "react-spring"; import { MediaWidths } from "../spec/media-spec"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { ActionButton, ContentWrapper, @@ -112,9 +112,9 @@ export const Toast = ({ if (React.isValidElement(label)) { return label; } else if (title) { - return {label}; + return {label}; } else { - return {label}; + return {label}; } }; diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index ef60cd8ac..930fd7c85 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -3,7 +3,7 @@ import { Alert } from "../alert"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; -import { v2_Text, v2_TextStyleHelper } from "../v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { TextList } from "../text-list"; import { ToggleStyleType } from "./types"; @@ -155,11 +155,11 @@ export const Label = styled.label` ${(props) => { if (props.$selected && !props.$indicator) { return css` - ${v2_TextStyleHelper.getTextStyle("H4", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} `; } else { return css` - ${v2_TextStyleHelper.getTextStyle("H4", "regular")} + ${V2_TextStyleHelper.getTextStyle("H4", "regular")} `; } }} @@ -191,7 +191,7 @@ export const Label = styled.label` `; export const SubLabel = styled.div` - ${v2_TextStyleHelper.getTextStyle("BodySmall", "regular")} + ${V2_TextStyleHelper.getTextStyle("BodySmall", "regular")} margin-top: 0.5rem; z-index: 1; // forces sublabel to render above the input @@ -199,7 +199,7 @@ export const SubLabel = styled.div` strong, b { - ${v2_TextStyleHelper.getFontFamily("BodySmall", "semibold")} + ${V2_TextStyleHelper.getFontFamily("BodySmall", "semibold")} color: inherit; } @@ -283,7 +283,7 @@ export const RemoveButton = styled.button` color: ${(props) => props.$disabled ? v2_Color.Neutral[3] : v2_Color.Validation.Red.Icon}; white-space: nowrap; - ${v2_TextStyleHelper.getTextStyle("H4", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} height: fit-content; padding: 0.6875rem 1rem 0.6875rem 0.5rem; border: none; @@ -295,7 +295,7 @@ export const RemoveButton = styled.button` export const ExpandButton = styled.button` color: ${(props) => props.disabled ? v2_Color.Neutral[3] : v2_Color.Primary}; - ${v2_TextStyleHelper.getTextStyle("H4", "semibold")} + ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} display: flex; align-items: center; justify-content: flex-end; @@ -352,7 +352,7 @@ export const Children = styled.div` }} `; -export const ErrorText = styled(v2_Text.BodySmall)` +export const ErrorText = styled(V2_Text.BodySmall)` color: ${(props) => props.$disabled ? v2_Color.Neutral[3] : v2_Color.Validation.Red.Text}; `; diff --git a/src/tooltip/tooltip.tsx b/src/tooltip/tooltip.tsx index 946b7cd95..2fc8192a3 100644 --- a/src/tooltip/tooltip.tsx +++ b/src/tooltip/tooltip.tsx @@ -1,6 +1,6 @@ import { useEffect, useRef, useState } from "react"; import debounce from "lodash/debounce"; -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; import { Arrow, Bubble, BubbleWrap } from "./tooltip.styles"; import { TooltipPosition, TooltipProps } from "./types"; @@ -85,7 +85,7 @@ export const Tooltip = ({ const renderContent = () => typeof children === "string" ? ( - {children} + {children} ) : ( children ); diff --git a/src/uneditable-section/section-item.styles.tsx b/src/uneditable-section/section-item.styles.tsx index 595a5af72..c312624d9 100644 --- a/src/uneditable-section/section-item.styles.tsx +++ b/src/uneditable-section/section-item.styles.tsx @@ -3,7 +3,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; -import { v2_TextStyleHelper } from "../v2_text"; +import { V2_TextStyleHelper } from "../v2_text"; import { UneditableSectionItemDisplayWidth } from "./types"; import { Alert } from "../alert"; @@ -60,7 +60,7 @@ export const IconContainer = styled.div` `; export const Clickable = styled.button` - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} color: ${v2_Color.Neutral[1]}; border: none; background: transparent; @@ -109,7 +109,7 @@ export const ErrorLabel = styled.span` `; export const TryAgainLabel = styled.span` - ${v2_TextStyleHelper.getTextStyle("Body", "semibold")} + ${V2_TextStyleHelper.getTextStyle("Body", "semibold")} color: ${v2_Color.Primary}; text-decoration: underline; margin-left: 0.5rem; diff --git a/src/uneditable-section/section-item.tsx b/src/uneditable-section/section-item.tsx index 5d7701a44..ca6427fb3 100644 --- a/src/uneditable-section/section-item.tsx +++ b/src/uneditable-section/section-item.tsx @@ -2,7 +2,7 @@ import { EyeIcon } from "@lifesg/react-icons/eye"; import { EyeSlashIcon } from "@lifesg/react-icons/eye-slash"; import { useEffect, useState } from "react"; import { FormLabel } from "../form/form-label"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; import { StringHelper } from "../util/string-helper"; import { Clickable, @@ -137,11 +137,11 @@ export const UneditableSectionItem = ({ const renderContent = () => { if (!displayMaskState) { - return {value}; + return {value}; } if (disableMaskUnmask) { - return {getValue()}; + return {getValue()}; } return ( diff --git a/src/uneditable-section/uneditable-section.styles.tsx b/src/uneditable-section/uneditable-section.styles.tsx index 0f54670e3..d4a26010d 100644 --- a/src/uneditable-section/uneditable-section.styles.tsx +++ b/src/uneditable-section/uneditable-section.styles.tsx @@ -2,7 +2,7 @@ import styled from "styled-components"; import { v2_Layout } from "../v2_layout"; import { v2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; -import { v2_Text } from "../v2_text"; +import { V2_Text } from "../v2_text"; // ============================================================================= // STYLE INTERFACES @@ -21,12 +21,12 @@ export const Wrapper = styled(v2_Layout.V2_Content)` padding-bottom: 2rem; `; -export const Title = styled(v2_Text.H3)` +export const Title = styled(V2_Text.H3)` margin-bottom: 1rem; grid-column: span 8; `; -export const Description = styled(v2_Text.Body)` +export const Description = styled(V2_Text.Body)` margin-bottom: 2rem; grid-column: span 8; `; diff --git a/src/unit-number/unit-number-input.style.tsx b/src/unit-number/unit-number-input.style.tsx index 16c7cf410..f4f46d173 100644 --- a/src/unit-number/unit-number-input.style.tsx +++ b/src/unit-number/unit-number-input.style.tsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color"; import { AddOnContainer } from "../input-group/input-group.style"; import { Input } from "../input/input"; -import { v2_Text } from "../v2_text/text"; +import { V2_Text } from "../v2_text/text"; // ============================================================================= // STYLE INTERFACE, transient props are denoted with $ @@ -57,7 +57,7 @@ export const UnitInput = styled(FloorInput)` } `; -export const UnitNumberDivider = styled(v2_Text.Body)` +export const UnitNumberDivider = styled(V2_Text.Body)` margin: 0 0.25rem; ${(props) => { if (props.$inactive) { @@ -72,7 +72,7 @@ export const ReadOnlyContainer = styled.div` display: flex; `; -export const ReadOnlyLabel = styled(v2_Text.Body)` +export const ReadOnlyLabel = styled(V2_Text.Body)` ${(props) => { if (props.$inactive) { return css` diff --git a/src/v2_text/helper.ts b/src/v2_text/helper.ts index 817714385..052fa394b 100644 --- a/src/v2_text/helper.ts +++ b/src/v2_text/helper.ts @@ -1,12 +1,12 @@ import { css } from "styled-components"; import { FontFamily } from "../spec/text-spec/font-spec"; -import { v2_TextLinkSizeType, v2_TextSizeType, v2_TextWeight } from "./types"; -import { v2_TextStyle } from "./text-style"; +import { V2_TextLinkSizeType, V2_TextSizeType, V2_TextWeight } from "./types"; +import { V2_TextStyle } from "./text-style"; // ============================================================================= // FONT STYLE // ============================================================================= -const getFont = (weight: v2_TextWeight) => { +const getFont = (weight: V2_TextWeight) => { switch (weight) { case 700: case "bold": @@ -26,16 +26,16 @@ const getFont = (weight: v2_TextWeight) => { }; const getFontFamily = ( - type: v2_TextSizeType | v2_TextLinkSizeType, - weight?: v2_TextWeight + type: V2_TextSizeType | V2_TextLinkSizeType, + weight?: V2_TextWeight ) => { return (props: any) => { - const fontFamilyFromTheme = v2_TextStyle[type].fontFamily( + const fontFamilyFromTheme = V2_TextStyle[type].fontFamily( props ) as string; - const fontWeightFromTheme = v2_TextStyle[type].fontWeight( + const fontWeightFromTheme = V2_TextStyle[type].fontWeight( props - ) as v2_TextWeight; + ) as V2_TextWeight; if (Object.values(FontFamily.OpenSans).includes(fontFamilyFromTheme)) { return css` @@ -54,7 +54,7 @@ const getFontFamily = ( }; }; -const getFontWeight = (weight: v2_TextWeight) => { +const getFontWeight = (weight: V2_TextWeight) => { switch (weight) { case 300: case "light": @@ -92,12 +92,12 @@ const getMaxLinesLineStyle = (maxLines: number | undefined) => { }; const getTextStyle = ( - type: v2_TextSizeType | v2_TextLinkSizeType, - weight: v2_TextWeight, + type: V2_TextSizeType | V2_TextLinkSizeType, + weight: V2_TextWeight, paragraph = false ) => { return (props: any) => { - const attrs = v2_TextStyle[type]; + const attrs = V2_TextStyle[type]; const fontSize = attrs.fontSize(props) as number; // Add extra margin for paragraphs @@ -144,7 +144,7 @@ const getDisplayStyle = ( // EXPORTS // ============================================================================= /** @deprecated */ -export const v2_TextStyleHelper = { +export const V2_TextStyleHelper = { getFontFamily, getTextStyle, getDisplayStyle, diff --git a/src/v2_text/text-style.ts b/src/v2_text/text-style.ts index 0ef0d29f1..97931ae90 100644 --- a/src/v2_text/text-style.ts +++ b/src/v2_text/text-style.ts @@ -1,10 +1,10 @@ import { getThemeTextStyles } from "../theme/text-theme-helper"; import { PropertiesToType } from "../util/utility-types"; -import { v2_TextStyleSetType } from "./types"; +import { V2_TextStyleSetType } from "./types"; /** @deprecated */ -export const v2_TextStyle: PropertiesToType< - v2_TextStyleSetType, +export const V2_TextStyle: PropertiesToType< + V2_TextStyleSetType, ReturnType > = { D1: { diff --git a/src/v2_text/text.tsx b/src/v2_text/text.tsx index e689c8a0d..2eb91bcf3 100644 --- a/src/v2_text/text.tsx +++ b/src/v2_text/text.tsx @@ -1,21 +1,21 @@ import { ExternalIcon } from "@lifesg/react-icons/external"; import styled, { css } from "styled-components"; import { v2_Color } from "../v2_color/color"; -import { v2_TextStyleHelper } from "./helper"; -import { v2_TextLinkProps, v2_TextLinkStyleProps, v2_TextProps } from "./types"; +import { V2_TextStyleHelper } from "./helper"; +import { V2_TextLinkProps, V2_TextLinkStyleProps, V2_TextProps } from "./types"; /** @deprecated */ -export namespace v2_Text { - export const D1 = styled.h1` +export namespace V2_Text { + export const D1 = styled.h1` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "D1", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -24,16 +24,16 @@ export namespace v2_Text { }} `; - export const D2 = styled.h1` + export const D2 = styled.h1` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "D2", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -42,16 +42,16 @@ export namespace v2_Text { }} `; - export const D3 = styled.h1` + export const D3 = styled.h1` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "D3", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -60,16 +60,16 @@ export namespace v2_Text { }} `; - export const D4 = styled.h1` + export const D4 = styled.h1` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "D4", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -78,16 +78,16 @@ export namespace v2_Text { }} `; - export const DBody = styled.h1` + export const DBody = styled.h1` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "DBody", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -96,16 +96,16 @@ export namespace v2_Text { }} `; - export const H1 = styled.h1` + export const H1 = styled.h1` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "H1", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -114,16 +114,16 @@ export namespace v2_Text { }} `; - export const H2 = styled.h2` + export const H2 = styled.h2` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "H2", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -132,16 +132,16 @@ export namespace v2_Text { }} `; - export const H3 = styled.h3` + export const H3 = styled.h3` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "H3", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -150,16 +150,16 @@ export namespace v2_Text { }} `; - export const H4 = styled.h4` + export const H4 = styled.h4` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "H4", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -168,16 +168,16 @@ export namespace v2_Text { }} `; - export const H5 = styled.h5` + export const H5 = styled.h5` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "H5", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -186,16 +186,16 @@ export namespace v2_Text { }} `; - export const H6 = styled.h6` + export const H6 = styled.h6` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "H6", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -204,16 +204,16 @@ export namespace v2_Text { }} `; - export const Body = styled.p` + export const Body = styled.p` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "Body", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -222,16 +222,16 @@ export namespace v2_Text { }} `; - export const BodySmall = styled.p` + export const BodySmall = styled.p` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "BodySmall", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -240,16 +240,16 @@ export namespace v2_Text { }} `; - export const XSmall = styled.span` + export const XSmall = styled.span` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle( + ${V2_TextStyleHelper.getTextStyle( "XSmall", props.weight, props.paragraph )} color: ${v2_Color.Neutral[1]}; - ${v2_TextStyleHelper.getDisplayStyle( + ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, props.maxLines @@ -259,9 +259,9 @@ export namespace v2_Text { `; export const Hyperlink = { - Default: (props: v2_TextLinkProps) => + Default: (props: V2_TextLinkProps) => HyperlinkComponent({ ...props, textStyle: "Body" }), - Small: (props: v2_TextLinkProps) => + Small: (props: V2_TextLinkProps) => HyperlinkComponent({ ...props, textStyle: "BodySmall" }), }; } @@ -270,10 +270,10 @@ export namespace v2_Text { // NON-EXPORTABLES // ============================================================================= -const HyperlinkBase = styled.a` +const HyperlinkBase = styled.a` ${(props) => { return css` - ${v2_TextStyleHelper.getTextStyle(props.textStyle, props.weight)} + ${V2_TextStyleHelper.getTextStyle(props.textStyle, props.weight)} color: ${v2_Color.Primary}; text-decoration: none; @@ -301,7 +301,7 @@ const HyperlinkComponent = ({ external = false, children, ...rest -}: v2_TextLinkStyleProps) => { +}: V2_TextLinkStyleProps) => { return ( {children} diff --git a/src/v2_text/types.ts b/src/v2_text/types.ts index c349b3287..b28c0c250 100644 --- a/src/v2_text/types.ts +++ b/src/v2_text/types.ts @@ -1,5 +1,5 @@ /** @deprecated */ -export type v2_TextSizeType = +export type V2_TextSizeType = | "D1" | "D2" | "D3" @@ -16,12 +16,12 @@ export type v2_TextSizeType = | "XSmall"; /** @deprecated */ -export type v2_TextLinkSizeType = +export type V2_TextLinkSizeType = | "Body" // Default | "BodySmall"; // Small /** @deprecated */ -export interface v2_TextStyleSpec { +export interface V2_TextStyleSpec { fontFamily?: string | undefined; fontSize?: number | undefined; fontWeight?: number | undefined; @@ -30,15 +30,15 @@ export interface v2_TextStyleSpec { } /** @deprecated */ -export type v2_TextStyleSetType = { - [key in v2_TextSizeType]: v2_TextStyleSpec; +export type V2_TextStyleSetType = { + [key in V2_TextSizeType]: V2_TextStyleSpec; }; /** @deprecated */ -export type v2_TextStyleSetOptionsType = Partial; +export type V2_TextStyleSetOptionsType = Partial; /** @deprecated */ -export type v2_TextWeight = +export type V2_TextWeight = | "regular" | "semibold" | "bold" @@ -56,8 +56,8 @@ export enum RedirectScope { } /** @deprecated */ -export interface v2_TextProps extends React.HTMLAttributes { - weight?: v2_TextWeight | undefined; +export interface V2_TextProps extends React.HTMLAttributes { + weight?: V2_TextWeight | undefined; inline?: boolean | undefined; /** This is applicable only to non-headers */ paragraph?: boolean | undefined; @@ -66,14 +66,14 @@ export interface v2_TextProps extends React.HTMLAttributes { } /** @deprecated */ -export interface v2_TextLinkProps +export interface V2_TextLinkProps extends React.AnchorHTMLAttributes { - weight?: v2_TextWeight | undefined; + weight?: V2_TextWeight | undefined; /** Specifying this will add the external indicator */ external?: boolean | undefined; } /** @deprecated */ -export interface v2_TextLinkStyleProps extends v2_TextLinkProps { - textStyle: v2_TextLinkSizeType; +export interface V2_TextLinkStyleProps extends V2_TextLinkProps { + textStyle: V2_TextLinkSizeType; } diff --git a/stories/accordion/accordion.stories.tsx b/stories/accordion/accordion.stories.tsx index bcd42f59f..0fb66888d 100644 --- a/stories/accordion/accordion.stories.tsx +++ b/stories/accordion/accordion.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Accordion } from "src/accordion"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; type Component = typeof Accordion; @@ -19,27 +19,27 @@ export const Default: StoryObj = { title="This is the first item" collapsible={false} > - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - + { - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor  - see more here - + . - + } @@ -52,27 +52,27 @@ export const SmallAccordionItemTitle: StoryObj = { return ( - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - + { - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor  - see more here - + . - + } @@ -85,26 +85,26 @@ export const TitleShownInMobile: StoryObj = { return ( - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - + - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor  - see more here - + . - + ); @@ -116,26 +116,26 @@ export const NoTitle: StoryObj = { return ( - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - + - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor  - see more here - + . - + ); diff --git a/stories/box-container/box-container.stories.tsx b/stories/box-container/box-container.stories.tsx index 472d1bfcc..292fd0c56 100644 --- a/stories/box-container/box-container.stories.tsx +++ b/stories/box-container/box-container.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { BoxContainer } from "src/box-container"; import { Button } from "src/button"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; type Component = typeof BoxContainer; @@ -17,13 +17,13 @@ export const Default: StoryObj = { return (
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - +
    ); @@ -36,13 +36,13 @@ export const NonCollapsible: StoryObj = { return (
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - +
    ); @@ -55,13 +55,13 @@ export const WithDisplayState: StoryObj = { <>
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - +
    = { displayState="warning" >
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - +
    @@ -94,13 +94,13 @@ export const WithCustomCallToAction: StoryObj = { } >
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - +
    ); diff --git a/stories/card/card.stories.tsx b/stories/card/card.stories.tsx index a60e1ab4f..0170b306b 100644 --- a/stories/card/card.stories.tsx +++ b/stories/card/card.stories.tsx @@ -2,7 +2,7 @@ import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circl import type { Meta, StoryObj } from "@storybook/react"; import { Button } from "src/button"; import { Card } from "src/card"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; type Component = typeof Card; @@ -39,9 +39,9 @@ export const CustomContent: StoryObj = { - + This is a Card with a JSX.Element as its children. - + Click me diff --git a/stories/data-table/doc-elements.tsx b/stories/data-table/doc-elements.tsx index 19bffbe8c..54f321710 100644 --- a/stories/data-table/doc-elements.tsx +++ b/stories/data-table/doc-elements.tsx @@ -1,7 +1,7 @@ import React, { useState } from "react"; import styled from "styled-components"; import { Toggle } from "../../src/toggle"; -import { v2_Text } from "../../src/v2_text"; +import { V2_Text } from "../../src/v2_text"; const Container = styled.div<{ $height: Height }>` #table-wrapper { @@ -41,7 +41,7 @@ export const DataTableWithCustomHeight = ({
    Modify the options to view the scroll behaviour
    - Number of rows + Number of rows
    - Table height + Table height = { onOverlayClick={closeDrawer} heading="Header text" > - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - + ); @@ -63,7 +63,7 @@ export const HandlingContentOverflow: StoryObj = { padding: "1rem", }} > - = { Drawer content is scrollable when its height is taller than the current screen. The header remains at the top when scrolling down. - - + + This line marks the end of content. - +
    diff --git a/stories/filter/doc-elements.tsx b/stories/filter/doc-elements.tsx index a5c2a9132..4aa2744a3 100644 --- a/stories/filter/doc-elements.tsx +++ b/stories/filter/doc-elements.tsx @@ -5,7 +5,7 @@ import styled from "styled-components"; import { v2_Color } from "../../src/v2_color"; import { Filter, Mode } from "../../src/filter"; import { Form } from "../../src/form"; -import { v2_Text } from "../../src/v2_text"; +import { V2_Text } from "../../src/v2_text"; interface Props { mode: Mode; @@ -46,7 +46,7 @@ export const DateFilter = ({ value, onChange }: Props) => { export const TextFilter = () => { return ( - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi venenatis neque felis, ac tempor erat iaculis et. Nam elementum at lectus et dapibus. Orci varius natoque penatibus et magnis dis @@ -56,7 +56,7 @@ export const TextFilter = () => { interdum. Fusce auctor pharetra lorem eu rhoncus. Integer consectetur in odio sed vestibulum. Nunc imperdiet ligula non eros faucibus, non aliquam dui aliquet. - + ); }; diff --git a/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx b/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx index 4e3fcd7c3..db2155472 100644 --- a/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx +++ b/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { HistogramSlider } from "src/histogram-slider"; import { v2_Layout } from "src/v2_layout"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { BIN_DATA, LARGE_BIN_DATA } from "./histogram-data"; @@ -121,13 +121,13 @@ export const WithLabels: StoryObj = { showRangeLabels renderRangeLabel={(val) => val === 1 ? ( - + 1 photo - + ) : ( - + {val} photos - + ) } /> diff --git a/stories/form/form-input-group/form-input-group.stories.tsx b/stories/form/form-input-group/form-input-group.stories.tsx index 515dca320..20b2ce00b 100644 --- a/stories/form/form-input-group/form-input-group.stories.tsx +++ b/stories/form/form-input-group/form-input-group.stories.tsx @@ -4,7 +4,7 @@ import { useState } from "react"; import { Form } from "src/form"; import { InputGroup } from "src/input-group"; import { v2_Layout } from "src/v2_layout"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -73,7 +73,7 @@ export const WithDifferentAddons: StoryObj = { return ( - Static addon + Static addon
    = { }, }} /> - List addon + List addon
    = { position: "right", }} /> - Custom addon + Custom addon
    = { showSliderLabels renderSliderLabel={(val) => val === 1 ? ( - + 1 photo - + ) : ( - + {val} photos - + ) } /> diff --git a/stories/form/form-slider/form-slider.stories.tsx b/stories/form/form-slider/form-slider.stories.tsx index 9628c945b..0dfab78e5 100644 --- a/stories/form/form-slider/form-slider.stories.tsx +++ b/stories/form/form-slider/form-slider.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { InputSlider } from "src/input-slider"; import { v2_Layout } from "src/v2_layout"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -82,13 +82,13 @@ export const WithLabels: StoryObj = { showSliderLabels renderSliderLabel={(val) => val === 1 ? ( - + 1 photo - + ) : ( - + {val} photos - + ) } /> diff --git a/stories/form/form-textarea/doc-elements.tsx b/stories/form/form-textarea/doc-elements.tsx index c9635d855..de3b1323f 100644 --- a/stories/form/form-textarea/doc-elements.tsx +++ b/stories/form/form-textarea/doc-elements.tsx @@ -1,8 +1,8 @@ -import { v2_Text } from "../../../src/v2_text/text"; +import { V2_Text } from "../../../src/v2_text/text"; import styled from "styled-components"; import React from "react"; -const CustomCounterLabel = styled(v2_Text.H6)` +const CustomCounterLabel = styled(V2_Text.H6)` text-align: right; color: #a4a4a4 !important; font-size: 14px; diff --git a/stories/image-button/doc-elements.tsx b/stories/image-button/doc-elements.tsx index 826accff3..92f6d2b90 100644 --- a/stories/image-button/doc-elements.tsx +++ b/stories/image-button/doc-elements.tsx @@ -1,7 +1,7 @@ import React from "react"; import styled from "styled-components"; import { v2_MediaQuery } from "../../src/v2_media"; -import { v2_Text } from "../../src/v2_text"; +import { V2_Text } from "../../src/v2_text"; // ============================================================================= // STYLING @@ -19,7 +19,7 @@ export const Wrapper = styled.div` } `; -export const HeadingLabel = styled(v2_Text.H6)` +export const HeadingLabel = styled(V2_Text.H6)` text-align: center; ${v2_MediaQuery.MaxWidth.mobileL} { diff --git a/stories/layout/col-div.stories.tsx b/stories/layout/col-div.stories.tsx index df0a50803..b4f4060aa 100644 --- a/stories/layout/col-div.stories.tsx +++ b/stories/layout/col-div.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { v2_Layout } from "src/v2_layout"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { Wrapper } from "./doc-elements"; type Component = typeof v2_Layout.V2_ColDiv; @@ -27,7 +27,7 @@ export const ColumnDivs: StoryObj = { padding: "0.5rem 0", }} > - 1 + 1 = { padding: "0.5rem 0", }} > - 2 + 2 = { padding: "0.5rem 0", }} > - 3 + 3 = { padding: "0.5rem 0", }} > - 4 + 4 = { padding: "0.5rem 0", }} > - 5 + 5 = { padding: "0.5rem 0", }} > - 6 + 6 = { padding: "0.5rem 0", }} > - 7 + 7 = { padding: "0.5rem 0", }} > - 8 + 8 = { padding: "0.5rem 0", }} > - 9 + 9 = { padding: "0.5rem 0", }} > - 10 + 10 = { padding: "0.5rem 0", }} > - 11 + 11 = { padding: "0.5rem 0", }} > - 12 + 12 ); @@ -168,7 +168,7 @@ export const SpecifyingRanges: StoryObj = { padding: "0.5rem 0", }} > - One + One = { padding: "0.5rem 0", }} > - Two + Two = { padding: "0.5rem 0", }} > - Three + Three ); diff --git a/stories/layout/doc-elements.tsx b/stories/layout/doc-elements.tsx index 19bb84435..346ff7ca8 100644 --- a/stories/layout/doc-elements.tsx +++ b/stories/layout/doc-elements.tsx @@ -2,7 +2,7 @@ import React from "react"; import styled, { css } from "styled-components"; import { v2_Color } from "../../src/v2_color"; import { v2_Layout } from "../../src/v2_layout"; -import { v2_Text } from "../../src/v2_text"; +import { V2_Text } from "../../src/v2_text"; interface LabelProps { children: string; @@ -14,7 +14,7 @@ interface LabelProps { export const Label = ({ children }: LabelProps) => ( - {children} + {children} ); @@ -46,7 +46,7 @@ export const PaddingLabel = ({ }: PaddingLabelProps) => ( - {children} + {children} ); @@ -90,7 +90,7 @@ const Marker = styled.div` width: 1.5rem; height: 1rem; - ${v2_Text.XSmall} { + ${V2_Text.XSmall} { position: absolute; top: -160%; left: -40%; diff --git a/stories/layout/layout.stories.tsx b/stories/layout/layout.stories.tsx index 71c6e95bc..bbbfaf5fd 100644 --- a/stories/layout/layout.stories.tsx +++ b/stories/layout/layout.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { v2_Layout } from "src/v2_layout"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; const meta: Meta = { title: "Getting Started/Layout", @@ -22,14 +22,14 @@ export const GeneralUsage: StoryObj = { border: "2px dotted #A4A4A4", }} > - My content + My content
    - + You can adjust the viewport to see how the maximum width in the Layout.Container affects how the content looks. - + ); @@ -48,14 +48,14 @@ export const SplitUsage: StoryObj = { border: "2px dotted #A4A4A4", }} > - Split usage example + Split usage example
    - + You can adjust the viewport to see how the maximum width in the Layout.Container affects how the content looks. - + @@ -79,8 +79,8 @@ export const FlexColumnLayout: StoryObj = { }; return ( - {renderContent(First item)} - {renderContent(Second item)} + {renderContent(First item)} + {renderContent(Second item)} ); }, @@ -100,9 +100,9 @@ export const GridLayout: StoryObj = { }} key={index} > - + {index + 1} - + ); const renderColumns = () => { diff --git a/stories/masonry/doc-elements.tsx b/stories/masonry/doc-elements.tsx index edd34d901..63e2b8552 100644 --- a/stories/masonry/doc-elements.tsx +++ b/stories/masonry/doc-elements.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { v2_Color } from "../../src/v2_color"; -import { v2_TextStyleHelper } from "../../src/v2_text"; +import { V2_TextStyleHelper } from "../../src/v2_text"; export const DemoContainer = styled.div` display: flex; @@ -10,6 +10,6 @@ export const DemoContainer = styled.div` background: ${v2_Color.Accent.Light[3]}; height: 6rem; - ${v2_TextStyleHelper.getTextStyle("Body", "semibold")} + ${V2_TextStyleHelper.getTextStyle("Body", "semibold")} text-align: center; `; diff --git a/stories/navbar/doc-elements.tsx b/stories/navbar/doc-elements.tsx index 87229e340..b71c27e2a 100644 --- a/stories/navbar/doc-elements.tsx +++ b/stories/navbar/doc-elements.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { InboxIcon } from "@lifesg/react-icons/inbox"; -import { v2_Text } from "../../src/v2_text/text"; +import { V2_Text } from "../../src/v2_text/text"; import { v2_Color } from "../../src/v2_color"; import { Button } from "../../src/button"; import React from "react"; @@ -24,7 +24,7 @@ export const DesktopCustomComponentWrapper = styled.div` margin-left: 1rem; `; -export const SubLabel = styled(v2_Text.H6)` +export const SubLabel = styled(V2_Text.H6)` color: ${v2_Color.Neutral[4]}; `; @@ -53,7 +53,7 @@ export const MobileCustomComponent = ({ onClick }: Props) => { return ( <> - John Smith + John Smith john_smith@tech.gov.sg = { default. - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -40,8 +40,8 @@ export const Default: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - - + + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et @@ -59,7 +59,7 @@ export const Default: StoryObj = { voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? - + ); @@ -80,7 +80,7 @@ export const NonSticky: StoryObj = { This is a non sticky banner - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -90,8 +90,8 @@ export const NonSticky: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - - + + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et @@ -109,7 +109,7 @@ export const NonSticky: StoryObj = { voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? - + ); @@ -130,7 +130,7 @@ export const NonDismissible: StoryObj = { This is a non dismissible banner - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -140,7 +140,7 @@ export const NonDismissible: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - + ); @@ -176,7 +176,7 @@ export const TextStylingOptions: StoryObj = { - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -186,7 +186,7 @@ export const TextStylingOptions: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - + ); @@ -219,7 +219,7 @@ export const CustomContent: StoryObj = { - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -229,7 +229,7 @@ export const CustomContent: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - + ); @@ -246,7 +246,7 @@ export const ClickableBanner: StoryObj = { an action. - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud @@ -256,7 +256,7 @@ export const ClickableBanner: StoryObj = { fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - + ); diff --git a/stories/pill/pill.stories.tsx b/stories/pill/pill.stories.tsx index 7ad78c289..b1c26897b 100644 --- a/stories/pill/pill.stories.tsx +++ b/stories/pill/pill.stories.tsx @@ -2,7 +2,7 @@ import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; import { PlusCircleFillIcon } from "@lifesg/react-icons/plus-circle-fill"; import type { Meta, StoryObj } from "@storybook/react"; import { Pill } from "src/pill"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { StoryContainer } from "../storybook-common"; import { Grid, Row, Wrapper } from "./doc-elements"; @@ -61,15 +61,15 @@ export const Variations: StoryObj = { - Black - Grey - Green - Yellow - Red - Blue + Black + Grey + Green + Yellow + Red + Blue - Outline + Outline Label @@ -90,7 +90,7 @@ export const Variations: StoryObj = { - Solid + Solid Label diff --git a/stories/popover/doc-elements.tsx b/stories/popover/doc-elements.tsx index 39b03fe9f..1d2a4894f 100644 --- a/stories/popover/doc-elements.tsx +++ b/stories/popover/doc-elements.tsx @@ -3,7 +3,7 @@ import styled from "styled-components"; import { v2_Color } from "../../src/v2_color"; import { v2_MediaQuery } from "../../src/v2_media"; import { withPopover } from "../../src/popover"; -import { v2_Text } from "../../src/v2_text"; +import { V2_Text } from "../../src/v2_text"; // ============================================================================= // STYLING @@ -46,7 +46,7 @@ export const CustomDiv = styled.div` // ============================================================================= const Trigger = () => ( - Hover me + Hover me ); diff --git a/stories/radio-button/doc-elements.tsx b/stories/radio-button/doc-elements.tsx index 5d48a1f88..824e64af9 100644 --- a/stories/radio-button/doc-elements.tsx +++ b/stories/radio-button/doc-elements.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_TextStyleHelper } from "src/v2_text"; +import { V2_TextStyleHelper } from "src/v2_text"; // ============================================================================= // STYLING @@ -17,6 +17,6 @@ export const OptionContainer = styled.div` `; export const Label = styled.label` - ${v2_TextStyleHelper.getTextStyle("Body", "regular")} + ${V2_TextStyleHelper.getTextStyle("Body", "regular")} margin-left: 1rem; `; diff --git a/stories/storybook-common/tabs.tsx b/stories/storybook-common/tabs.tsx index be4821950..c4a58fa12 100644 --- a/stories/storybook-common/tabs.tsx +++ b/stories/storybook-common/tabs.tsx @@ -2,7 +2,7 @@ import React from "react"; import { useState } from "react"; import styled, { css } from "styled-components"; import { v2_Color } from "../../src/v2_color"; -import { v2_Text, v2_TextStyleHelper } from "../../src/v2_text"; +import { V2_Text, V2_TextStyleHelper } from "../../src/v2_text"; export interface TabAttribute { title: string; @@ -36,7 +36,7 @@ export const Tabs = ({ tabs }: TabsProps): JSX.Element => { return selectedTabItem.component; } - return No content; + return No content; }; return ( @@ -74,7 +74,7 @@ const ButtonRow = styled.div` `; const Button = styled.button` - ${v2_TextStyleHelper.getTextStyle("BodySmall", "regular")} + ${V2_TextStyleHelper.getTextStyle("BodySmall", "regular")} border: none; background: none; cursor: pointer; diff --git a/stories/storybook-common/text.style.tsx b/stories/storybook-common/text.style.tsx index d843d9fb7..ae9890dc5 100644 --- a/stories/storybook-common/text.style.tsx +++ b/stories/storybook-common/text.style.tsx @@ -3,7 +3,7 @@ import { Unstyled } from "@storybook/blocks"; import React from "react"; import styled from "styled-components"; import { v2_Color } from "../../src/v2_color"; -import { v2_Text, v2_TextProps, v2_TextStyleHelper } from "../../src/v2_text"; +import { V2_Text, V2_TextProps, V2_TextStyleHelper } from "../../src/v2_text"; interface HeadingProps { children: string; @@ -13,7 +13,7 @@ interface HeadingProps { // HOC // ============================================================================= const withLink = - (Component: React.ComponentType) => + (Component: React.ComponentType) => // eslint-disable-next-line react/display-name ({ children }: HeadingProps): JSX.Element => { const linkId = convertToLinkId(children); @@ -61,7 +61,7 @@ const LinkIcon = styled(DSLinkIcon)` transform: rotate(-45deg); `; -const StyledTitle = styled(v2_Text.D1)` +const StyledTitle = styled(V2_Text.D1)` margin: 0 0 3rem; font-weight: bold; @@ -72,7 +72,7 @@ const StyledTitle = styled(v2_Text.D1)` } `; -const StyledSecondary = styled(v2_Text.H1)` +const StyledSecondary = styled(V2_Text.H1)` margin: 1rem 0 1.5rem; :hover { ${Link} { @@ -81,8 +81,8 @@ const StyledSecondary = styled(v2_Text.H1)` } `; -const StyledTertiary = styled(v2_Text.H2)` - ${v2_TextStyleHelper.getFontFamily("H2", "semibold")} +const StyledTertiary = styled(V2_Text.H2)` + ${V2_TextStyleHelper.getFontFamily("H2", "semibold")} margin: 1rem 0 1.5rem; :hover { ${Link} { @@ -91,7 +91,7 @@ const StyledTertiary = styled(v2_Text.H2)` } `; -const StyledQuaternary = styled(v2_Text.H4)` +const StyledQuaternary = styled(V2_Text.H4)` margin: 1.5rem 0; :hover { ${Link} { diff --git a/stories/tab/tab.stories.tsx b/stories/tab/tab.stories.tsx index 460aa5d86..e246ecfb1 100644 --- a/stories/tab/tab.stories.tsx +++ b/stories/tab/tab.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Tab } from "src/tab"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { Content } from "./doc-elements"; import { useState } from "react"; @@ -22,56 +22,56 @@ export const Default: StoryObj = { - Section A + Section A
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam commodo eget turpis sit amet luctus. Duis fringilla, libero ac eleifend vehicula, sem arcu mattis diam, eget pellentesque urna libero feugiat sem. - +
    - Section B + Section B
    - + Donec metus augue, vulputate ut laoreet pretium, cursus sed odio. Aenean imperdiet sapien nec lectus gravida, vitae tincidunt sem feugiat. Nullam sit amet tortor purus. Sed eget nulla sapien. Proin a lacus pellentesque, facilisis augue quis, vestibulum sem. - +
    - Section C + Section C
    - + Maecenas tempor dolor sit amet turpis interdum convallis. Nunc ut elit vitae justo placerat vulputate. Mauris varius sem in lectus vestibulum, sed porttitor nisi ultricies. Morbi quis commodo ipsum. - +
    - Section D + Section D
    - + Nullam sit amet tortor purus. Sed eget nulla sapien. Proin a lacus pellentesque, facilisis augue quis, vestibulum sem. Nulla pretium gravida consectetur. Curabitur vestibulum erat nisi. Proin et accumsan purus. Donec blandit tortor risus, vitae tempus magna egestas nec. - +
    @@ -85,42 +85,42 @@ export const LongerLabels: StoryObj = { - Section A + Section A
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam commodo eget turpis sit amet luctus. Duis fringilla, libero ac eleifend vehicula, sem arcu mattis diam, eget pellentesque urna libero feugiat sem. - +
    - Section B + Section B
    - + Donec metus augue, vulputate ut laoreet pretium, cursus sed odio. Aenean imperdiet sapien nec lectus gravida, vitae tincidunt sem feugiat. Nullam sit amet tortor purus. Sed eget nulla sapien. Proin a lacus pellentesque, facilisis augue quis, vestibulum sem. - +
    - Section C + Section C
    - + Maecenas tempor dolor sit amet turpis interdum convallis. Nunc ut elit vitae justo placerat vulputate. Mauris varius sem in lectus vestibulum, sed porttitor nisi ultricies. Morbi quis commodo ipsum. - +
    @@ -140,42 +140,42 @@ export const ControlledMode: StoryObj = { - Section A + Section A
    - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam commodo eget turpis sit amet luctus. Duis fringilla, libero ac eleifend vehicula, sem arcu mattis diam, eget pellentesque urna libero feugiat sem. - +
    - Section B + Section B
    - + Donec metus augue, vulputate ut laoreet pretium, cursus sed odio. Aenean imperdiet sapien nec lectus gravida, vitae tincidunt sem feugiat. Nullam sit amet tortor purus. Sed eget nulla sapien. Proin a lacus pellentesque, facilisis augue quis, vestibulum sem. - +
    - Section C + Section C
    - + Maecenas tempor dolor sit amet turpis interdum convallis. Nunc ut elit vitae justo placerat vulputate. Mauris varius sem in lectus vestibulum, sed porttitor nisi ultricies. Morbi quis commodo ipsum. - +
    diff --git a/stories/tag/tag.stories.tsx b/stories/tag/tag.stories.tsx index 95fb3a2f4..396b082a1 100644 --- a/stories/tag/tag.stories.tsx +++ b/stories/tag/tag.stories.tsx @@ -2,7 +2,7 @@ import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; import { PlusCircleFillIcon } from "@lifesg/react-icons/plus-circle-fill"; import type { Meta, StoryObj } from "@storybook/react"; import { Tag } from "src/tag"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { StoryContainer } from "../storybook-common"; import { Grid, Row, Wrapper } from "./doc-elements"; @@ -81,15 +81,15 @@ export const Variations: StoryObj = { - Black - Grey - Green - Yellow - Red - Blue + Black + Grey + Green + Yellow + Red + Blue - Outline + Outline Label @@ -110,7 +110,7 @@ export const Variations: StoryObj = { - Solid + Solid Label diff --git a/stories/text-list/text-list.stories.tsx b/stories/text-list/text-list.stories.tsx index 7428c769a..0c5392e33 100644 --- a/stories/text-list/text-list.stories.tsx +++ b/stories/text-list/text-list.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { TextList } from "src/text-list"; import { Container, CustomOrderedList, SubContainer } from "./doc-elements"; @@ -102,7 +102,7 @@ export const OtherFeatures: StoryObj = { return ( - Reverse count + Reverse count
  • Item A
  • @@ -111,7 +111,7 @@ export const OtherFeatures: StoryObj = {
    - Custom start count + Custom start count
  • First
  • diff --git a/stories/text/a-intro.stories.tsx b/stories/text/a-intro.stories.tsx index 5b86bc13c..45254a225 100644 --- a/stories/text/a-intro.stories.tsx +++ b/stories/text/a-intro.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { DisplayContainer, LinkDiv, TextDisplay } from "./doc-elements"; const meta: Meta = { @@ -15,40 +15,40 @@ export const Styles: StoryObj = { return ( - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} - {EXAMPLE_TEXT} + {EXAMPLE_TEXT} ); @@ -60,18 +60,18 @@ export const Hyperlinks: StoryObj = { render: () => { return ( - Default link - - + Small link - + ); }, @@ -81,13 +81,13 @@ export const Hyperlinks: StoryObj = { export const ExternalHyperlinks: StoryObj = { render: () => { return ( - This is an external link with the indicator - + ); }, tags: ["pattern"], diff --git a/stories/text/b-advanced.stories.tsx b/stories/text/b-advanced.stories.tsx index 1657b9d03..816625371 100644 --- a/stories/text/b-advanced.stories.tsx +++ b/stories/text/b-advanced.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { ButtonContainer } from "./doc-elements"; const meta: Meta = { @@ -11,13 +11,13 @@ export default meta; export const Combined: StoryObj = { render: () => { return ( - + The quick brown fox  - + jumps over - +  the lazy dog - + ); }, tags: ["pattern"], @@ -26,17 +26,17 @@ export const Combined: StoryObj = { export const Inline: StoryObj = { render: () => { return ( - + The quick  - + brown fox - +   - + jumps over - +  the lazy dog - + ); }, tags: ["pattern"], @@ -46,16 +46,16 @@ export const Paragraph: StoryObj = { render: () => { return ( <> - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod quam eget ex tincidunt dapibus. Donec vitae leo vehicula, fermentum urna vitae, gravida ex. - - + + Aenean imperdiet faucibus velit, eu maximus libero facilisis ut. Donec nulla nisi, fermentum eget lorem at, feugiat ultricies ex. Aliquam volutpat nibh non suscipit rhoncus. - + ); }, @@ -66,11 +66,11 @@ export const RenderAs: StoryObj = { render: () => { return ( <> - This is the original + This is the original
    - + This becomes a span under the hood - + ); }, diff --git a/stories/text/collection-doc-elements.tsx b/stories/text/collection-doc-elements.tsx index 4aaa02c1a..5c7088abe 100644 --- a/stories/text/collection-doc-elements.tsx +++ b/stories/text/collection-doc-elements.tsx @@ -2,19 +2,19 @@ import React from "react"; import styled, { ThemeProvider } from "styled-components"; import { v2_MediaQuery } from "../../src/v2_media"; import { - v2_Text, - v2_TextStyleHelper, - v2_TextStyleSetType, + V2_Text, + V2_TextStyleHelper, + V2_TextStyleSetType, } from "../../src/v2_text"; import { BaseTheme, ThemeSpec } from "../../src"; export const FontDisplay = () => { return ( - Light - Regular - Semibold - Bold + Light + Regular + Semibold + Bold ); }; @@ -34,7 +34,7 @@ const FontDisplayContainer = styled.div` // FONT SIZE DISPLAY // ============================================================================= interface FontSizeDisplayProps { - textStyles: v2_TextStyleSetType; + textStyles: V2_TextStyleSetType; theme?: ThemeSpec; } @@ -45,33 +45,33 @@ export const FontSizeDisplay = ({ const getComponent = (key: string) => { switch (key) { case "D1": - return v2_Text.D1; + return V2_Text.D1; case "D2": - return v2_Text.D2; + return V2_Text.D2; case "D3": - return v2_Text.D3; + return V2_Text.D3; case "D4": - return v2_Text.D4; + return V2_Text.D4; case "DBody": - return v2_Text.DBody; + return V2_Text.DBody; case "H1": - return v2_Text.H1; + return V2_Text.H1; case "H2": - return v2_Text.H2; + return V2_Text.H2; case "H3": - return v2_Text.H3; + return V2_Text.H3; case "H4": - return v2_Text.H4; + return V2_Text.H4; case "H5": - return v2_Text.H5; + return V2_Text.H5; case "H6": - return v2_Text.H6; + return V2_Text.H6; case "BodySmall": - return v2_Text.BodySmall; + return V2_Text.BodySmall; case "XSmall": - return v2_Text.XSmall; + return V2_Text.XSmall; default: - return v2_Text.Body; + return V2_Text.Body; } }; @@ -171,7 +171,7 @@ const FontSpecContainerItem = styled.li` display: flex; `; -const SpecValueLabel = styled(v2_Text.BodySmall)` +const SpecValueLabel = styled(V2_Text.BodySmall)` ${v2_MediaQuery.MaxWidth.mobileM} { font-size: 0.75rem !important; } @@ -180,10 +180,10 @@ const SpecValueLabel = styled(v2_Text.BodySmall)` const FontSpecLabelContainer = styled.div` width: 8rem; margin-right: 1rem; - ${v2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} + ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} ${v2_MediaQuery.MaxWidth.mobileM} { width: 5rem; - ${v2_TextStyleHelper.getTextStyle("XSmall", "semibold")} + ${V2_TextStyleHelper.getTextStyle("XSmall", "semibold")} } `; diff --git a/stories/text/doc-elements.tsx b/stories/text/doc-elements.tsx index e9f3f2b3d..cbd8a1cdb 100644 --- a/stories/text/doc-elements.tsx +++ b/stories/text/doc-elements.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; -import { v2_TextStyleHelper } from "../../src"; +import { V2_TextStyleHelper } from "../../src"; import { v2_Color } from "../../src/v2_color/color"; -import { v2_Text } from "../../src/v2_text/text"; +import { V2_Text } from "../../src/v2_text/text"; // ============================================================================= // TEXT DISPLAY LABEL @@ -125,7 +125,7 @@ const LabelContainer = styled.div` }} `; -const Label = styled(v2_Text.BodySmall)` +const Label = styled(V2_Text.BodySmall)` color: ${v2_Color.Neutral[8]}; margin: 0; `; @@ -141,6 +141,6 @@ export const LinkDiv = styled.div` `; export const ButtonContainer = styled.button` - ${v2_TextStyleHelper.getTextStyle("BodySmall", "bold")} + ${V2_TextStyleHelper.getTextStyle("BodySmall", "bold")} padding: 0.5rem; `; diff --git a/stories/timeline/timeline.stories.tsx b/stories/timeline/timeline.stories.tsx index 3ebf7298e..4bb7c3719 100644 --- a/stories/timeline/timeline.stories.tsx +++ b/stories/timeline/timeline.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Button } from "src/button"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { Timeline } from "src/timeline"; import { StoryContainer } from "../storybook-common"; import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; @@ -26,10 +26,10 @@ export const Default: StoryObj = { title: "Item 1", content: ( <> - + Just a regular text based item. Lorem ipsum dolor sit amet, consectetur. - + ), }, @@ -37,13 +37,13 @@ export const Default: StoryObj = { title: "Item 2", content: ( <> - + An example with a  - + link - + . - + ), }, @@ -51,16 +51,16 @@ export const Default: StoryObj = { title: "Item 3", content: ( <> - + This one comes with an  - - + external link - + . ), @@ -69,9 +69,9 @@ export const Default: StoryObj = { title: "Item 4", content: ( <> - + This item comes with an action button. - + { @@ -86,9 +86,9 @@ export const Default: StoryObj = { { title: "Item 5", content: ( - + This one comes with Pill DS icons. - + ), statuses: [ { @@ -108,10 +108,10 @@ export const Default: StoryObj = { { title: "Item 6", content: ( - + This one comes with Pill DS icons with long status text. - + ), statuses: [ { @@ -146,58 +146,58 @@ export const Variants: StoryObj = { title: "Item 1", variant: "completed", content: ( - + An example with completed{" "} variant - + ), }, { title: "Item 2", variant: "current", content: ( - + An example with current variant - + ), }, { title: "Item 3", variant: "upcoming-active", content: ( - + An example with upcoming-active{" "} variant - + ), }, { title: "Item 4", variant: "upcoming-inactive", content: ( - + An example with{" "} upcoming-inactive variant - + ), }, { title: "Item 5", variant: "error", content: ( - + An example with error variant - + ), }, { title: "Item 6", variant: "disabled", content: ( - + An example with disabled{" "} variant - + ), }, ]} diff --git a/stories/toast/toast.stories.tsx b/stories/toast/toast.stories.tsx index f0b9cff30..e40a290ef 100644 --- a/stories/toast/toast.stories.tsx +++ b/stories/toast/toast.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Button } from "src/button"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { Toast } from "src/toast"; type Component = typeof Toast; @@ -181,15 +181,15 @@ export const WithCustomDisplay: StoryObj = { + This is a JSX Element - + } label={ - + This is a JSX element that contains a{" "} - link - + link + } fixed={false} /> diff --git a/stories/toggle/doc-elements.tsx b/stories/toggle/doc-elements.tsx index 3f2f2b50a..7aa927d18 100644 --- a/stories/toggle/doc-elements.tsx +++ b/stories/toggle/doc-elements.tsx @@ -1,6 +1,6 @@ import React from "react"; import styled, { css } from "styled-components"; -import { v2_Text } from "../../src/v2_text"; +import { V2_Text } from "../../src/v2_text"; import { v2_MediaQuery } from "../../src/v2_media"; interface StyleProps { @@ -62,7 +62,7 @@ export const Wrapper = styled.div` }} `; -export const HeadingLabel = styled(v2_Text.H6)` +export const HeadingLabel = styled(V2_Text.H6)` text-align: center; ${v2_MediaQuery.MaxWidth.mobileL} { diff --git a/stories/toggle/toggle-6-examples.stories.tsx b/stories/toggle/toggle-6-examples.stories.tsx index b8df74d98..f9a25e1cd 100644 --- a/stories/toggle/toggle-6-examples.stories.tsx +++ b/stories/toggle/toggle-6-examples.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Toggle } from "../../src"; import { Form } from "../../src/form"; -import { v2_Text } from "../../src/v2_text"; +import { V2_Text } from "../../src/v2_text"; type Component = typeof Toggle; @@ -106,14 +106,14 @@ export const InteractiveSublabel: StoryObj = { Clicking here toggles the button.
    Clicking here does not and{" "} - this link - {" "} + {" "} is accessible
    diff --git a/stories/uneditable-section/uneditable-section.stories.tsx b/stories/uneditable-section/uneditable-section.stories.tsx index dd315bc87..bae7a742f 100644 --- a/stories/uneditable-section/uneditable-section.stories.tsx +++ b/stories/uneditable-section/uneditable-section.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Alert } from "src/alert"; import { Button } from "src/button"; -import { v2_Text } from "src/v2_text"; +import { V2_Text } from "src/v2_text"; import { UneditableSection, UneditableSectionItemMaskState, @@ -307,7 +307,7 @@ export const ComposingFromScratch: StoryObj = { marginBottom: "2rem", }} > - My custom content + My custom content Pull latest records @@ -318,12 +318,12 @@ export const ComposingFromScratch: StoryObj = { users. - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam pellentesque enim eu neque gravida, ut pulvinar magna tristique. Aenean sed malesuada arcu. Integer convallis dapibus suscipit. - + = { value="Block 287, #05-11, Tampines street 22, Singapore 534788" /> - + Another section - + { beforeEach(() => { @@ -18,9 +18,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -38,9 +38,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -55,9 +55,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -71,9 +71,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -85,9 +85,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -108,10 +108,10 @@ describe("Accordion", () => { render( - {DEFAULT_TEXT_CONTENT} + {DEFAULT_TEXT_CONTENT} - {DEFAULT_TEXT_CONTENT} + {DEFAULT_TEXT_CONTENT} ); @@ -140,9 +140,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -159,9 +159,9 @@ describe("Accordion", () => { render( - + {DEFAULT_TEXT_CONTENT} - + ); @@ -177,10 +177,10 @@ describe("Accordion", () => { render( - {DEFAULT_TEXT_CONTENT} + {DEFAULT_TEXT_CONTENT} - {DEFAULT_TEXT_CONTENT} + {DEFAULT_TEXT_CONTENT} ); @@ -196,7 +196,7 @@ describe("Accordion", () => { render( - {DEFAULT_TEXT_CONTENT} + {DEFAULT_TEXT_CONTENT} ); @@ -224,9 +224,9 @@ describe("Accordion", () => { title="Item title" collapsible={false} > - + {DEFAULT_TEXT_CONTENT} - + ); From e3f42f4d310d74dcf4b7bf8f4ae2fc3b0daf3f42 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 6 Aug 2024 15:25:06 +0800 Subject: [PATCH 0323/1949] [CCUBE-1519][MAHI]Deprecate component color to V2 --- src/accordion/accordion-item.style.tsx | 8 +-- src/accordion/accordion.style.tsx | 4 +- src/alert/alert.style.tsx | 46 ++++++------ .../loading-dots-spinner.tsx | 4 +- src/box-container/box-container.styles.tsx | 14 ++-- src/breadcrumb/breadcrumb.style.tsx | 4 +- src/button/button.style.tsx | 32 ++++----- src/calendar/calendar.tsx | 4 +- src/card/card.style.tsx | 4 +- src/checkbox/checkbox.style.tsx | 8 +-- src/countdown-timer/countdown-timer.style.tsx | 16 ++--- src/data-table/data-table.styles.tsx | 8 +-- src/divider/divider.style.tsx | 6 +- src/drawer/drawer.styles.tsx | 12 ++-- src/e-signature/e-signature-canvas.tsx | 4 +- src/e-signature/e-signature.styles.ts | 18 ++--- src/error-display/error-display.style.tsx | 8 +-- ...feedback-rating-stars-container.styles.tsx | 6 +- .../feedback-rating.styles.tsx | 6 +- src/file-upload/dropzone.styles.tsx | 12 ++-- src/file-upload/file-item-edit.styles.tsx | 4 +- .../file-list-item-thumbnail.tsx | 8 +-- .../file-list-item/file-list-item.styles.tsx | 22 +++--- src/file-upload/file-list.styles.tsx | 6 +- src/file-upload/file-upload.styles.tsx | 10 +-- .../addons/filter-item-checkbox.styles.tsx | 6 +- src/filter/filter-item-page.styles.tsx | 4 +- src/filter/filter-item.styles.tsx | 16 ++--- src/filter/filter.styles.tsx | 22 +++--- src/footer/footer.style.tsx | 18 ++--- src/form/form-label-addon.style.tsx | 4 +- src/form/form-label.style.tsx | 14 ++-- .../fullscreen-image-carousel.style.tsx | 18 ++--- .../histogram-slider.styles.ts | 12 ++-- src/icon-button/icon-button.style.tsx | 28 ++++---- src/image-button/image-button.style.tsx | 24 +++---- .../input-group-list-addon.style.tsx | 10 +-- src/input-group/input-group.style.tsx | 24 +++---- .../input-range-slider.styles.ts | 10 +-- src/input-range-slider/input-range-slider.tsx | 6 +- src/input-textarea/textara-counter.style.tsx | 6 +- src/input-textarea/textarea.style.tsx | 20 +++--- src/input/input.style.tsx | 8 +-- src/link-list/link-list.styles.tsx | 24 +++---- src/masked-input/masked-input.style.tsx | 18 ++--- src/modal/modal-box.styles.tsx | 8 +-- src/navbar/drawer.styles.tsx | 6 +- src/navbar/menu.styles.tsx | 12 ++-- src/navbar/navbar-items.styles.tsx | 18 ++--- src/navbar/navbar.styles.tsx | 6 +- .../notification-banner.styles.tsx | 20 +++--- src/pagination/pagination.styles.tsx | 48 ++++++------- src/pill/pill.style.tsx | 64 ++++++++--------- src/popover-v2/popover.styles.tsx | 6 +- .../progress-indicator.style.tsx | 10 +-- src/radio-button/radio-button.styles.tsx | 8 +-- .../clickable-icon/clickable-icon.style.tsx | 4 +- .../component-loading-spinner.style.tsx | 4 +- .../dropdown-label.styles.tsx | 6 +- .../dropdown-list-v2/dropdown-list.styles.tsx | 22 +++--- .../dropdown-search.styles.tsx | 8 +-- .../expandable-element.styles.tsx | 4 +- .../dropdown-list/dropdown-list.styles.tsx | 20 +++--- .../dropdown-list/dropdown-search.styles.tsx | 8 +-- .../dropdown-wrapper.styles.tsx | 24 +++---- .../fade-wrapper/fade-wrapper.style.tsx | 4 +- src/shared/html-content/html-content.ts | 10 +-- .../image-placeholder.style.tsx | 4 +- src/shared/input-wrapper/input-wrapper.tsx | 24 +++---- .../calendar-manager.style.tsx | 6 +- .../day-cell/day-cell.style.tsx | 48 ++++++------- .../internal-calendar-month.style.tsx | 18 ++--- .../internal-calendar-year.style.tsx | 20 +++--- .../internal-calendar.style.tsx | 6 +- .../standard-calendar-day-view.style.tsx | 54 +++++++------- .../nested-dropdown-list/list-item.styles.tsx | 12 ++-- .../nested-dropdown-list.styles.tsx | 10 +-- src/shared/progress-bar/progress-bar.tsx | 4 +- .../range-input-inner-container.styles.tsx | 8 +-- .../standalone-date-input.style.tsx | 12 ++-- .../timepicker-dropdown.styles.tsx | 16 ++--- src/shared/toggle-icon/toggle-icon.styles.tsx | 6 +- src/sidenav/sidenav-drawer-item.styles.tsx | 12 ++-- src/sidenav/sidenav-drawer-subitem.styles.tsx | 8 +-- src/sidenav/sidenav-group.styles.tsx | 4 +- src/sidenav/sidenav-item.styles.tsx | 12 ++-- src/sidenav/sidenav.styles.tsx | 10 +-- .../smart-app-banner.styles.ts | 6 +- src/spec/color-spec/base-color-set.ts | 6 +- src/spec/color-spec/bookingsg-color-set.ts | 6 +- src/spec/color-spec/ccube-color-set.ts | 6 +- src/spec/color-spec/mylegacy-color-set.ts | 6 +- src/spec/color-spec/oneservice-color-set.ts | 6 +- src/spec/color-spec/rbs-color-set.ts | 6 +- .../base-design-token-set.ts | 8 +-- .../design-token-spec/rbs-design-token-set.ts | 8 +-- src/tab/tab-link-chain.style.tsx | 10 +-- src/tag/tag.style.ts | 66 ++++++++--------- src/text-list/text-list.styles.tsx | 6 +- src/theme/color-theme-helper.ts | 4 +- src/theme/types.ts | 6 +- .../time-range-picker.styles.tsx | 2 +- .../time-slot-bar-week-days.style.tsx | 12 ++-- src/time-slot-bar/time-slot-bar.styles.tsx | 20 +++--- .../time-slot-week-days.style.tsx | 6 +- src/timeline/timeline.style.tsx | 24 +++---- src/toast/toast.styles.tsx | 14 ++-- src/toggle/toggle.styles.tsx | 72 +++++++++---------- src/tooltip/tooltip.styles.tsx | 10 +-- .../section-item.styles.tsx | 16 ++--- .../uneditable-section.styles.tsx | 4 +- src/unit-number/unit-number-input.style.tsx | 6 +- src/v2_color/color.ts | 6 +- src/v2_color/types.ts | 18 ++--- src/v2_text/text.tsx | 36 +++++----- .../2-animations-customisable.stories.tsx | 4 +- stories/divider/divider.stories.tsx | 6 +- stories/filter/doc-elements.tsx | 4 +- .../form/form-range-select/doc-elements.tsx | 4 +- stories/form/form-select/doc-elements.tsx | 6 +- stories/layout/doc-elements.tsx | 10 +-- stories/markup/markup.stories.tsx | 4 +- stories/masonry/doc-elements.tsx | 4 +- stories/navbar/doc-elements.tsx | 4 +- stories/popover/doc-elements.tsx | 4 +- .../api-table/api-table-components.tsx | 20 +++--- stories/storybook-common/tabs.tsx | 8 +-- stories/storybook-common/text.style.tsx | 8 +-- stories/text/doc-elements.tsx | 12 ++-- tests/alert/alert.spec.tsx | 12 ++-- 130 files changed, 843 insertions(+), 843 deletions(-) diff --git a/src/accordion/accordion-item.style.tsx b/src/accordion/accordion-item.style.tsx index d9403ee2e..a89afc038 100644 --- a/src/accordion/accordion-item.style.tsx +++ b/src/accordion/accordion-item.style.tsx @@ -1,7 +1,7 @@ import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; import { animated } from "react-spring"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text/text"; @@ -19,8 +19,8 @@ interface StyleProps { // STYLING // ============================================================================= export const Container = styled.div` - background-color: ${v2_Color.Neutral[8]} !important; - border-top: 1px solid ${v2_Color.Neutral[6]}; + background-color: ${V2_Color.Neutral[8]} !important; + border-top: 1px solid ${V2_Color.Neutral[6]}; padding: ${(props) => (props.$isCollapsed ? "0 0 1rem" : "0")}; ${v2_MediaQuery.MaxWidth.mobileL} { @@ -66,7 +66,7 @@ export const ExpandCollapseButton = styled(ClickableIcon)` export const ChevronIcon = styled(ChevronUpIcon)` height: 1.25rem; width: 1.25rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const Expandable = styled(animated.div)` diff --git a/src/accordion/accordion.style.tsx b/src/accordion/accordion.style.tsx index 80233ad4e..91a444730 100644 --- a/src/accordion/accordion.style.tsx +++ b/src/accordion/accordion.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { Button } from "../button"; import { v2_MediaQuery } from "../v2_media"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_Text } from "../v2_text/text"; import { TitleStyleProps, TitleWrapperStyleProps } from "./types"; @@ -10,7 +10,7 @@ import { TitleStyleProps, TitleWrapperStyleProps } from "./types"; // ============================================================================= export const Content = styled.div` width: 100%; - border-bottom: 1px solid ${v2_Color.Neutral[6]}; + border-bottom: 1px solid ${V2_Color.Neutral[6]}; `; export const TitleWrapper = styled.div` diff --git a/src/alert/alert.style.tsx b/src/alert/alert.style.tsx index c4caacc48..abd720654 100644 --- a/src/alert/alert.style.tsx +++ b/src/alert/alert.style.tsx @@ -1,6 +1,6 @@ import { ChevronDownIcon } from "@lifesg/react-icons"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { AlertSizeType, AlertType } from "./types"; @@ -35,28 +35,28 @@ export const Wrapper = styled.div` let borderColor: string; switch (props.$type) { case "error": - backgroundColor = v2_Color.Validation.Red.Background(props); - borderColor = v2_Color.Validation.Red.Border(props); + backgroundColor = V2_Color.Validation.Red.Background(props); + borderColor = V2_Color.Validation.Red.Border(props); break; case "success": - backgroundColor = v2_Color.Validation.Green.Background(props); - borderColor = v2_Color.Validation.Green.Border(props); + backgroundColor = V2_Color.Validation.Green.Background(props); + borderColor = V2_Color.Validation.Green.Border(props); break; case "warning": - backgroundColor = v2_Color.Validation.Orange.Background(props); - borderColor = v2_Color.Validation.Orange.Border(props); + backgroundColor = V2_Color.Validation.Orange.Background(props); + borderColor = V2_Color.Validation.Orange.Border(props); break; case "info": - backgroundColor = v2_Color.Validation.Blue.Background(props); - borderColor = v2_Color.Validation.Blue.Border(props); + backgroundColor = V2_Color.Validation.Blue.Background(props); + borderColor = V2_Color.Validation.Blue.Border(props); break; case "description": - backgroundColor = v2_Color.Neutral[7](props); - borderColor = v2_Color.Neutral[4](props); + backgroundColor = V2_Color.Neutral[7](props); + borderColor = V2_Color.Neutral[4](props); break; default: - backgroundColor = v2_Color.Validation.Orange.Background(props); - borderColor = v2_Color.Validation.Orange.Border(props); + backgroundColor = V2_Color.Validation.Orange.Background(props); + borderColor = V2_Color.Validation.Orange.Border(props); break; } @@ -66,7 +66,7 @@ export const Wrapper = styled.div` `; }} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${(props) => { if (props.$sizeType === "small") { return applyHtmlContentStyle({ textSize: "H6" }); @@ -92,22 +92,22 @@ export const AlertIconWrapper = styled.div` const iconSize = props.$sizeType === "small" ? "1.25rem" : "1.5rem"; switch (props.$type) { case "error": - iconColor = v2_Color.Validation.Red.Icon(props); + iconColor = V2_Color.Validation.Red.Icon(props); break; case "success": - iconColor = v2_Color.Validation.Green.Icon(props); + iconColor = V2_Color.Validation.Green.Icon(props); break; case "warning": - iconColor = v2_Color.Validation.Orange.Icon(props); + iconColor = V2_Color.Validation.Orange.Icon(props); break; case "info": - iconColor = v2_Color.Validation.Blue.Icon(props); + iconColor = V2_Color.Validation.Blue.Icon(props); break; case "description": - iconColor = v2_Color.Neutral[4](props); + iconColor = V2_Color.Neutral[4](props); break; default: - iconColor = v2_Color.Validation.Orange.Icon(props); + iconColor = V2_Color.Validation.Orange.Icon(props); break; } @@ -138,13 +138,13 @@ export const ActionLinkText = styled(V2_Text.Hyperlink.Small)` display: flex; align-items: center; align-self: flex-start; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; svg { height: 1rem; width: 1rem; margin-left: 0.25rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; } `; @@ -202,7 +202,7 @@ export const ShowMoreButton = styled.button` border: none; background: transparent; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const ChevronIcon = styled(ChevronDownIcon)` diff --git a/src/animations/loading-dots-spinner/loading-dots-spinner.tsx b/src/animations/loading-dots-spinner/loading-dots-spinner.tsx index e21b2b204..833719222 100644 --- a/src/animations/loading-dots-spinner/loading-dots-spinner.tsx +++ b/src/animations/loading-dots-spinner/loading-dots-spinner.tsx @@ -1,5 +1,5 @@ import styled, { useTheme } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { BaseTheme } from "../../theme"; import { CustomisableAnimationProps } from "../types"; import { LottieLoadingDotsSpinner } from "./lottie-animation"; @@ -10,7 +10,7 @@ export const LoadingDotsSpinner = ({ }: CustomisableAnimationProps) => { const theme = useTheme(); const animationColor = - color || v2_Color.Primary({ theme: theme || BaseTheme }); + color || V2_Color.Primary({ theme: theme || BaseTheme }); return ( diff --git a/src/box-container/box-container.styles.tsx b/src/box-container/box-container.styles.tsx index 623ba0323..14d8cdd92 100644 --- a/src/box-container/box-container.styles.tsx +++ b/src/box-container/box-container.styles.tsx @@ -2,7 +2,7 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circle-fill"; import { animated } from "react-spring"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text/text"; import { Transition } from "../transition"; @@ -29,7 +29,7 @@ interface HeaderStyleProps { // STYLING // ============================================================================= export const Container = styled.div` - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; border-radius: 4px; margin-bottom: 2rem; `; @@ -43,7 +43,7 @@ export const NonExpandable = styled.div` `; export const ChildContainer = styled.div` - border-top: 1px solid ${v2_Color.Neutral[5]}; + border-top: 1px solid ${V2_Color.Neutral[5]}; `; export const Header = styled.div` @@ -93,11 +93,11 @@ export const LabelIcon = styled.span` switch (props.$displayState) { case "error": return css` - color: ${v2_Color.Validation.Red.Icon(props)}; + color: ${V2_Color.Validation.Red.Icon(props)}; `; case "warning": return css` - color: ${v2_Color.Validation.Orange.Icon(props)}; + color: ${V2_Color.Validation.Orange.Icon(props)}; `; default: break; @@ -145,7 +145,7 @@ export const Handle = styled.button` `; export const HandleLabel = styled(V2_Text.H4)` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const HandleIconContainer = styled.div` @@ -154,7 +154,7 @@ export const HandleIconContainer = styled.div` `; export const HandleIcon = styled(ChevronDownIcon)` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; height: 1.375rem; width: 1.375rem; `; diff --git a/src/breadcrumb/breadcrumb.style.tsx b/src/breadcrumb/breadcrumb.style.tsx index b116c52d6..d7f2b50dd 100644 --- a/src/breadcrumb/breadcrumb.style.tsx +++ b/src/breadcrumb/breadcrumb.style.tsx @@ -1,6 +1,6 @@ import { ChevronRightIcon } from "@lifesg/react-icons/chevron-right"; import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text/text"; @@ -107,7 +107,7 @@ export const Item = styled.li` export const Caret = styled(ChevronRightIcon)` margin: 0.25rem 0.25rem 0.1rem 0.25rem; - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; export const CurrentLabel = styled(V2_Text.BodySmall)` diff --git a/src/button/button.style.tsx b/src/button/button.style.tsx index 114417724..f5b9d35e6 100644 --- a/src/button/button.style.tsx +++ b/src/button/button.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { v2_MediaQuery } from "../v2_media/media"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; import { V2_TextStyleHelper } from "../v2_text"; @@ -29,28 +29,28 @@ export const Main = styled.button` switch (props.$buttonStyle) { case "secondary": return css` - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; border: 1px solid ${props.$buttonIsDanger ? v2_DesignToken.Button.Danger.Border - : v2_Color.Primary}; + : V2_Color.Primary}; color: ${props.$buttonIsDanger ? v2_DesignToken.Button.Danger.Primary - : v2_Color.Primary}; + : V2_Color.Primary}; `; case "light": return css` - background-color: ${v2_Color.Neutral[8]}; - border: 1px solid ${v2_Color.Neutral[5]}; + background-color: ${V2_Color.Neutral[8]}; + border: 1px solid ${V2_Color.Neutral[5]}; color: ${props.$buttonIsDanger ? v2_DesignToken.Button.Danger.Primary - : v2_Color.Primary}; + : V2_Color.Primary}; `; case "disabled": return css` - background-color: ${v2_Color.Neutral[6]}; + background-color: ${V2_Color.Neutral[6]}; border: 1px solid transparent; cursor: not-allowed; @@ -58,7 +58,7 @@ export const Main = styled.button` box-shadow: none; } - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; case "link": return css` @@ -72,27 +72,27 @@ export const Main = styled.button` color: ${props.$buttonIsDanger ? v2_DesignToken.Button.Danger.Primary - : v2_Color.Primary}; + : V2_Color.Primary}; :hover, :active, :focus { color: ${props.$buttonIsDanger ? v2_DesignToken.Button.Danger.Hover - : v2_Color.Secondary}; + : V2_Color.Secondary}; } `; default: return css` background-color: ${props.$buttonIsDanger ? v2_DesignToken.Button.Danger.BackgroundColor - : v2_Color.Primary}; + : V2_Color.Primary}; border: 1px solid transparent; ${v2_MediaQuery.MaxWidth.mobileL} { width: 100%; } - color: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[8]}; `; } }} @@ -129,17 +129,17 @@ export const Spinner = styled(ComponentLoadingSpinner)` ${(props) => { let color = props.$buttonIsDanger ? v2_DesignToken.Button.Danger.Primary - : v2_Color.Primary(props); + : V2_Color.Primary(props); switch (props.$buttonStyle) { case "secondary": case "light": case "link": break; case "disabled": - color = v2_Color.Neutral[3](props); + color = V2_Color.Neutral[3](props); break; default: - color = v2_Color.Neutral[8](props); + color = V2_Color.Neutral[8](props); break; } diff --git a/src/calendar/calendar.tsx b/src/calendar/calendar.tsx index 692a9bb90..555ebca6e 100644 --- a/src/calendar/calendar.tsx +++ b/src/calendar/calendar.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from "react"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { InternalCalendar } from "../shared/internal-calendar"; import { CalendarProps } from "./types"; @@ -58,7 +58,7 @@ const Wrapper = styled.div` ${(props) => { if (props.$hasBorder) { return css` - border: 1px solid ${v2_Color.Neutral[5](props)}; + border: 1px solid ${V2_Color.Neutral[5](props)}; border-radius: 12px; overflow: hidden; `; diff --git a/src/card/card.style.tsx b/src/card/card.style.tsx index af5a79c4d..aa015de18 100644 --- a/src/card/card.style.tsx +++ b/src/card/card.style.tsx @@ -1,12 +1,12 @@ import styled from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; // ============================================================================= // STYLING // ============================================================================= export const StyledCard = styled.div` border-radius: 0.5rem; - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; padding: 1rem 2rem; box-shadow: 0 0.125rem 0.5rem rgba(104, 104, 104, 0.25); `; diff --git a/src/checkbox/checkbox.style.tsx b/src/checkbox/checkbox.style.tsx index 49ec26b28..54bcad87c 100644 --- a/src/checkbox/checkbox.style.tsx +++ b/src/checkbox/checkbox.style.tsx @@ -1,5 +1,5 @@ import styled, { css, keyframes } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { CheckboxProps, CheckboxSize } from "./types"; // ============================================================================= @@ -57,10 +57,10 @@ export const Container = styled.div` height: 100%; color: ${(props) => props.$disabled - ? v2_Color.Neutral[4](props) + ? V2_Color.Neutral[4](props) : props.$unchecked - ? v2_Color.Accent.Light[2](props) - : v2_Color.Primary(props)}; + ? V2_Color.Accent.Light[2](props) + : V2_Color.Primary(props)}; } `; diff --git a/src/countdown-timer/countdown-timer.style.tsx b/src/countdown-timer/countdown-timer.style.tsx index 7a6d859c6..ebca3e02c 100644 --- a/src/countdown-timer/countdown-timer.style.tsx +++ b/src/countdown-timer/countdown-timer.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_TextStyleHelper } from "../v2_text"; import { v2_MediaQuery } from "../v2_media"; @@ -29,9 +29,9 @@ export const BaseCountdown = styled.div` align-items: center; padding: 0.5rem 1rem; border-radius: 4px; - color: ${v2_Color.Primary}; - border: 1px solid ${v2_Color.Primary}; - background-color: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Primary}; + border: 1px solid ${V2_Color.Primary}; + background-color: ${V2_Color.Neutral[8]}; ${v2_MediaQuery.MaxWidth.mobileL} { padding: 1rem; @@ -40,8 +40,8 @@ export const BaseCountdown = styled.div` ${(props) => { if (props.$warn) { return css` - color: ${v2_Color.Validation.Red.Text}; - border: 1px solid ${v2_Color.Validation.Red.Border}; + color: ${V2_Color.Validation.Red.Text}; + border: 1px solid ${V2_Color.Validation.Red.Border}; `; } }} @@ -63,8 +63,8 @@ export const FixedCountdown = styled(BaseCountdown)` ${{ top: $top, left: $left, right: $right }} box-shadow: 0px 0px 4px 1px ${$warn - ? v2_Color.Validation.Red.Border - : v2_Color.Accent.Light[2]}; + ? V2_Color.Validation.Red.Border + : V2_Color.Accent.Light[2]}; ${v2_MediaQuery.MaxWidth.mobileL} { left: 0; diff --git a/src/data-table/data-table.styles.tsx b/src/data-table/data-table.styles.tsx index 232d1deb9..6de18c1f1 100644 --- a/src/data-table/data-table.styles.tsx +++ b/src/data-table/data-table.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { ErrorDisplay } from "../error-display"; import { v2_DesignToken } from "../v2_design-token"; import { V2_Text } from "../v2_text"; @@ -44,8 +44,8 @@ interface ActionBarProps { // ============================================================================= // STYLES CONSTANTS // ============================================================================= -const borderColor = v2_Color.Neutral[5]; -const fontColor = v2_Color.Neutral[1]; +const borderColor = V2_Color.Neutral[5]; +const fontColor = V2_Color.Neutral[1]; // ============================================================================= // STYLES @@ -179,7 +179,7 @@ export const HeaderCellWrapper = styled.div` align-items: center; svg { - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; margin-left: 0.5rem; } `; diff --git a/src/divider/divider.style.tsx b/src/divider/divider.style.tsx index d27a873ba..e58866cf3 100644 --- a/src/divider/divider.style.tsx +++ b/src/divider/divider.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { DividerLineStyleType } from "./types"; // ============================================================================= @@ -20,7 +20,7 @@ const dashedLineStyle = () => (props: StyleProps) => { if (props.$color && typeof props.$color === "function") { color = props.$color(props); } else { - color = props.$color || v2_Color.Neutral[5](props); + color = props.$color || V2_Color.Neutral[5](props); } const encodedColor = encodeURIComponent(color); @@ -48,7 +48,7 @@ export const Line = styled.hr` case "solid": return css` height: ${props.$thickness}px; - background-color: ${props.$color || v2_Color.Neutral[5]}; + background-color: ${props.$color || V2_Color.Neutral[5]}; `; } }} diff --git a/src/drawer/drawer.styles.tsx b/src/drawer/drawer.styles.tsx index 12fb2fc6b..0b14c9fe7 100644 --- a/src/drawer/drawer.styles.tsx +++ b/src/drawer/drawer.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text"; @@ -41,7 +41,7 @@ export const Container = styled.div` flex-direction: column; height: 100%; - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; box-shadow: 0px 2px 12px rgba(104, 104, 104, 0.25); visibility: ${(props) => (props.$show ? "visible" : "hidden")}; @@ -73,8 +73,8 @@ export const Header = styled.div` gap: 1rem; height: 5rem; padding: 2rem 1rem 1rem; - background-color: ${v2_Color.Neutral[8]}; - border-bottom: 1px solid ${v2_Color.Neutral[5]}; + background-color: ${V2_Color.Neutral[8]}; + border-bottom: 1px solid ${V2_Color.Neutral[5]}; ${v2_MediaQuery.MaxWidth.tablet} { gap: 0.5rem; @@ -83,13 +83,13 @@ export const Header = styled.div` `; export const CloseButton = styled(ClickableIcon)` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; padding: 0; order: -1; // show button on the left of the header :active, :focus { - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; } svg { diff --git a/src/e-signature/e-signature-canvas.tsx b/src/e-signature/e-signature-canvas.tsx index 5fe061df1..4d0896923 100644 --- a/src/e-signature/e-signature-canvas.tsx +++ b/src/e-signature/e-signature-canvas.tsx @@ -8,7 +8,7 @@ import { useRef, } from "react"; import { useTheme } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { BaseTheme } from "../theme"; import { SignatureCanvas, @@ -89,7 +89,7 @@ const Component = ( fabricCanvas.current.isDrawingMode = true; pencilBrush.current = new fabric.PencilBrush(fabricCanvas.current); - pencilBrush.current.color = `#${v2_Color.Neutral[8]({ + pencilBrush.current.color = `#${V2_Color.Neutral[8]({ theme: theme || BaseTheme, })}`; pencilBrush.current.width = 3; diff --git a/src/e-signature/e-signature.styles.ts b/src/e-signature/e-signature.styles.ts index 69fb8e3ea..5da5e3c43 100644 --- a/src/e-signature/e-signature.styles.ts +++ b/src/e-signature/e-signature.styles.ts @@ -1,6 +1,6 @@ import styled from "styled-components"; import { Button } from "../button"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { IconButton } from "../icon-button"; import { Modal } from "../modal"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -23,9 +23,9 @@ export const SignatureArea = styled.div` justify-content: center; background-image: ${(props) => `url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='4' ry='4' stroke='${encodeURIComponent( - v2_Color.Neutral[5](props) + V2_Color.Neutral[5](props) )}' stroke-width='4' stroke-dasharray='8%2c 8' stroke-dashoffset='8' stroke-linecap='round'/%3e%3c/svg%3e");`}; - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; border-radius: 4px; height: 14.125rem; `; @@ -47,8 +47,8 @@ export const SignaturePreviewImage = styled.img` height: 100%; `; export const ProgressBox = styled.div` - background: ${v2_Color.Accent.Light[6]}; - border: 1px solid ${v2_Color.Neutral[5]}; + background: ${V2_Color.Accent.Light[6]}; + border: 1px solid ${V2_Color.Neutral[5]}; border-radius: 4px; margin: 0 2rem; padding: 1rem; @@ -102,7 +102,7 @@ export const ModalBox = styled(Modal.Box)` export const ModalTitle = styled.h4` ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} margin-bottom: 1rem; - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; text-align: center; ${mobileMediaQuery} { @@ -122,14 +122,14 @@ export const ESignatureContainer = styled.div` } ${mobileLandscapeMediaQuery} { - background: ${v2_Color.Neutral[7]}; + background: ${V2_Color.Neutral[7]}; } `; export const ESignatureDrawable = styled.div` position: relative; width: 100%; height: 100%; - background: ${v2_Color.Neutral[6]}; + background: ${V2_Color.Neutral[6]}; margin: auto; ${mobileMediaQuery} { @@ -151,7 +151,7 @@ export const SignatureLine = styled.div` width: 18.75rem; height: 2px; transform: translateX(-50%); - background-color: ${v2_Color.Neutral[4]}; + background-color: ${V2_Color.Neutral[4]}; pointer-events: none; ${mobileMediaQuery} { diff --git a/src/error-display/error-display.style.tsx b/src/error-display/error-display.style.tsx index 8089d8e9f..5aa68dcff 100644 --- a/src/error-display/error-display.style.tsx +++ b/src/error-display/error-display.style.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { Button } from "../button"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -49,7 +49,7 @@ export const DescriptionContainer = styled.div` "Body", "regular" )} // Follow styling of Text.Body - color: ${v2_Color.Neutral[1]}; // Follow styling of Text.Body + color: ${V2_Color.Neutral[1]}; // Follow styling of Text.Body text-align: center; strong { @@ -58,12 +58,12 @@ export const DescriptionContainer = styled.div` a { ${V2_TextStyleHelper.getTextStyle("Body", "semibold")} - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; :hover, :active, :focus { - color: ${v2_Color.Secondary}; + color: ${V2_Color.Secondary}; } } `; diff --git a/src/feedback-rating/feedback-rating-stars-container.styles.tsx b/src/feedback-rating/feedback-rating-stars-container.styles.tsx index 37a6a61ba..847eeb0a9 100644 --- a/src/feedback-rating/feedback-rating-stars-container.styles.tsx +++ b/src/feedback-rating/feedback-rating-stars-container.styles.tsx @@ -1,7 +1,7 @@ import { StarIcon } from "@lifesg/react-icons/star"; import { StarFillIcon } from "@lifesg/react-icons/star-fill"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; export const Input = styled.input` position: absolute; @@ -13,9 +13,9 @@ export const Input = styled.input` const starStyle = css` width: 2.75rem; height: 2.75rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; ${Input}:focus-visible + & { - outline: 0.125rem solid ${v2_Color.Primary}; + outline: 0.125rem solid ${V2_Color.Primary}; outline-offset: -0.0625rem; border-radius: 0.25rem; } diff --git a/src/feedback-rating/feedback-rating.styles.tsx b/src/feedback-rating/feedback-rating.styles.tsx index 7f9b5b956..6bb3988a7 100644 --- a/src/feedback-rating/feedback-rating.styles.tsx +++ b/src/feedback-rating/feedback-rating.styles.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { Button } from "../button"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; export const Image = styled.img` width: 9.5rem; @@ -14,8 +14,8 @@ export const Image = styled.img` `; export const MainContainer = styled.div` - border-top: 1px solid ${v2_Color.Neutral[5]}; - border-bottom: 1px solid ${v2_Color.Neutral[5]}; + border-top: 1px solid ${V2_Color.Neutral[5]}; + border-bottom: 1px solid ${V2_Color.Neutral[5]}; display: flex; flex-direction: row; align-items: center; diff --git a/src/file-upload/dropzone.styles.tsx b/src/file-upload/dropzone.styles.tsx index edc56408e..9f6a38d9c 100644 --- a/src/file-upload/dropzone.styles.tsx +++ b/src/file-upload/dropzone.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; import { CloudArrowUpFillIcon } from "@lifesg/react-icons/cloud-arrow-up-fill"; @@ -22,7 +22,7 @@ export const Container = styled.div` ${(props) => { if (props.$border) { - const color = encodeURIComponent(v2_Color.Neutral[5](props)); + const color = encodeURIComponent(V2_Color.Neutral[5](props)); return css` background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='4' ry='4' stroke='${color}' stroke-width='4' stroke-dasharray='8%2c 8' stroke-dashoffset='8' stroke-linecap='round'/%3e%3c/svg%3e"); border-radius: 4px; @@ -46,14 +46,14 @@ export const DragOverlay = styled.div` left: 0; width: 100%; height: 100%; - background: ${v2_Color.Accent.Light[5]}; + background: ${V2_Color.Accent.Light[5]}; display: flex; flex-direction: column; justify-content: center; align-items: center; ${(props) => { - const color = encodeURIComponent(v2_Color.Primary(props)); + const color = encodeURIComponent(V2_Color.Primary(props)); return css` background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='4' ry='4' stroke='${color}' stroke-width='4' stroke-dasharray='8%2c 8' stroke-dashoffset='8' stroke-linecap='square'/%3e%3c/svg%3e"); border-radius: 4px; @@ -62,12 +62,12 @@ export const DragOverlay = styled.div` `; export const OverlayText = styled(V2_Text.BodySmall)` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; text-align: center; `; export const OverlayIcon = styled(CloudArrowUpFillIcon)` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; height: 4rem; width: 4rem; `; diff --git a/src/file-upload/file-item-edit.styles.tsx b/src/file-upload/file-item-edit.styles.tsx index bcb7ac7b2..7cbc07761 100644 --- a/src/file-upload/file-item-edit.styles.tsx +++ b/src/file-upload/file-item-edit.styles.tsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { v2_MediaQuery } from "../v2_media/media"; import { Button } from "../button/button"; import { V2_Text } from "../v2_text/text"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; // ============================================================================= // STYLE INTERFACE @@ -21,7 +21,7 @@ export const Item = styled.li` background: transparent; :not(:last-child) { - border-bottom: 1px solid ${v2_Color.Neutral[5]}; + border-bottom: 1px solid ${V2_Color.Neutral[5]}; } `; diff --git a/src/file-upload/file-list-item/file-list-item-thumbnail.tsx b/src/file-upload/file-list-item/file-list-item-thumbnail.tsx index b891353b1..0e13cf058 100644 --- a/src/file-upload/file-list-item/file-list-item-thumbnail.tsx +++ b/src/file-upload/file-list-item/file-list-item-thumbnail.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { v2_MediaQuery } from "../../v2_media"; import { ImageWithFallback } from "../../shared/image-with-fallback/image-with-fallback"; import { V2_TextStyleHelper } from "../../v2_text"; @@ -55,7 +55,7 @@ export const Thumbnail = styled(ImageWithFallback)` height: 6rem; aspect-ratio: 1; border-radius: 4px; - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; object-fit: cover; ${v2_MediaQuery.MaxWidth.mobileL} { @@ -72,8 +72,8 @@ export const ReplaceButton = styled.button` background: transparent; cursor: pointer; ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")}; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; :hover { - color: ${v2_Color.PrimaryDark}; + color: ${V2_Color.PrimaryDark}; } `; diff --git a/src/file-upload/file-list-item/file-list-item.styles.tsx b/src/file-upload/file-list-item/file-list-item.styles.tsx index 137428e9a..7c028b48a 100644 --- a/src/file-upload/file-list-item/file-list-item.styles.tsx +++ b/src/file-upload/file-list-item/file-list-item.styles.tsx @@ -1,6 +1,6 @@ import { DragHandleIcon as DSDragHandleIcon } from "@lifesg/react-icons/drag-handle"; import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { IconButton as DSIconButton } from "../../icon-button"; import { v2_MediaQuery } from "../../v2_media"; import { V2_Text } from "../../v2_text"; @@ -92,15 +92,15 @@ export const DragHandleIcon = styled( ${(props) => { if (props.$disabled) { return css` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; } }} `; export const Box = styled.div` - background: ${v2_Color.Accent.Light[6]}; - border: 1px solid ${v2_Color.Neutral[5]}; + background: ${V2_Color.Accent.Light[6]}; + border: 1px solid ${V2_Color.Neutral[5]}; border-radius: 4px; padding: 1rem 2rem; display: flex; @@ -114,17 +114,17 @@ export const Box = styled.div` ${(props) => { if (props.$focused) { return css` - border-color: ${v2_Color.Accent.Light[1]}; - box-shadow: 0 0 4px 1px ${v2_Color.Shadow.Accent}; + border-color: ${V2_Color.Accent.Light[1]}; + box-shadow: 0 0 4px 1px ${V2_Color.Shadow.Accent}; `; } else if (props.$disabled) { return css` - background: ${v2_Color.Neutral[7]}; + background: ${V2_Color.Neutral[7]}; `; } else if (props.$error) { return css` - background: ${v2_Color.Validation.Red.Background}; - border-color: ${v2_Color.Validation.Red.Border}; + background: ${V2_Color.Validation.Red.Background}; + border-color: ${V2_Color.Validation.Red.Border}; `; } }} @@ -215,7 +215,7 @@ export const ItemDescriptionText = styled(ItemText)` export const BaseErrorMessage = styled(V2_Text.XSmall)` font-size: 0.875rem !important; - color: ${v2_Color.Validation.Red.Text}; + color: ${V2_Color.Validation.Red.Text}; `; export const DesktopErrorMessage = styled(BaseErrorMessage)` @@ -278,6 +278,6 @@ export const ErrorIconButton = styled(ClickableIcon)` svg { height: 1.5rem; width: 1.5rem; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; } `; diff --git a/src/file-upload/file-list.styles.tsx b/src/file-upload/file-list.styles.tsx index ffac13bc0..efc0497fe 100644 --- a/src/file-upload/file-list.styles.tsx +++ b/src/file-upload/file-list.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; // ============================================================================= // STYLE INTERFACE @@ -17,8 +17,8 @@ export const ListWrapper = styled.ul` `; export const EditableItemsContainer = styled.li` - border-top: 1px solid ${v2_Color.Neutral[5]}; - border-bottom: 1px solid ${v2_Color.Neutral[5]}; + border-top: 1px solid ${V2_Color.Neutral[5]}; + border-bottom: 1px solid ${V2_Color.Neutral[5]}; :not(:last-child) { margin-bottom: 2rem; diff --git a/src/file-upload/file-upload.styles.tsx b/src/file-upload/file-upload.styles.tsx index 132c31f23..6ef1bb4b4 100644 --- a/src/file-upload/file-upload.styles.tsx +++ b/src/file-upload/file-upload.styles.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { Alert } from "../alert"; import { Button } from "../button"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -20,17 +20,17 @@ export const Title = styled(V2_Text.H4)` `; export const TitleContainer = styled.div` - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${applyHtmlContentStyle({ textSize: "Body" })} `; export const Description = styled(V2_Text.BodySmall)` margin-bottom: 0; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; export const DescriptionContainer = styled.div` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; ${applyHtmlContentStyle({ textSize: "BodySmall" })} `; @@ -58,7 +58,7 @@ export const UploadButton = styled(Button.Small)` `; export const UploadButtonLabel = styled.label` ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; margin-top: 0.5rem; width: 10rem; text-align: center; diff --git a/src/filter/addons/filter-item-checkbox.styles.tsx b/src/filter/addons/filter-item-checkbox.styles.tsx index b36fdbe1b..13cbe611c 100644 --- a/src/filter/addons/filter-item-checkbox.styles.tsx +++ b/src/filter/addons/filter-item-checkbox.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { Button } from "../../button/button"; -import { v2_Color } from "../../v2_color/color"; +import { V2_Color } from "../../v2_color/color"; import { v2_MediaQuery } from "../../v2_media/media"; import { ToggleIcon } from "../../shared/toggle-icon/toggle-icon"; import { V2_TextStyleHelper } from "../../v2_text/helper"; @@ -54,7 +54,7 @@ export const Item = styled.label<{ $visible: boolean; $selected: boolean }>` ${(props) => props.$selected && css` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `} `; @@ -68,7 +68,7 @@ export const StyledToggleIcon = styled(ToggleIcon)` flex-shrink: 0; ${Input}:focus-visible + & { - outline: 2px solid ${v2_Color.Primary}; + outline: 2px solid ${V2_Color.Primary}; outline-offset: -2px; border-radius: 4px; } diff --git a/src/filter/filter-item-page.styles.tsx b/src/filter/filter-item-page.styles.tsx index c7b2923e1..307a02f37 100644 --- a/src/filter/filter-item-page.styles.tsx +++ b/src/filter/filter-item-page.styles.tsx @@ -1,12 +1,12 @@ import styled from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; // ============================================================================= // FILTER ITEM PAGE STYLES // ============================================================================= export const FilterItemPageContainer = styled.div` - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; height: 100%; width: 100%; display: flex; diff --git a/src/filter/filter-item.styles.tsx b/src/filter/filter-item.styles.tsx index 014ec29e5..9274cc064 100644 --- a/src/filter/filter-item.styles.tsx +++ b/src/filter/filter-item.styles.tsx @@ -2,7 +2,7 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import { animated } from "react-spring"; import styled from "styled-components"; import { Button } from "../button/button"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { v2_MediaQuery } from "../v2_media/media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -27,18 +27,18 @@ interface DividerStyleProps { export const FilterItemWrapper = styled.div` background-color: ${(props) => props.$collapsible - ? v2_Color.Neutral[7](props) - : v2_Color.Neutral[8](props)}; + ? V2_Color.Neutral[7](props) + : V2_Color.Neutral[8](props)}; ${v2_MediaQuery.MaxWidth.tablet} { - background-color: ${v2_Color.Neutral[7]}; + background-color: ${V2_Color.Neutral[7]}; } `; export const Divider = styled.div` display: ${(props) => (props.$showDivider ? "block" : "none")}; height: 1px; - background-color: ${v2_Color.Neutral[5]}; + background-color: ${V2_Color.Neutral[5]}; ${v2_MediaQuery.MaxWidth.tablet} { display: ${(props) => (props.$showMobileDivider ? "block" : "none")}; @@ -54,7 +54,7 @@ export const FilterItemHeader = styled.div` display: flex; align-items: center; - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; ${v2_MediaQuery.MaxWidth.tablet} { background-color: transparent; @@ -68,13 +68,13 @@ export const FilterItemExpandButton = styled(ClickableIcon)` export const ChevronIcon = styled(ChevronDownIcon)` height: 1.125rem; width: 1.125rem; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; transform: rotate(${(props) => (props.$expanded ? 180 : 0)}deg); transition: transform 300ms ease-in-out; &:hover { - color: ${v2_Color.Neutral[2]}; + color: ${V2_Color.Neutral[2]}; } `; diff --git a/src/filter/filter.styles.tsx b/src/filter/filter.styles.tsx index 8d312a615..457d1fd26 100644 --- a/src/filter/filter.styles.tsx +++ b/src/filter/filter.styles.tsx @@ -1,7 +1,7 @@ import { FilterIcon } from "@lifesg/react-icons/filter"; import styled from "styled-components"; import { Button } from "../button/button"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { v2_MediaQuery } from "../v2_media/media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text/text"; @@ -11,15 +11,15 @@ import { V2_Text } from "../v2_text/text"; // ============================================================================= export const DesktopContainer = styled.div` - background-color: ${v2_Color.Neutral[8]}; - border: 1px solid ${v2_Color.Neutral[5]}; + background-color: ${V2_Color.Neutral[8]}; + border: 1px solid ${V2_Color.Neutral[5]}; border-radius: 0.5rem; overflow: hidden; width: 100%; `; export const MobileContainer = styled.div` - background-color: ${v2_Color.Neutral[7]}; + background-color: ${V2_Color.Neutral[7]}; height: 100%; width: 100%; display: flex; @@ -27,7 +27,7 @@ export const MobileContainer = styled.div` `; export const MobileOverlayContainer = styled.div` - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; height: 100%; width: 100%; `; @@ -46,10 +46,10 @@ export const FilterHeader = styled.div` display: flex; align-items: center; - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; ${v2_MediaQuery.MaxWidth.tablet} { - border-bottom: 1px solid ${v2_Color.Neutral[5]}; + border-bottom: 1px solid ${V2_Color.Neutral[5]}; } `; @@ -66,7 +66,7 @@ export const FilterTitle = styled(V2_Text.H4)` export const FilterHeaderButton = styled(ClickableIcon)` padding: 1.5rem 1.25rem; margin-right: auto; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; svg { height: 1.5rem; @@ -74,7 +74,7 @@ export const FilterHeaderButton = styled(ClickableIcon)` } &:hover { - color: ${v2_Color.Neutral[2]}; + color: ${V2_Color.Neutral[2]}; } `; @@ -106,8 +106,8 @@ export const StyledFilterIcon = styled(FilterIcon)` export const FilterFooter = styled.div` padding: 1.5rem 1.25rem; - background-color: ${v2_Color.Neutral[8]}; - border-top: 1px solid ${v2_Color.Neutral[5]}; + background-color: ${V2_Color.Neutral[8]}; + border-top: 1px solid ${V2_Color.Neutral[5]}; `; export const FilterDoneButton = styled(Button.Default)` diff --git a/src/footer/footer.style.tsx b/src/footer/footer.style.tsx index db2d368cb..403231816 100644 --- a/src/footer/footer.style.tsx +++ b/src/footer/footer.style.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { v2_Layout } from "../v2_layout"; import { v2_MediaQuery } from "../v2_media"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; // ============================================================================= @@ -9,11 +9,11 @@ import { V2_Text, V2_TextStyleHelper } from "../v2_text"; // ============================================================================= export const BaseFooter = styled.footer` - background: ${v2_Color.Neutral[7]}; + background: ${V2_Color.Neutral[7]}; `; export const StyledFooterLink = styled(V2_Text.Hyperlink.Small)` - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; `; // ============================================================================= @@ -22,7 +22,7 @@ export const StyledFooterLink = styled(V2_Text.Hyperlink.Small)` export const TopSection = styled(v2_Layout.V2_Content)` padding: 4rem 0; - border-bottom: 1px solid ${v2_Color.Neutral[5]}; + border-bottom: 1px solid ${V2_Color.Neutral[5]}; ${v2_MediaQuery.MaxWidth.tablet} { padding: 2rem 0; @@ -114,7 +114,7 @@ export const MobileOnlyBorder = styled.div` ${v2_MediaQuery.MaxWidth.tablet} { display: block; height: 1px; - background: ${v2_Color.Neutral[6]}; + background: ${V2_Color.Neutral[6]}; } `; @@ -166,20 +166,20 @@ export const CopyrightSection = styled(BottomSectionContent)` export const DisclaimerTextLink = styled(V2_Text.Hyperlink.Small)` ${V2_TextStyleHelper.getTextStyle("XSmall", "regular")} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; &:not(:last-child) { margin-right: 1.5rem; } svg { - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; vertical-align: sub; } &:hover { - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; svg { - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; } } diff --git a/src/form/form-label-addon.style.tsx b/src/form/form-label-addon.style.tsx index e14ede3dc..26616105a 100644 --- a/src/form/form-label-addon.style.tsx +++ b/src/form/form-label-addon.style.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; export const TriggerArea = styled.button` padding: 0.25rem 0.5rem 0.25rem 0.25rem; @@ -11,7 +11,7 @@ export const TriggerArea = styled.button` vertical-align: text-bottom; height: 1rem; width: 1rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; } `; diff --git a/src/form/form-label.style.tsx b/src/form/form-label.style.tsx index e52afd357..5bfae4643 100644 --- a/src/form/form-label.style.tsx +++ b/src/form/form-label.style.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; // ============================================================================= @@ -7,7 +7,7 @@ import { V2_Text, V2_TextStyleHelper } from "../v2_text"; // ============================================================================= export const Label = styled.label` ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} - color: ${v2_Color.Neutral[2]}; + color: ${V2_Color.Neutral[2]}; margin-bottom: 0.5rem; display: inline-block; @@ -18,23 +18,23 @@ export const Label = styled.label` } a { - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; text-decoration: none; :hover, :active, :focus { - color: ${v2_Color.Secondary}; + color: ${V2_Color.Secondary}; svg { - color: ${v2_Color.Secondary}; + color: ${V2_Color.Secondary}; } } } `; export const ErrorMessage = styled(V2_Text.H6)` - color: ${v2_Color.Validation.Red.Text}; + color: ${V2_Color.Validation.Red.Text}; margin-top: 0.5rem; margin-bottom: 0; outline: none; @@ -42,7 +42,7 @@ export const ErrorMessage = styled(V2_Text.H6)` export const Subtitle = styled(V2_Text.BodySmall)` && { - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; ${V2_TextStyleHelper.getFontFamily("BodySmall", "regular")} } `; diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx index 4b37a42b8..5fd118dc2 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { ImagePlaceholder } from "../shared/image-placeholder"; @@ -23,8 +23,8 @@ interface ThumbnailItemStyleProps { const IconButton = styled(ClickableIcon)` padding: 0; border-radius: 100%; - background: ${v2_Color.Neutral[8]}; - color: ${v2_Color.Primary}; + background: ${V2_Color.Neutral[8]}; + color: ${V2_Color.Primary}; height: 2.5rem; width: 2.5rem; `; @@ -174,7 +174,7 @@ export const Chip = styled(V2_Text.XSmall)` justify-content: center; align-items: center; border-radius: 20px; - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; text-align: center; `; @@ -186,7 +186,7 @@ export const ThumbnailContainer = styled.div` flex-shrink: 0; display: flex; overflow: auto; - background-color: ${v2_Color.Neutral[1]}; + background-color: ${V2_Color.Neutral[1]}; padding: 1.5rem 1rem; ${v2_MediaQuery.MaxWidth.mobileL} { @@ -206,7 +206,7 @@ export const ThumbnailWrapper = styled.div` export const ThumbnailItem = styled.div` cursor: pointer; - background-color: ${v2_Color.Neutral[1]}; + background-color: ${V2_Color.Neutral[1]}; border-radius: 10px; flex-shrink: 0; @@ -226,15 +226,15 @@ export const ThumbnailItem = styled.div` ${(props) => props.$active ? css` - border: 4px solid ${v2_Color.Primary}; + border: 4px solid ${V2_Color.Primary}; ${v2_MediaQuery.MaxWidth.mobileL} { - border: 2px solid ${v2_Color.Primary}; + border: 2px solid ${V2_Color.Primary}; } ` : css` :hover { - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; } `}; `; diff --git a/src/histogram-slider/histogram-slider.styles.ts b/src/histogram-slider/histogram-slider.styles.ts index 20dc002fd..bfd9f8499 100644 --- a/src/histogram-slider/histogram-slider.styles.ts +++ b/src/histogram-slider/histogram-slider.styles.ts @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { InputRangeSlider } from "../input-range-slider"; interface BarStyleProps { @@ -28,16 +28,16 @@ export const Histogram = styled.div` export const Bar = styled.div` flex: 1; border-radius: 4px 4px 0px 0px; - border: 0.5px solid ${v2_Color.Neutral[8]}; + border: 0.5px solid ${V2_Color.Neutral[8]}; ${(props) => { - let color = v2_Color.Neutral[6]; + let color = V2_Color.Neutral[6]; if (props.$disabled && props.$selected) { - color = v2_Color.Neutral[4]; + color = V2_Color.Neutral[4]; } else if (props.$disabled) { - color = v2_Color.Neutral[5]; + color = V2_Color.Neutral[5]; } else if (props.$selected) { - color = v2_Color.Accent.Light[1]; + color = V2_Color.Accent.Light[1]; } return css` background-color: ${color}; diff --git a/src/icon-button/icon-button.style.tsx b/src/icon-button/icon-button.style.tsx index 7df0cf500..d178ff626 100644 --- a/src/icon-button/icon-button.style.tsx +++ b/src/icon-button/icon-button.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { SizeType, StyleType } from "./types"; interface StyleProps { @@ -9,9 +9,9 @@ interface StyleProps { export const Main = styled.button` align-items: center; - background-color: ${v2_Color.Primary}; + background-color: ${V2_Color.Primary}; border-radius: 0.25rem; - color: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[8]}; cursor: pointer; display: flex; justify-content: center; @@ -62,23 +62,23 @@ export const Main = styled.button` switch (props.$styleType) { case "secondary": return css` - background-color: ${v2_Color.Neutral[8]}; - border: 1px solid ${v2_Color.Primary}; - color: ${v2_Color.Primary}; + background-color: ${V2_Color.Neutral[8]}; + border: 1px solid ${V2_Color.Primary}; + color: ${V2_Color.Primary}; `; case "light": return css` - background-color: ${v2_Color.Neutral[8]}; - border: 1px solid ${v2_Color.Neutral[5]}; - color: ${v2_Color.Primary}; + background-color: ${V2_Color.Neutral[8]}; + border: 1px solid ${V2_Color.Neutral[5]}; + color: ${V2_Color.Primary}; `; case "primary": default: return css` - background-color: ${v2_Color.Primary}; + background-color: ${V2_Color.Primary}; border: none; - color: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[8]}; `; } }} @@ -86,9 +86,9 @@ export const Main = styled.button` box-shadow: 1px 1px 4px 2px rgba(0, 0, 0, 0.2); } &:disabled { - background-color: ${v2_Color.Neutral[6]}; - border: 1px solid ${v2_Color.Neutral[6]}; - color: ${v2_Color.Neutral[3]}; + background-color: ${V2_Color.Neutral[6]}; + border: 1px solid ${V2_Color.Neutral[6]}; + color: ${V2_Color.Neutral[3]}; cursor: not-allowed; &:hover { diff --git a/src/image-button/image-button.style.tsx b/src/image-button/image-button.style.tsx index 45a000c54..7982f912d 100644 --- a/src/image-button/image-button.style.tsx +++ b/src/image-button/image-button.style.tsx @@ -1,6 +1,6 @@ import { v2_MediaQuery } from "../v2_media"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { V2_TextStyleHelper } from "../v2_text/helper"; export const Main = styled.button<{ @@ -14,14 +14,14 @@ export const Main = styled.button<{ justify-content: center; align-items: center; padding: 1.5rem 1rem; - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; border: 1px solid transparent; border-radius: 0.5rem; cursor: pointer; max-width: 13rem; transition: all 200ms ease; ${V2_TextStyleHelper.getTextStyle("Body", "semibold")} - color: ${({ $selected }) => $selected && v2_Color.Primary}; + color: ${({ $selected }) => $selected && V2_Color.Primary}; overflow-wrap: anywhere; img { @@ -40,27 +40,27 @@ export const Main = styled.button<{ ${(props) => { if (props.$error) { return css` - background: ${v2_Color.Neutral[8]}; - border: 1px solid ${v2_Color.Validation.Red.Border}; + background: ${V2_Color.Neutral[8]}; + border: 1px solid ${V2_Color.Validation.Red.Border}; :hover { - box-shadow: 0 0 4px 1px ${v2_Color.Shadow.Red}; + box-shadow: 0 0 4px 1px ${V2_Color.Shadow.Red}; } `; } else if (props.$selected) { return css` - background: ${v2_Color.Accent.Light[5]}; - border: 1px solid ${v2_Color.Primary}; + background: ${V2_Color.Accent.Light[5]}; + border: 1px solid ${V2_Color.Primary}; :hover { - box-shadow: 0 0 4px 1px ${v2_Color.Shadow.Accent}; + box-shadow: 0 0 4px 1px ${V2_Color.Shadow.Accent}; } `; } else { return css` &:hover { - border: 1px solid ${v2_Color.Accent.Light[1]}; - box-shadow: 0 0 4px 1px ${v2_Color.Shadow.Accent}; + border: 1px solid ${V2_Color.Accent.Light[1]}; + box-shadow: 0 0 4px 1px ${V2_Color.Shadow.Accent}; } `; } @@ -74,7 +74,7 @@ export const Main = styled.button<{ img { filter: grayscale(100%); } - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; outline: none; cursor: not-allowed; diff --git a/src/input-group/input-group-list-addon.style.tsx b/src/input-group/input-group-list-addon.style.tsx index 64676fc7f..6e714d78b 100644 --- a/src/input-group/input-group-list-addon.style.tsx +++ b/src/input-group/input-group-list-addon.style.tsx @@ -1,6 +1,6 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { Selector as DropdownSelector } from "../shared/dropdown-wrapper/dropdown-wrapper.styles"; import { V2_Text } from "../v2_text/text"; import { V2_TextStyle } from "../v2_text/text-style"; @@ -34,7 +34,7 @@ export const DisplayContainer = styled.div` ${(props) => { if (props.$expanded) { return css` - border-bottom: 1px solid ${v2_Color.Neutral[5](props)}; + border-bottom: 1px solid ${V2_Color.Neutral[5](props)}; `; } }} @@ -82,7 +82,7 @@ export const IconContainer = styled.div` `; export const StyledChevronIcon = styled(ChevronDownIcon)` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; height: ${V2_TextStyle.Body.fontSize}rem; width: ${V2_TextStyle.Body.fontSize}rem; vertical-align: bottom; @@ -103,12 +103,12 @@ export const ValueLabel = styled(V2_Text.Body)` `; export const PlaceholderLabel = styled(ValueLabel)` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; export const Divider = styled.div` width: 1px; - background: ${v2_Color.Neutral[5]}; + background: ${V2_Color.Neutral[5]}; flex-shrink: 0; height: 1.25rem; diff --git a/src/input-group/input-group.style.tsx b/src/input-group/input-group.style.tsx index bb0962474..fb9e0202e 100644 --- a/src/input-group/input-group.style.tsx +++ b/src/input-group/input-group.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_DesignToken } from "../v2_design-token"; import { Input } from "../input/input"; import { V2_TextStyleHelper } from "../v2_text"; @@ -24,9 +24,9 @@ export interface AddonStyleProps { export const Container = styled.div` display: flex; position: relative; - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; border-radius: 4px; - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; height: max-content; width: 100%; padding: 0 1rem; @@ -34,7 +34,7 @@ export const Container = styled.div` props.$position === "right" ? "row-reverse" : "row"}; :focus-within { - border: 1px solid ${v2_Color.Accent.Light[1]}; + border: 1px solid ${V2_Color.Accent.Light[1]}; box-shadow: ${v2_DesignToken.InputBoxShadow}; } @@ -52,22 +52,22 @@ export const Container = styled.div` `; } else if (props.disabled) { return css` - background: ${v2_Color.Neutral[6](props)}; + background: ${V2_Color.Neutral[6](props)}; :hover { cursor: not-allowed; } :focus-within { - border: 1px solid ${v2_Color.Neutral[5](props)}; + border: 1px solid ${V2_Color.Neutral[5](props)}; box-shadow: none; } `; } else if (props.$error) { return css` - border: 1px solid ${v2_Color.Validation.Red.Border(props)}; + border: 1px solid ${V2_Color.Validation.Red.Border(props)}; :focus-within { - border: 1px solid ${v2_Color.Validation.Red.Border(props)}; + border: 1px solid ${V2_Color.Validation.Red.Border(props)}; box-shadow: ${v2_DesignToken.InputErrorBoxShadow}; } `; @@ -96,24 +96,24 @@ export const AddOnContainer = styled.div` align-items: center; ${V2_TextStyleHelper.getTextStyle("Body", "regular")} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; /* SVG Icon */ svg { height: 1.5rem; width: 1.5rem; #path { - fill: ${v2_Color.Neutral[1]}; + fill: ${V2_Color.Neutral[1]}; } } ${(props) => { if (props.disabled) { return css` - color: ${v2_Color.Neutral[4](props)}; + color: ${V2_Color.Neutral[4](props)}; svg { #path { - fill: ${v2_Color.Neutral[4](props)}; + fill: ${V2_Color.Neutral[4](props)}; } } `; diff --git a/src/input-range-slider/input-range-slider.styles.ts b/src/input-range-slider/input-range-slider.styles.ts index 04a6c0d67..c3a07b7cc 100644 --- a/src/input-range-slider/input-range-slider.styles.ts +++ b/src/input-range-slider/input-range-slider.styles.ts @@ -1,6 +1,6 @@ import ReactSlider from "react-slider"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_Text } from "../v2_text"; // ============================================================================= @@ -75,9 +75,9 @@ export const Knob = styled.div` left: 50%; transform: translate(-50%, -50%); - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.16); - border: 1px solid ${v2_Color.Neutral[4]}; + border: 1px solid ${V2_Color.Neutral[4]}; border-radius: 50%; } `; @@ -89,7 +89,7 @@ export const SliderThumb = styled.div` outline: none; :focus-visible ${Knob}:after { - border: 1px solid ${v2_Color.Primary}; + border: 1px solid ${V2_Color.Primary}; } `; @@ -103,7 +103,7 @@ export const SliderTrack = styled.div` if (props.$color && typeof props.$color === "function") { return props.$color(props); } else { - return props.$color || v2_Color.Neutral[4](props); + return props.$color || V2_Color.Neutral[4](props); } }}; `; diff --git a/src/input-range-slider/input-range-slider.tsx b/src/input-range-slider/input-range-slider.tsx index b5c50719c..cc9b05bf4 100644 --- a/src/input-range-slider/input-range-slider.tsx +++ b/src/input-range-slider/input-range-slider.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from "react"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { IndicatorLabelContainer, Knob, @@ -102,9 +102,9 @@ export const InputRangeSlider = ({ function getDefaultColors() { const inactiveColor = - disabled || readOnly ? v2_Color.Neutral[5] : v2_Color.Neutral[4]; + disabled || readOnly ? V2_Color.Neutral[5] : V2_Color.Neutral[4]; const activeColor = - disabled || readOnly ? v2_Color.Neutral[4] : v2_Color.Primary; + disabled || readOnly ? V2_Color.Neutral[4] : V2_Color.Primary; if (numOfThumbs === 1) { return [activeColor, inactiveColor]; diff --git a/src/input-textarea/textara-counter.style.tsx b/src/input-textarea/textara-counter.style.tsx index 2ab3d5605..6df5bb7d0 100644 --- a/src/input-textarea/textara-counter.style.tsx +++ b/src/input-textarea/textara-counter.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_Text } from "../v2_text"; // ============================================================================= @@ -14,12 +14,12 @@ interface StyleProps { // ============================================================================= export const CounterLabel = styled(V2_Text.H6)` text-align: right; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; ${(props) => { if (props.disabled) { return css` - color: ${v2_Color.Neutral[4](props)}; + color: ${V2_Color.Neutral[4](props)}; `; } }} diff --git a/src/input-textarea/textarea.style.tsx b/src/input-textarea/textarea.style.tsx index 9215c7d15..9673665f9 100644 --- a/src/input-textarea/textarea.style.tsx +++ b/src/input-textarea/textarea.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_DesignToken } from "../v2_design-token"; import { V2_TextStyleHelper } from "../v2_text"; import { Transition } from "../transition"; @@ -21,7 +21,7 @@ export const Wrapper = styled.div` `; export const Element = styled.textarea` - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; border-radius: 4px; display: block; padding: 0.75rem 1rem; @@ -29,19 +29,19 @@ export const Element = styled.textarea` transition: ${Transition.Base}; ${V2_TextStyleHelper.getTextStyle("Body", "regular")} - color: ${v2_Color.Neutral[1]}; - background: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[1]}; + background: ${V2_Color.Neutral[8]}; :focus, :active { outline: none; - border: 1px solid ${v2_Color.Accent.Light[1]}; + border: 1px solid ${V2_Color.Accent.Light[1]}; box-shadow: ${v2_DesignToken.InputBoxShadow}; } ::placeholder, ::-webkit-input-placeholder { - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; } ${(props) => { @@ -59,23 +59,23 @@ export const Element = styled.textarea` `; } else if (props.disabled) { return css` - background: ${v2_Color.Neutral[6](props)}; + background: ${V2_Color.Neutral[6](props)}; cursor: not-allowed; :focus, :active { outline: none; - border: 1px solid ${v2_Color.Neutral[5](props)}; + border: 1px solid ${V2_Color.Neutral[5](props)}; box-shadow: none; } `; } else if (props.error) { return css` - border: 1px solid ${v2_Color.Validation.Red.Border(props)}; + border: 1px solid ${V2_Color.Validation.Red.Border(props)}; :focus, :active { - border: 1px solid ${v2_Color.Validation.Red.Border(props)}; + border: 1px solid ${V2_Color.Validation.Red.Border(props)}; box-shadow: ${v2_DesignToken.InputErrorBoxShadow}; } `; diff --git a/src/input/input.style.tsx b/src/input/input.style.tsx index c7fbed9fd..fa5e8bc49 100644 --- a/src/input/input.style.tsx +++ b/src/input/input.style.tsx @@ -1,6 +1,6 @@ import { CrossIcon } from "@lifesg/react-icons/cross"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_TextStyleHelper } from "../v2_text/helper"; // ============================================================================= @@ -15,7 +15,7 @@ export interface InputStyleProps { // ============================================================================= export const InputElement = styled.input` ${V2_TextStyleHelper.getTextStyle("Body", "regular")} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; // overwrite default styles background: transparent; @@ -33,7 +33,7 @@ export const InputElement = styled.input` ::placeholder, ::-webkit-input-placeholder { - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; } ${(props) => { @@ -68,7 +68,7 @@ export const ClearContainer = styled.button` margin-right: -1rem; // offset the padding cursor: pointer; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; background-color: transparent; border: none; `; diff --git a/src/link-list/link-list.styles.tsx b/src/link-list/link-list.styles.tsx index e10e64c69..1824c0427 100644 --- a/src/link-list/link-list.styles.tsx +++ b/src/link-list/link-list.styles.tsx @@ -3,7 +3,7 @@ import { MinusIcon } from "@lifesg/react-icons/minus"; import { PlusIcon } from "@lifesg/react-icons/plus"; import { animated } from "react-spring"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_Text } from "../v2_text"; // ============================================================================= @@ -20,20 +20,20 @@ interface ToggleStyleProps { const iconStyle = css` height: 1.125rem; width: 1.125rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const Container = styled.div` - border-top: 1px solid ${v2_Color.Neutral[5]}; - border-bottom: 1px solid ${v2_Color.Neutral[5]}; + border-top: 1px solid ${V2_Color.Neutral[5]}; + border-bottom: 1px solid ${V2_Color.Neutral[5]}; `; export const ItemTitleDefault = styled(V2_Text.H3)` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; margin-bottom: 0.5rem; `; export const ItemTitleSmall = styled(V2_Text.Body)` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const ItemIcon = styled(ChevronRightIcon)` @@ -48,14 +48,14 @@ export const Item = styled.a` min-height: 4rem; :not(:last-of-type) { - border-bottom: 1px solid ${v2_Color.Neutral[5]}; + border-bottom: 1px solid ${V2_Color.Neutral[5]}; } :hover { ${ItemTitleDefault}, ${ItemTitleSmall}, ${ItemIcon} { - color: ${v2_Color.PrimaryDark}; + color: ${V2_Color.PrimaryDark}; } } `; @@ -76,11 +76,11 @@ export const Expandable = styled(animated.div)` `; export const ExpandableChild = styled.div` - border-top: 1px solid ${v2_Color.Neutral[5]}; + border-top: 1px solid ${V2_Color.Neutral[5]}; `; export const ToggleButtonLabel = styled(V2_Text.H5)` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; margin-right: 0.5rem; `; @@ -101,13 +101,13 @@ export const ToggleButton = styled.button` background: none; cursor: pointer; transition: border-width 300ms linear; - border-top: 1px solid ${v2_Color.Neutral[5]}; + border-top: 1px solid ${V2_Color.Neutral[5]}; :hover { ${ToggleButtonLabel}, ${ViewMoreIcon}, ${ViewLessIcon} { - color: ${v2_Color.PrimaryDark}; + color: ${V2_Color.PrimaryDark}; } } `; diff --git a/src/masked-input/masked-input.style.tsx b/src/masked-input/masked-input.style.tsx index cfe8eab1f..a10ba8570 100644 --- a/src/masked-input/masked-input.style.tsx +++ b/src/masked-input/masked-input.style.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { InputGroup } from "../input-group"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; @@ -33,8 +33,8 @@ export const IconContainer = styled.div` cursor: ${({ $isDisabled }) => (!$isDisabled ? "pointer" : "initial")}; color: ${({ $isDisabled, - $inactiveColor = v2_Color.Neutral[3], - $activeColor = v2_Color.Primary, + $inactiveColor = V2_Color.Neutral[3], + $activeColor = V2_Color.Primary, }) => ($isDisabled ? $inactiveColor : $activeColor)}; svg { @@ -53,7 +53,7 @@ export const LoadingWrapper = styled.div` `; export const LoadingLabel = styled(V2_Text.Body)` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; export const Spinner = styled(ComponentLoadingSpinner)` @@ -62,7 +62,7 @@ export const Spinner = styled(ComponentLoadingSpinner)` #inner2, #inner3, #inner4 { - border-color: ${v2_Color.Neutral[3]} transparent transparent transparent; + border-color: ${V2_Color.Neutral[3]} transparent transparent transparent; } `; @@ -71,7 +71,7 @@ export const Spinner = styled(ComponentLoadingSpinner)` // ----------------------------------------------------------------------------- export const TryAgainLabel = styled(V2_Text.Body)` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; text-decoration: underline; `; @@ -82,14 +82,14 @@ export const ErrorTextContainer = styled.div` `; export const ErrorIcon = styled(ExclamationTriangleIcon)` - color: ${v2_Color.Validation.Orange.Icon}; + color: ${V2_Color.Validation.Orange.Icon}; margin-right: 0.5rem; height: 1.125rem; width: 1.125rem; `; export const ErrorLabel = styled(V2_Text.Body)` - color: ${v2_Color.Validation.Orange.Text}; + color: ${V2_Color.Validation.Orange.Text}; `; export const ClickableErrorWrapper = styled.button` @@ -106,7 +106,7 @@ export const ClickableErrorWrapper = styled.button` :active, :focus { ${TryAgainLabel} { - color: ${v2_Color.Secondary}; + color: ${V2_Color.Secondary}; } } `; diff --git a/src/modal/modal-box.styles.tsx b/src/modal/modal-box.styles.tsx index 092b9a7c5..fe771dcaa 100644 --- a/src/modal/modal-box.styles.tsx +++ b/src/modal/modal-box.styles.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; @@ -9,7 +9,7 @@ export const Box = styled.div` flex-direction: column; width: 40rem; max-height: 70%; - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.45); border-radius: 0.75rem; overflow: hidden; @@ -25,10 +25,10 @@ export const CloseButton = styled(ClickableIcon)` top: 1rem; right: 1rem; padding: 0; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; :focus-visible { - outline: 4px solid ${v2_Color.Accent.Light[1]}; + outline: 4px solid ${V2_Color.Accent.Light[1]}; } svg { diff --git a/src/navbar/drawer.styles.tsx b/src/navbar/drawer.styles.tsx index 7e0fb2258..c8fd58fde 100644 --- a/src/navbar/drawer.styles.tsx +++ b/src/navbar/drawer.styles.tsx @@ -1,6 +1,6 @@ import { CrossIcon } from "@lifesg/react-icons/cross"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; @@ -95,10 +95,10 @@ export const CloseButton = styled(ClickableIcon)` position: absolute; right: -0.25rem; bottom: 0.65rem; - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; :active, :focus { - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; } `; diff --git a/src/navbar/menu.styles.tsx b/src/navbar/menu.styles.tsx index 4095a786b..6d611efd2 100644 --- a/src/navbar/menu.styles.tsx +++ b/src/navbar/menu.styles.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { v2_DesignToken } from "../v2_design-token"; @@ -24,7 +24,7 @@ export const Wrapper = styled.ul` position: absolute; max-height: 20rem; - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; border-radius: 0 0 0.5rem 0.5rem; box-shadow: ${v2_DesignToken.ElevationBoxShadow}; `; @@ -34,7 +34,7 @@ export const MobileWrapper = styled.ul` list-style: none; ${v2_MediaQuery.MaxWidth.tablet} { - border-left: 0.25rem solid ${v2_Color.Primary}; + border-left: 0.25rem solid ${V2_Color.Primary}; display: flex; flex-direction: column; } @@ -51,7 +51,7 @@ export const Link = styled(V2_Text.Hyperlink.Small)` position: relative; align-items: flex-start; text-align: left; - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; padding: 1px 1rem; @@ -63,10 +63,10 @@ export const Link = styled(V2_Text.Hyperlink.Small)` :active, :focus { - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; } :hover { - color: ${v2_Color.Accent.Light[1]}; + color: ${V2_Color.Accent.Light[1]}; } ${v2_MediaQuery.MaxWidth.tablet} { diff --git a/src/navbar/navbar-items.styles.tsx b/src/navbar/navbar-items.styles.tsx index 357d035e7..a55ad8ad3 100644 --- a/src/navbar/navbar-items.styles.tsx +++ b/src/navbar/navbar-items.styles.tsx @@ -1,6 +1,6 @@ import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text"; @@ -73,23 +73,23 @@ export const Link = styled(V2_Text.Hyperlink.Small)` position: relative; align-items: center; text-align: center; - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; height: 100%; padding: 0 0.5rem; :active, :focus { - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; } ${v2_MediaQuery.MaxWidth.tablet} { - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; width: 100%; padding: 0.5rem 1rem; text-align: left; align-items: flex-start; :hover { - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; } } `; @@ -111,7 +111,7 @@ export const LinkIndicator = styled.div` height: 0.25rem; left: 0.5rem; right: 0.5rem; - background-color: ${v2_Color.Primary}; + background-color: ${V2_Color.Primary}; ${v2_MediaQuery.MaxWidth.tablet} { left: 0; @@ -120,7 +120,7 @@ export const LinkIndicator = styled.div` bottom: 0; height: 100%; width: 0.25rem; - background-color: ${v2_Color.Primary}; + background-color: ${V2_Color.Primary}; } `; @@ -139,8 +139,8 @@ export const ExpandCollapseButton = styled(ClickableIcon)` export const ChevronIcon = styled(ChevronUpIcon)` height: 1.25rem; width: 1.25rem; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; :hover { - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; } `; diff --git a/src/navbar/navbar.styles.tsx b/src/navbar/navbar.styles.tsx index 18b062071..a5b226e6f 100644 --- a/src/navbar/navbar.styles.tsx +++ b/src/navbar/navbar.styles.tsx @@ -1,6 +1,6 @@ import { MenuIcon } from "@lifesg/react-icons/menu"; import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { Transition } from "../transition"; @@ -81,7 +81,7 @@ export const MobileMenuButton = styled(ClickableIcon)` export const MobileMenuIcon = styled(MenuIcon)` height: 1.5rem; width: 1.5rem; - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; `; export const NavBrandContainer = styled.div` @@ -103,7 +103,7 @@ export const NavBrandContainer = styled.div` export const NavSeparator = styled.div` display: flex; - background-color: ${v2_Color.Neutral[5]}; + background-color: ${V2_Color.Neutral[5]}; height: 100%; width: 1px; margin: 0 ${(props) => (props.$compress ? 1 : 1.5)}rem; diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index f4a4fa5a3..5a8f393ba 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -1,6 +1,6 @@ import { CrossIcon } from "@lifesg/react-icons/cross"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_Layout } from "../v2_layout"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -23,19 +23,19 @@ interface ContentStyleProps { // STYLING // ============================================================================= const commonLinkStyle = css` - color: ${v2_Color.Validation.Orange.Icon}; + color: ${V2_Color.Validation.Orange.Icon}; svg { - color: ${v2_Color.Validation.Orange.Icon}; + color: ${V2_Color.Validation.Orange.Icon}; } :hover, :active, :visited, :focus { - color: ${v2_Color.Validation.Orange.Icon}; + color: ${V2_Color.Validation.Orange.Icon}; svg { - color: ${v2_Color.Validation.Orange.Icon}; + color: ${V2_Color.Validation.Orange.Icon}; } } `; @@ -46,7 +46,7 @@ export const Wrapper = styled.div` top: 0; width: 100%; transition: ${Transition.Base}; - background: ${v2_Color.Neutral[2]}; + background: ${V2_Color.Neutral[2]}; z-index: 25; cursor: ${(props) => (props.$clickable ? "pointer" : "default")}; `; @@ -69,7 +69,7 @@ export const Content = styled.div` width: 100%; ${V2_TextStyleHelper.getTextStyle("Body", "regular")} - color: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[8]}; p { display: inline-block; @@ -77,7 +77,7 @@ export const Content = styled.div` strong { ${V2_TextStyleHelper.getFontFamily("Body", "semibold")} - color: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[8]}; } a { @@ -113,7 +113,7 @@ export const StyledIconButton = styled(ClickableIcon)` export const StyledIcon = styled(CrossIcon)` height: 1.875rem; width: 1.875rem; - color: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[8]}; `; export const ActionButton = styled.button` @@ -125,7 +125,7 @@ export const ActionButton = styled.button` border: none; background: transparent; - color: ${v2_Color.Validation.Orange.Icon}; + color: ${V2_Color.Validation.Orange.Icon}; ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")}; cursor: pointer; diff --git a/src/pagination/pagination.styles.tsx b/src/pagination/pagination.styles.tsx index 9f51f48e3..d80890caf 100644 --- a/src/pagination/pagination.styles.tsx +++ b/src/pagination/pagination.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { Button } from "../button/button"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { Input } from "../input"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; @@ -47,7 +47,7 @@ export const NavigationItem = styled(ClickableIcon)` justify-content: center; align-items: center; border-radius: 0.25rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; svg { height: 1.25rem; @@ -55,13 +55,13 @@ export const NavigationItem = styled(ClickableIcon)` } &:disabled { - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; cursor: not-allowed; } :active, :focus { outline: none; - box-shadow: inset 0px 0px 4px 1px ${v2_Color.Accent.Light[1]}; + box-shadow: inset 0px 0px 4px 1px ${V2_Color.Accent.Light[1]}; } `; @@ -71,7 +71,7 @@ export const NavigationButton = styled(ClickableIcon)` justify-content: center; align-items: center; border-radius: 0.25rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; svg { height: 1.25rem; @@ -79,13 +79,13 @@ export const NavigationButton = styled(ClickableIcon)` } &:disabled { - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; cursor: not-allowed; } :active, :focus { outline: none; - box-shadow: inset 0px 0px 4px 1px ${v2_Color.Accent.Light[1]}; + box-shadow: inset 0px 0px 4px 1px ${V2_Color.Accent.Light[1]}; } ${(props) => { if (props.$position === "left") { @@ -109,11 +109,11 @@ export const NavigationButton = styled(ClickableIcon)` export const PageItem = styled(Button.Default)` background: ${(props) => - props.$selected ? v2_Color.Primary : v2_Color.Neutral[8]}; + props.$selected ? V2_Color.Primary : V2_Color.Neutral[8]}; border: 1px solid - ${(props) => (props.$selected ? v2_Color.Primary : v2_Color.Neutral[5])}; + ${(props) => (props.$selected ? V2_Color.Primary : V2_Color.Neutral[5])}; color: ${(props) => - props.$selected ? v2_Color.Neutral[8] : v2_Color.Neutral[1]}; + props.$selected ? V2_Color.Neutral[8] : V2_Color.Neutral[1]}; min-width: 2.5rem; height: 2.5rem; @@ -125,7 +125,7 @@ export const PageItem = styled(Button.Default)` span { color: ${(props) => - props.$selected ? v2_Color.Neutral[8] : v2_Color.Neutral[1]}; + props.$selected ? V2_Color.Neutral[8] : V2_Color.Neutral[1]}; ${(props) => { if (props.$selected) { return css` @@ -142,13 +142,13 @@ export const PageItem = styled(Button.Default)` box-shadow: none; background: ${(props) => - props.$selected ? v2_Color.Primary : v2_Color.Accent.Light[5]}; + props.$selected ? V2_Color.Primary : V2_Color.Accent.Light[5]}; border: 1px solid ${(props) => - props.$selected ? v2_Color.Primary : v2_Color.Accent.Light[5]}; + props.$selected ? V2_Color.Primary : V2_Color.Accent.Light[5]}; span { color: ${(props) => - props.$selected ? v2_Color.Neutral[8] : v2_Color.Primary}; + props.$selected ? V2_Color.Neutral[8] : V2_Color.Primary}; ${(props) => { if (props.$selected) { return css` @@ -166,12 +166,12 @@ export const PageItem = styled(Button.Default)` :active, :focus { background: ${(props) => - props.$selected ? v2_Color.Primary : v2_Color.Neutral[8]}; + props.$selected ? V2_Color.Primary : V2_Color.Neutral[8]}; outline: none; - box-shadow: inset 0px 0px 4px 1px ${v2_Color.Accent.Light[1]}; + box-shadow: inset 0px 0px 4px 1px ${V2_Color.Accent.Light[1]}; span { color: ${(props) => - props.$selected ? v2_Color.Neutral[8] : v2_Color.Primary}; + props.$selected ? V2_Color.Neutral[8] : V2_Color.Primary}; ${(props) => { if (props.$selected) { @@ -192,7 +192,7 @@ export const EllipsisItem = styled(ClickableIcon)` display: flex; align-items: center; justify-content: center; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; padding: 0.4rem 0.5rem; border-radius: 0.25rem; white-space: nowrap; @@ -204,14 +204,14 @@ export const EllipsisItem = styled(ClickableIcon)` :hover { svg { - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; } } :active, :focus { outline: none; - box-shadow: inset 0px 0px 4px 1px ${v2_Color.Accent.Light[1]}; + box-shadow: inset 0px 0px 4px 1px ${V2_Color.Accent.Light[1]}; } `; @@ -231,7 +231,7 @@ export const PaginationMobileInput = styled.div` justify-content: center; margin: 0.625rem; align-items: center; - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; display: flex; justify-content: center; @@ -252,7 +252,7 @@ export const InputView = styled(Input)` width: 3.5rem; height: 2.5rem; border-radius: 0.25rem; - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; padding: 0.5rem 0.5rem; input { @@ -267,10 +267,10 @@ export const InputView = styled(Input)` export const Hover = styled.div` ${V2_TextStyleHelper.getTextStyle("XSmall", 400)}; - background-color: ${v2_Color.Primary}; + background-color: ${V2_Color.Primary}; border: none; border-radius: 0.25rem; - color: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[8]}; align-items: center; position: fixed; display: flex; diff --git a/src/pill/pill.style.tsx b/src/pill/pill.style.tsx index 81549c091..29d819703 100644 --- a/src/pill/pill.style.tsx +++ b/src/pill/pill.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { PillColorType, PillType } from "./types"; import { V2_TextStyleHelper } from "../v2_text"; @@ -31,64 +31,64 @@ export const Wrapper = styled.div` let color: (props: any) => string; if (props.$type === "solid") { - color = v2_Color.Neutral[8]; + color = V2_Color.Neutral[8]; switch (props.$color) { case "grey": - backgroundColor = v2_Color.Neutral[3]; - borderColor = v2_Color.Neutral[3]; + backgroundColor = V2_Color.Neutral[3]; + borderColor = V2_Color.Neutral[3]; break; case "green": - backgroundColor = v2_Color.Validation.Green.Text; - borderColor = v2_Color.Validation.Green.Text; + backgroundColor = V2_Color.Validation.Green.Text; + borderColor = V2_Color.Validation.Green.Text; break; case "yellow": - backgroundColor = v2_Color.Validation.Orange.Text; - borderColor = v2_Color.Validation.Orange.Text; + backgroundColor = V2_Color.Validation.Orange.Text; + borderColor = V2_Color.Validation.Orange.Text; break; case "red": - backgroundColor = v2_Color.Validation.Red.Text; - borderColor = v2_Color.Validation.Red.Text; + backgroundColor = V2_Color.Validation.Red.Text; + borderColor = V2_Color.Validation.Red.Text; break; case "blue": - backgroundColor = v2_Color.Validation.Blue.Text; - borderColor = v2_Color.Validation.Blue.Text; + backgroundColor = V2_Color.Validation.Blue.Text; + borderColor = V2_Color.Validation.Blue.Text; break; default: - backgroundColor = v2_Color.Neutral[1]; - borderColor = v2_Color.Neutral[1]; + backgroundColor = V2_Color.Neutral[1]; + borderColor = V2_Color.Neutral[1]; break; } } else { switch (props.$color) { case "grey": - backgroundColor = v2_Color.Neutral[6]; - borderColor = v2_Color.Neutral[4]; - color = v2_Color.Neutral[3]; + backgroundColor = V2_Color.Neutral[6]; + borderColor = V2_Color.Neutral[4]; + color = V2_Color.Neutral[3]; break; case "green": - backgroundColor = v2_Color.Validation.Green.Background; - borderColor = v2_Color.Validation.Green.Border; - color = v2_Color.Validation.Green.Text; + backgroundColor = V2_Color.Validation.Green.Background; + borderColor = V2_Color.Validation.Green.Border; + color = V2_Color.Validation.Green.Text; break; case "yellow": - backgroundColor = v2_Color.Validation.Orange.Background; - borderColor = v2_Color.Validation.Orange.Border; - color = v2_Color.Validation.Orange.Text; + backgroundColor = V2_Color.Validation.Orange.Background; + borderColor = V2_Color.Validation.Orange.Border; + color = V2_Color.Validation.Orange.Text; break; case "red": - backgroundColor = v2_Color.Validation.Red.Background; - borderColor = v2_Color.Validation.Red.Border; - color = v2_Color.Validation.Red.Text; + backgroundColor = V2_Color.Validation.Red.Background; + borderColor = V2_Color.Validation.Red.Border; + color = V2_Color.Validation.Red.Text; break; case "blue": - backgroundColor = v2_Color.Validation.Blue.Background; - borderColor = v2_Color.Validation.Blue.Border; - color = v2_Color.Validation.Blue.Text; + backgroundColor = V2_Color.Validation.Blue.Background; + borderColor = V2_Color.Validation.Blue.Border; + color = V2_Color.Validation.Blue.Text; break; default: - backgroundColor = v2_Color.Neutral[8]; - borderColor = v2_Color.Neutral[5]; - color = v2_Color.Neutral[1]; + backgroundColor = V2_Color.Neutral[8]; + borderColor = V2_Color.Neutral[5]; + color = V2_Color.Neutral[1]; break; } } diff --git a/src/popover-v2/popover.styles.tsx b/src/popover-v2/popover.styles.tsx index 354c8ddb3..67c84883f 100644 --- a/src/popover-v2/popover.styles.tsx +++ b/src/popover-v2/popover.styles.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { Card } from "../card"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ModalBox } from "../modal/modal-box"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; @@ -15,7 +15,7 @@ export const PopoverContainer = styled.div` `; export const PopoverCard = styled(Card)` - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${applyHtmlContentStyle({ textSize: "BodySmall" })} ${v2_MediaQuery.MaxWidth.mobileL} { @@ -34,6 +34,6 @@ export const ContentWrapper = styled.div` display: none; /* Chrome/Safari/Webkit */ } - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${applyHtmlContentStyle({ textSize: "BodySmall" })} `; diff --git a/src/progress-indicator/progress-indicator.style.tsx b/src/progress-indicator/progress-indicator.style.tsx index fd900bef7..718b0d8d6 100644 --- a/src/progress-indicator/progress-indicator.style.tsx +++ b/src/progress-indicator/progress-indicator.style.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; @@ -46,8 +46,8 @@ export const IndicatorBar = styled.div` ${(props) => { const { highlighted } = props; const color = highlighted - ? v2_Color.Accent.Light[1] - : v2_Color.Neutral[6]; + ? V2_Color.Accent.Light[1] + : V2_Color.Neutral[6]; return ` background-color: ${color(props)}; `; @@ -58,14 +58,14 @@ export const IndicatorTitleDesktop = styled(V2_Text.BodySmall)` overflow-wrap: anywhere; ${(props) => { const { highlighted } = props; - const color = highlighted ? v2_Color.Primary : v2_Color.Neutral[3]; + const color = highlighted ? V2_Color.Primary : V2_Color.Neutral[3]; return `color: ${color(props)};`; }}; `; export const IndicatorTitleMobile = styled(V2_Text.BodySmall)` overflow-wrap: anywhere; - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; `; export const Indicator = styled.div` diff --git a/src/radio-button/radio-button.styles.tsx b/src/radio-button/radio-button.styles.tsx index 57d27d91b..c825c167a 100644 --- a/src/radio-button/radio-button.styles.tsx +++ b/src/radio-button/radio-button.styles.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { RadioButtonProps } from "./types"; // ============================================================================= @@ -22,12 +22,12 @@ export const Container = styled.div` width: 1.5rem; position: relative; border-radius: 50%; - border: 2px solid ${v2_Color.Accent.Light[2]}; + border: 2px solid ${V2_Color.Accent.Light[2]}; ${(props) => { if (props.$disabled) { return ` - border: 2px solid ${v2_Color.Neutral[4](props)}; + border: 2px solid ${V2_Color.Neutral[4](props)}; `; } }} @@ -52,7 +52,7 @@ export const Checkmark = styled.div` opacity: ${(props) => (props.$selected ? 1 : 0)}; transition: all 200ms ease-in-out; background: ${(props) => - props.$disabled ? v2_Color.Neutral[4](props) : v2_Color.Primary(props)}; + props.$disabled ? V2_Color.Neutral[4](props) : V2_Color.Primary(props)}; border-radius: 50%; border: 1px solid transparent; `; diff --git a/src/shared/clickable-icon/clickable-icon.style.tsx b/src/shared/clickable-icon/clickable-icon.style.tsx index c619fb946..e64cf6776 100644 --- a/src/shared/clickable-icon/clickable-icon.style.tsx +++ b/src/shared/clickable-icon/clickable-icon.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color/color"; +import { V2_Color } from "../../v2_color/color"; interface StyleProps { $outline: "none" | "browser"; @@ -32,7 +32,7 @@ export const Main = styled.button` ${({ $highlight }) => $highlight && css` - background-color: ${v2_Color.Neutral[7]}; + background-color: ${V2_Color.Neutral[7]}; `} } `; diff --git a/src/shared/component-loading-spinner/component-loading-spinner.style.tsx b/src/shared/component-loading-spinner/component-loading-spinner.style.tsx index 514977784..a0130c0c6 100644 --- a/src/shared/component-loading-spinner/component-loading-spinner.style.tsx +++ b/src/shared/component-loading-spinner/component-loading-spinner.style.tsx @@ -1,4 +1,4 @@ -import { v2_Color } from "../../v2_color/color"; +import { V2_Color } from "../../v2_color/color"; import styled, { keyframes } from "styled-components"; // ============================================================================= @@ -45,7 +45,7 @@ export const InnerRing1 = styled.div` border-width: ${(props) => props.$borderWidth}px; border-style: solid; border-radius: 50%; - border-color: ${(props) => props.$color || v2_Color.Neutral[8](props)} + border-color: ${(props) => props.$color || V2_Color.Neutral[8](props)} transparent transparent transparent; animation: ${rotate} 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; `; diff --git a/src/shared/dropdown-list-v2/dropdown-label.styles.tsx b/src/shared/dropdown-list-v2/dropdown-label.styles.tsx index 41a09c1fa..4313177ee 100644 --- a/src/shared/dropdown-list-v2/dropdown-label.styles.tsx +++ b/src/shared/dropdown-list-v2/dropdown-label.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { V2_TextStyleHelper } from "../../v2_text"; import { DropdownVariantType, @@ -38,14 +38,14 @@ export const PrimaryText = styled.div` "regular" )} color: ${(props) => - props.$selected ? v2_Color.Primary : v2_Color.Neutral[1]}; + props.$selected ? V2_Color.Primary : V2_Color.Neutral[1]}; width: 100%; ${(props) => props.$truncateType === "end" && lineClampCss} `; export const SecondaryText = styled.div` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; width: 100%; ${(props) => props.$truncateType === "end" && lineClampCss} diff --git a/src/shared/dropdown-list-v2/dropdown-list.styles.tsx b/src/shared/dropdown-list-v2/dropdown-list.styles.tsx index 20f3ecfe2..c0d4b70bc 100644 --- a/src/shared/dropdown-list-v2/dropdown-list.styles.tsx +++ b/src/shared/dropdown-list-v2/dropdown-list.styles.tsx @@ -3,7 +3,7 @@ import { SquareIcon } from "@lifesg/react-icons/square"; import { SquareTickFillIcon } from "@lifesg/react-icons/square-tick-fill"; import { TickIcon } from "@lifesg/react-icons/tick"; import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { v2_MediaQuery } from "../../v2_media"; import { V2_TextStyleHelper } from "../../v2_text"; import { DropdownVariantType } from "../dropdown-list/types"; @@ -34,9 +34,9 @@ interface ListItemStyleProps { export const Container = styled.div` overflow: hidden; - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; border-radius: 4px; - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; min-width: 23rem; ${(props) => props.$width && `width: ${props.$width}px;`} @@ -58,7 +58,7 @@ export const Container = styled.div` } ::-webkit-scrollbar-thumb { - background: ${v2_Color.Neutral[4]}; + background: ${V2_Color.Neutral[4]}; border: 5px solid transparent; border-radius: 9999px; background-clip: padding-box; @@ -85,12 +85,12 @@ export const ListItem = styled.li` padding: 0.75rem 0.5rem; cursor: pointer; - outline-color: ${v2_Color.Accent.Light[3]}; + outline-color: ${V2_Color.Accent.Light[3]}; ${(props) => props.$active && css` - background: ${v2_Color.Accent.Light[5]}; + background: ${V2_Color.Accent.Light[5]}; `} `; @@ -98,7 +98,7 @@ export const SelectedIndicator = styled(TickIcon)` flex-shrink: 0; height: 1.625rem; width: 1rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const UnselectedIndicator = styled.div` @@ -111,14 +111,14 @@ export const CheckboxSelectedIndicator = styled(SquareTickFillIcon)` flex-shrink: 0; height: 1.625rem; width: 1.625rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const CheckboxUnselectedIndicator = styled(SquareIcon)` flex-shrink: 0; height: 1.625rem; width: 1.625rem; - color: ${v2_Color.Accent.Light[2]}; + color: ${V2_Color.Accent.Light[2]}; `; // ----------------------------------------------------------------------------- @@ -139,7 +139,7 @@ export const DropdownCommonButton = styled(BasicButton)` )} cursor: pointer; overflow: hidden; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const TryAgainButton = styled(DropdownCommonButton)` @@ -174,5 +174,5 @@ export const LabelIcon = styled(ExclamationCircleFillIcon)` `; }} margin-right: 0.625rem; - color: ${v2_Color.Validation.Red.Icon}; + color: ${V2_Color.Validation.Red.Icon}; `; diff --git a/src/shared/dropdown-list-v2/dropdown-search.styles.tsx b/src/shared/dropdown-list-v2/dropdown-search.styles.tsx index 44e1792c9..727f93dfc 100644 --- a/src/shared/dropdown-list-v2/dropdown-search.styles.tsx +++ b/src/shared/dropdown-list-v2/dropdown-search.styles.tsx @@ -1,6 +1,6 @@ import { MagnifierIcon } from "@lifesg/react-icons/magnifier"; import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { ClickableIcon } from "../clickable-icon"; import { DropdownVariantType } from "../dropdown-list/types"; import { BasicInput, InputStyleProps } from "../input-wrapper/input-wrapper"; @@ -27,7 +27,7 @@ const getIconDimensions = (variant?: DropdownVariantType) => { }; export const Container = styled.div` - background: ${v2_Color.Neutral[7]}; + background: ${V2_Color.Neutral[7]}; border-radius: 4px; display: flex; align-items: center; @@ -50,7 +50,7 @@ export const SearchInput = styled(BasicInput)` `; export const SearchIcon = styled(MagnifierIcon)` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; flex-shrink: 0; ${(props) => { return getIconDimensions(props.$variant); @@ -62,7 +62,7 @@ export const ClearButton = styled(ClickableIcon)` box-sizing: content-box; padding: 0 0.5rem; margin-left: -0.5rem; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; cursor: pointer; ${(props) => { diff --git a/src/shared/dropdown-list-v2/expandable-element.styles.tsx b/src/shared/dropdown-list-v2/expandable-element.styles.tsx index d8c9247cb..20f0011f0 100644 --- a/src/shared/dropdown-list-v2/expandable-element.styles.tsx +++ b/src/shared/dropdown-list-v2/expandable-element.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { V2_TextStyle, V2_TextStyleHelper } from "../../v2_text"; import { Transition } from "../../transition"; import { BasicButton } from "../input-wrapper/input-wrapper"; @@ -42,7 +42,7 @@ export const IconContainer = styled.div` transition: ${Transition.Base}; svg { - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; ${(props) => { const size = props.$variant === "small" diff --git a/src/shared/dropdown-list/dropdown-list.styles.tsx b/src/shared/dropdown-list/dropdown-list.styles.tsx index ca6941cdb..1f6e0d28a 100644 --- a/src/shared/dropdown-list/dropdown-list.styles.tsx +++ b/src/shared/dropdown-list/dropdown-list.styles.tsx @@ -2,7 +2,7 @@ import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circl import { animated } from "react-spring"; import styled, { css } from "styled-components"; import { Checkbox } from "../../checkbox"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { v2_MediaQuery } from "../../v2_media"; import { V2_TextStyleHelper } from "../../v2_text"; import { @@ -72,8 +72,8 @@ export const List = styled.ul` } ::-webkit-scrollbar-thumb { - background: ${v2_Color.Neutral[4]}; - border-right: 5px solid ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[4]}; + border-right: 5px solid ${V2_Color.Neutral[8]}; border-top-right-radius: 4px; border-bottom-right-radius: 4px; } @@ -87,12 +87,12 @@ export const ListItem = styled.li` :hover, :focus, :active { - background: ${v2_Color.Accent.Light[5]}; + background: ${V2_Color.Accent.Light[5]}; } ${(props) => { if (props.$checked) { return css` - background: ${v2_Color.Accent.Light[5]}; + background: ${V2_Color.Accent.Light[5]}; `; } }} @@ -136,7 +136,7 @@ export const ListItemSelector = styled.button` :visited, :focus, :active { - outline-color: ${v2_Color.Accent.Light[3]}; + outline-color: ${V2_Color.Accent.Light[3]}; } span { @@ -163,14 +163,14 @@ export const PrimaryText = styled.div` props.$variant === "small" ? "BodySmall" : "Body", "regular" )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; width: 100%; ${(props) => props.$truncateType === "end" && lineClampCss} `; export const SecondaryText = styled.div` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; width: 100%; ${(props) => props.$truncateType === "end" && lineClampCss} @@ -265,7 +265,7 @@ export const DropdownCommonButton = styled.button` outline: none; ${(props) => { return ` - color: ${v2_Color.Primary(props)}; + color: ${V2_Color.Primary(props)}; `; }} `; @@ -294,5 +294,5 @@ export const LabelIcon = styled(ExclamationCircleFillIcon)` `; }} margin-right: 0.625rem; - color: ${v2_Color.Validation.Red.Icon}; + color: ${V2_Color.Validation.Red.Icon}; `; diff --git a/src/shared/dropdown-list/dropdown-search.styles.tsx b/src/shared/dropdown-list/dropdown-search.styles.tsx index 70316814e..947ccbfec 100644 --- a/src/shared/dropdown-list/dropdown-search.styles.tsx +++ b/src/shared/dropdown-list/dropdown-search.styles.tsx @@ -1,7 +1,7 @@ import { CrossIcon } from "@lifesg/react-icons/cross"; import { MagnifierIcon } from "@lifesg/react-icons/magnifier"; import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { ClickableIcon } from "../clickable-icon"; import { BasicInput, InputStyleProps } from "../input-wrapper/input-wrapper"; import { DropdownVariantType, IconProps } from "./types"; @@ -17,7 +17,7 @@ const getCssHeightAndWidth = (variant?: DropdownVariantType) => { }; export const Container = styled.li` - background: ${v2_Color.Neutral[7]}; + background: ${V2_Color.Neutral[7]}; display: flex; border-radius: 4px; align-items: center; @@ -35,7 +35,7 @@ export const SearchIcon = styled(MagnifierIcon)` return getCssHeightAndWidth(props.$variant); }} margin: 0 0.5rem; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; export const CancelButton = styled(ClickableIcon)` @@ -44,7 +44,7 @@ export const CancelButton = styled(ClickableIcon)` }} padding: 0; margin: 0 0.5rem; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; cursor: pointer; ${(props) => { if (props.$variant === "small") diff --git a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx index 2872d6e3c..aa5b5acf0 100644 --- a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx +++ b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx @@ -1,6 +1,6 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import styled, { css, keyframes } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { v2_DesignToken } from "../../v2_design-token"; import { V2_TextStyle, V2_TextStyleHelper } from "../../v2_text"; import { Transition } from "../../transition"; @@ -65,7 +65,7 @@ export const baseSelectorCSS = css` } :focus-visible { - outline: 2px solid ${v2_Color.Accent.Light[3]}; + outline: 2px solid ${V2_Color.Accent.Light[3]}; } `; @@ -96,12 +96,12 @@ const zindexPositionHide = keyframes` export const ElementBoundary = styled.div` position: relative; - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; border-radius: ${BORDER_RADIUS}; - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; :focus-within { - border: 1px solid ${v2_Color.Accent.Light[1]}; + border: 1px solid ${V2_Color.Accent.Light[1]}; box-shadow: ${v2_DesignToken.InputBoxShadow}; } @@ -124,14 +124,14 @@ export const ElementBoundary = styled.div` ${(props) => { if (props.disabled) { return css` - background: ${v2_Color.Neutral[6](props)}; + background: ${V2_Color.Neutral[6](props)}; ${Selector} { cursor: not-allowed; } :focus-within { - border: 1px solid ${v2_Color.Neutral[5](props)}; + border: 1px solid ${V2_Color.Neutral[5](props)}; box-shadow: none; } `; @@ -151,10 +151,10 @@ export const ElementBoundary = styled.div` `; } else if (props.error) { return css` - border: 1px solid ${v2_Color.Validation.Red.Border(props)}; + border: 1px solid ${V2_Color.Validation.Red.Border(props)}; :focus-within { - border: 1px solid ${v2_Color.Validation.Red.Border(props)}; + border: 1px solid ${V2_Color.Validation.Red.Border(props)}; box-shadow: ${v2_DesignToken.InputErrorBoxShadow}; } `; @@ -169,7 +169,7 @@ export const IconContainer = styled.div` `; export const StyledChevronIcon = styled(ChevronDownIcon)` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; ${(props) => { let size = V2_TextStyle.Body.fontSize; if (props.$variant === "small") { @@ -184,7 +184,7 @@ export const StyledChevronIcon = styled(ChevronDownIcon)` export const Divider = styled.div` height: 1px; - background: ${v2_Color.Neutral[5]}; + background: ${V2_Color.Neutral[5]}; margin: 0 0.5rem; `; @@ -220,5 +220,5 @@ export const ValueLabel = styled.div` `; export const PlaceholderLabel = styled(ValueLabel)` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; diff --git a/src/shared/fade-wrapper/fade-wrapper.style.tsx b/src/shared/fade-wrapper/fade-wrapper.style.tsx index ffda5677b..4d2cf060f 100644 --- a/src/shared/fade-wrapper/fade-wrapper.style.tsx +++ b/src/shared/fade-wrapper/fade-wrapper.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { v2_MediaQuery } from "../../v2_media"; import { ClickableIcon } from "../clickable-icon"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; // ============================================================================= // STYLE TYPES, transient props are denoted with $ @@ -111,7 +111,7 @@ export const FadeIndicatorButton = styled(ClickableIcon)` }} svg { - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; } } `; diff --git a/src/shared/html-content/html-content.ts b/src/shared/html-content/html-content.ts index 56705f5e4..99db7b736 100644 --- a/src/shared/html-content/html-content.ts +++ b/src/shared/html-content/html-content.ts @@ -1,5 +1,5 @@ import { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { FontFamily } from "../../spec/text-spec/font-spec"; import { V2_TextSizeType, V2_TextStyleHelper } from "../../v2_text"; @@ -27,11 +27,11 @@ export const applyHtmlContentStyle = (options?: HtmlContentStyleOptions) => { a { font-family: ${FontFamily.OpenSans.Semibold}; ${textSize && V2_TextStyleHelper.getTextStyle(textSize, "semibold")} - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; text-decoration: none; svg { - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; height: 1rem; width: 1rem; margin-left: 0.4rem; @@ -42,10 +42,10 @@ export const applyHtmlContentStyle = (options?: HtmlContentStyleOptions) => { :active, :visited, :focus { - color: ${v2_Color.Secondary}; + color: ${V2_Color.Secondary}; svg { - color: ${v2_Color.Secondary}; + color: ${V2_Color.Secondary}; } } } diff --git a/src/shared/image-placeholder/image-placeholder.style.tsx b/src/shared/image-placeholder/image-placeholder.style.tsx index f0b6cb58c..2c0e2d2e0 100644 --- a/src/shared/image-placeholder/image-placeholder.style.tsx +++ b/src/shared/image-placeholder/image-placeholder.style.tsx @@ -1,8 +1,8 @@ import styled from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; export const Placeholder = styled.div` - background-color: ${v2_Color.Neutral[6]}; + background-color: ${V2_Color.Neutral[6]}; display: flex; align-items: center; justify-content: center; diff --git a/src/shared/input-wrapper/input-wrapper.tsx b/src/shared/input-wrapper/input-wrapper.tsx index 1616cc3b4..4d985aa0f 100644 --- a/src/shared/input-wrapper/input-wrapper.tsx +++ b/src/shared/input-wrapper/input-wrapper.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { v2_DesignToken } from "../../v2_design-token"; import { V2_TextStyleHelper } from "../../v2_text"; import { DropdownVariantType } from "../dropdown-list/types"; @@ -24,22 +24,22 @@ export interface InputStyleProps { // STYLING // ============================================================================= const defaultFocusCss = css` - border: 1px solid ${v2_Color.Accent.Light[1]}; + border: 1px solid ${V2_Color.Accent.Light[1]}; box-shadow: ${v2_DesignToken.InputBoxShadow}; `; const readOnlyFocusCss = css` - border: 1px solid ${v2_Color.Accent.Light[1]}; + border: 1px solid ${V2_Color.Accent.Light[1]}; box-shadow: none; `; const disabledFocusCss = css` - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; box-shadow: none; `; const errorFocusCss = css` - border: 1px solid ${v2_Color.Validation.Red.Border}; + border: 1px solid ${V2_Color.Validation.Red.Border}; box-shadow: ${v2_DesignToken.InputErrorBoxShadow}; `; @@ -48,9 +48,9 @@ const errorFocusCss = css` * prescibe any layout for content */ export const InputBox = styled.div` - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; border-radius: 4px; - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; :focus-within { ${defaultFocusCss} @@ -71,7 +71,7 @@ export const InputBox = styled.div` `; } else if (props.$disabled) { return css` - background: ${v2_Color.Neutral[6]}; + background: ${V2_Color.Neutral[6]}; cursor: not-allowed; :focus-within { @@ -81,7 +81,7 @@ export const InputBox = styled.div` `; } else if (props.$error) { return css` - border: 1px solid ${v2_Color.Validation.Red.Border}; + border: 1px solid ${V2_Color.Validation.Red.Border}; :focus-within { ${errorFocusCss} @@ -113,7 +113,7 @@ export const BasicInput = styled.input` props.$variant === "small" ? "BodySmall" : "Body", "regular" )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; display: block; background: transparent; border: none; @@ -130,7 +130,7 @@ export const BasicInput = styled.input` ::placeholder, ::-webkit-input-placeholder { - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; } // Chrome, Safari, Edge, Opera @@ -161,6 +161,6 @@ export const BasicButton = styled.button` } :focus-visible { - outline: 2px auto ${v2_Color.Primary}; + outline: 2px auto ${V2_Color.Primary}; } `; diff --git a/src/shared/internal-calendar/calendar-manager.style.tsx b/src/shared/internal-calendar/calendar-manager.style.tsx index 8c6368bb3..680bbd7b3 100644 --- a/src/shared/internal-calendar/calendar-manager.style.tsx +++ b/src/shared/internal-calendar/calendar-manager.style.tsx @@ -3,7 +3,7 @@ import { ChevronLeftIcon } from "@lifesg/react-icons/chevron-left"; import { ChevronRightIcon } from "@lifesg/react-icons/chevron-right"; import styled, { css } from "styled-components"; import { Button } from "../../button"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { V2_TextStyleHelper } from "../../v2_text"; import { ClickableIcon } from "../clickable-icon"; @@ -26,7 +26,7 @@ interface OverlayStyleProps { // ICONS // ----------------------------------------------------------------------------- const iconStyle = css` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; height: 1rem; width: 1rem; `; @@ -72,7 +72,7 @@ export const OptionsOverlay = styled.div` left: 0; height: 100%; width: 100%; - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; ${(props) => { if (!props.$visible) { diff --git a/src/shared/internal-calendar/day-cell/day-cell.style.tsx b/src/shared/internal-calendar/day-cell/day-cell.style.tsx index c39df0b07..ae74e735b 100644 --- a/src/shared/internal-calendar/day-cell/day-cell.style.tsx +++ b/src/shared/internal-calendar/day-cell/day-cell.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../../v2_color"; +import { V2_Color } from "../../../v2_color"; import { V2_Text, V2_TextStyleHelper } from "../../../v2_text"; import { CellType, LabelType } from "./types"; @@ -21,36 +21,36 @@ interface LabelStyleProps { // HELPERS // ============================================================================= const getCellStyle = (props: StyleProps) => { - let color = v2_Color.Neutral[8]; + let color = V2_Color.Neutral[8]; let border = "1px solid transparent"; switch (props.$type) { case "current": - color = v2_Color.Accent.Light[5]; + color = V2_Color.Accent.Light[5]; break; case "hover-dash": - color = v2_Color.Accent.Light[6]; - border = `1px dashed ${v2_Color.Accent.Light[4](props)}`; + color = V2_Color.Accent.Light[6]; + border = `1px dashed ${V2_Color.Accent.Light[4](props)}`; break; case "hover-current": - color = v2_Color.Neutral[8]; - border = `1px solid ${v2_Color.Primary(props)}`; + color = V2_Color.Neutral[8]; + border = `1px solid ${V2_Color.Primary(props)}`; break; case "selected": - color = v2_Color.Accent.Light[5]; - border = `1px solid ${v2_Color.Accent.Light[4](props)}`; + color = V2_Color.Accent.Light[5]; + border = `1px solid ${V2_Color.Accent.Light[4](props)}`; break; case "selected-outline": - color = v2_Color.Accent.Light[5]; - border = `1px solid ${v2_Color.Primary(props)}`; + color = V2_Color.Accent.Light[5]; + border = `1px solid ${V2_Color.Primary(props)}`; break; case "overlap": - color = v2_Color.Accent.Light[4]; - border = `1px solid ${v2_Color.Accent.Light[4](props)}`; + color = V2_Color.Accent.Light[4]; + border = `1px solid ${V2_Color.Accent.Light[4](props)}`; break; case "overlap-outline": - color = v2_Color.Accent.Light[4]; - border = `1px solid ${v2_Color.Primary(props)}`; + color = V2_Color.Accent.Light[4]; + border = `1px solid ${V2_Color.Primary(props)}`; break; } @@ -98,7 +98,7 @@ export const RightHalf = styled(Half)` const HalfShadow = styled.div` z-index: -1; - box-shadow: 0 0 4px 1px ${v2_Color.Shadow.Accent}; + box-shadow: 0 0 4px 1px ${V2_Color.Shadow.Accent}; position: absolute; height: 100%; width: 50%; @@ -156,7 +156,7 @@ export const LeftCircle = styled(Circle)` right: calc(50% - 1.25rem); clip-path: inset(-3px 1.25rem -3px -3px); &:before { - box-shadow: -1px 0 4px 1px ${v2_Color.Shadow.Accent}; + box-shadow: -1px 0 4px 1px ${V2_Color.Shadow.Accent}; } `; @@ -164,7 +164,7 @@ export const RightCircle = styled(Circle)` left: calc(50% - 1.25rem); clip-path: inset(-3px -3px -3px 1.25rem); &:before { - box-shadow: 1px 0 4px 1px ${v2_Color.Shadow.Accent}; + box-shadow: 1px 0 4px 1px ${V2_Color.Shadow.Accent}; } `; @@ -198,12 +198,12 @@ export const Label = styled(V2_Text.H5)` if ($type === "selected") { return css` ${V2_TextStyleHelper.getTextStyle("H5", "semibold")}; - color: ${v2_Color.Accent.Light[2]}; + color: ${V2_Color.Accent.Light[2]}; `; } return css` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; } @@ -211,20 +211,20 @@ export const Label = styled(V2_Text.H5)` case "selected": return css` ${V2_TextStyleHelper.getTextStyle("H5", "semibold")}; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; case "current": return css` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; case "unavailable": return css` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; case "available": default: return css` - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; `; } }} diff --git a/src/shared/internal-calendar/internal-calendar-month.style.tsx b/src/shared/internal-calendar/internal-calendar-month.style.tsx index 2351187f6..bd7cda5d2 100644 --- a/src/shared/internal-calendar/internal-calendar-month.style.tsx +++ b/src/shared/internal-calendar/internal-calendar-month.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { V2_TextStyleHelper } from "../../v2_text/helper"; import { V2_Text } from "../../v2_text/text"; import { MonthVariant } from "./internal-calendar-month"; @@ -58,8 +58,8 @@ export const MonthCell = styled.div` return css` cursor: pointer; &:hover { - box-shadow: 0px 0px 4px 1px ${v2_Color.Shadow.Accent}; - border: 1px solid ${v2_Color.Accent.Light[1]}; + box-shadow: 0px 0px 4px 1px ${V2_Color.Shadow.Accent}; + border: 1px solid ${V2_Color.Accent.Light[1]}; } `; } @@ -74,12 +74,12 @@ export const MonthCell = styled.div` switch (props.$variant) { case "current-month": return css` - background-color: ${v2_Color.Accent.Light[6](props)}; + background-color: ${V2_Color.Accent.Light[6](props)}; `; case "selected-month": return css` - background-color: ${v2_Color.Accent.Light[5](props)}; - border: 1px solid ${v2_Color.Primary(props)}; + background-color: ${V2_Color.Accent.Light[5](props)}; + border: 1px solid ${V2_Color.Primary(props)}; `; case "default": break; @@ -91,19 +91,19 @@ export const CellLabel = styled(V2_Text.H5)` ${(props) => { if (props.$disabledDisplay) { return css` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; } switch (props.$variant) { case "current-month": return css` - color: ${v2_Color.Neutral[3](props)}; + color: ${V2_Color.Neutral[3](props)}; `; case "selected-month": return css` ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} - color: ${v2_Color.Primary(props)}; + color: ${V2_Color.Primary(props)}; `; case "default": break; diff --git a/src/shared/internal-calendar/internal-calendar-year.style.tsx b/src/shared/internal-calendar/internal-calendar-year.style.tsx index b043a168b..2a0cd25ca 100644 --- a/src/shared/internal-calendar/internal-calendar-year.style.tsx +++ b/src/shared/internal-calendar/internal-calendar-year.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { V2_TextStyleHelper } from "../../v2_text/helper"; import { V2_Text } from "../../v2_text/text"; import { YearVariant } from "./internal-calendar-year"; @@ -58,8 +58,8 @@ export const YearCell = styled.div` return css` cursor: pointer; &:hover { - box-shadow: 0px 0px 4px 1px ${v2_Color.Shadow.Accent}; - border: 1px solid ${v2_Color.Accent.Light[1]}; + box-shadow: 0px 0px 4px 1px ${V2_Color.Shadow.Accent}; + border: 1px solid ${V2_Color.Accent.Light[1]}; } `; } @@ -75,12 +75,12 @@ export const YearCell = styled.div` switch (props.$variant) { case "current-year": return css` - background: ${v2_Color.Accent.Light[6](props)}; + background: ${V2_Color.Accent.Light[6](props)}; `; case "selected-year": return css` - background: ${v2_Color.Accent.Light[5](props)}; - border: 1px solid ${v2_Color.Primary(props)}; + background: ${V2_Color.Accent.Light[5](props)}; + border: 1px solid ${V2_Color.Primary(props)}; `; case "other-decade": case "default": @@ -93,23 +93,23 @@ export const CellLabel = styled(V2_Text.H5)` ${(props) => { if (props.$disabledDisplay) { return css` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; } switch (props.$variant) { case "current-year": return css` - color: ${v2_Color.Neutral[3](props)}; + color: ${V2_Color.Neutral[3](props)}; `; case "selected-year": return css` ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} - color: ${v2_Color.Primary(props)}; + color: ${V2_Color.Primary(props)}; `; case "other-decade": return css` - color: ${v2_Color.Neutral[4](props)}; + color: ${V2_Color.Neutral[4](props)}; `; case "default": break; diff --git a/src/shared/internal-calendar/internal-calendar.style.tsx b/src/shared/internal-calendar/internal-calendar.style.tsx index 0893ac8bc..14aeb4aa3 100644 --- a/src/shared/internal-calendar/internal-calendar.style.tsx +++ b/src/shared/internal-calendar/internal-calendar.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { CalendarType } from "./types"; // ============================================================================= @@ -15,12 +15,12 @@ interface GeneralStyleProps { export const Container = styled.div` width: 100%; padding: 1.5rem 2rem; - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; ${(props) => { if (props.$type === "input") { return css` - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; border-radius: 8px; overflow: hidden; padding: 1.5rem 1.25rem; diff --git a/src/shared/internal-calendar/standard/standard-calendar-day-view.style.tsx b/src/shared/internal-calendar/standard/standard-calendar-day-view.style.tsx index 6ed13ea6f..6138066f0 100644 --- a/src/shared/internal-calendar/standard/standard-calendar-day-view.style.tsx +++ b/src/shared/internal-calendar/standard/standard-calendar-day-view.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../../v2_color"; +import { V2_Color } from "../../../v2_color"; import { V2_Text, V2_TextStyleHelper } from "../../../v2_text"; import { DayVariant } from "./standard-calendar-day-view"; @@ -95,35 +95,35 @@ export const DayLabel = styled(V2_Text.H5)` if ($disabledDisplay && $selected) { return css` ${V2_TextStyleHelper.getTextStyle("H5", "semibold")}; - color: ${v2_Color.Accent.Light[2]}; + color: ${V2_Color.Accent.Light[2]}; `; } if ($disabledDisplay) { return css` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; } if ($selected) { return css` ${V2_TextStyleHelper.getTextStyle("H5", "semibold")}; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; } switch ($variant) { case "other-month": return css` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; case "today": return css` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; case "default": return css` - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; `; } }} @@ -138,9 +138,9 @@ export const OverflowDisplay = styled(BaseOverflowDisplay)` if ($selected) { return css` - border-top: 1px solid ${v2_Color.Accent.Light[4]}; - border-bottom: 1px solid ${v2_Color.Accent.Light[4]}; - background-color: ${v2_Color.Accent.Light[5]}; + border-top: 1px solid ${V2_Color.Accent.Light[4]}; + border-bottom: 1px solid ${V2_Color.Accent.Light[4]}; + background-color: ${V2_Color.Accent.Light[5]}; `; } }} @@ -150,15 +150,15 @@ export const OverflowDisplay = styled(BaseOverflowDisplay)` if ($hovered) { return css` - border-top: 1px dashed ${v2_Color.Accent.Light[4]}; - border-bottom: 1px dashed ${v2_Color.Accent.Light[4]}; - background-color: ${v2_Color.Accent.Light[6]}; + border-top: 1px dashed ${V2_Color.Accent.Light[4]}; + border-bottom: 1px dashed ${V2_Color.Accent.Light[4]}; + background-color: ${V2_Color.Accent.Light[6]}; `; } if ($overlap) { return css` - background-color: ${v2_Color.Accent.Light[4]}; + background-color: ${V2_Color.Accent.Light[4]}; `; } }} @@ -170,16 +170,16 @@ export const InteractiveCircle = styled(BaseInteractiveCircle)` if ($selected) { return css` - background: ${v2_Color.Accent.Light[5]}; - border: 1px solid ${v2_Color.Primary}; + background: ${V2_Color.Accent.Light[5]}; + border: 1px solid ${V2_Color.Primary}; `; } if ($hovered) { return css` - box-shadow: 0px 0px 4px 1px ${v2_Color.Shadow.Accent}; - border: 1px solid ${v2_Color.Accent.Light[1]}; - background-color: ${v2_Color.Neutral[8]}; + box-shadow: 0px 0px 4px 1px ${V2_Color.Shadow.Accent}; + border: 1px solid ${V2_Color.Accent.Light[1]}; + background-color: ${V2_Color.Neutral[8]}; `; } }} @@ -191,9 +191,9 @@ export const InteractiveCircle = styled(BaseInteractiveCircle)` return css` cursor: pointer; :hover { - box-shadow: 0px 0px 4px 1px ${v2_Color.Shadow.Accent}; - border: 1px solid ${v2_Color.Accent.Light[1]}; - background-color: ${v2_Color.Neutral[8]}; + box-shadow: 0px 0px 4px 1px ${V2_Color.Shadow.Accent}; + border: 1px solid ${V2_Color.Accent.Light[1]}; + background-color: ${V2_Color.Neutral[8]}; } `; } else if ($disabledDisplay) { @@ -208,25 +208,25 @@ export const InteractiveCircle = styled(BaseInteractiveCircle)` if ($overlap) { return css` - border: 1px solid ${v2_Color.Accent.Light[1]}; - background: ${v2_Color.Accent.Light[4]}; + border: 1px solid ${V2_Color.Accent.Light[1]}; + background: ${V2_Color.Accent.Light[4]}; :hover { - background: ${v2_Color.Accent.Light[4]}; + background: ${V2_Color.Accent.Light[4]}; } `; } if ($disabledDisplay) { return css` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; } switch ($variant) { case "today": return css` - background: ${v2_Color.Accent.Light[5]}; + background: ${V2_Color.Accent.Light[5]}; `; default: break; diff --git a/src/shared/nested-dropdown-list/list-item.styles.tsx b/src/shared/nested-dropdown-list/list-item.styles.tsx index 6603f0a19..5cf469e50 100644 --- a/src/shared/nested-dropdown-list/list-item.styles.tsx +++ b/src/shared/nested-dropdown-list/list-item.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { Checkbox } from "../../checkbox"; import { V2_TextStyleHelper } from "../../v2_text"; import { TruncateType } from "./types"; @@ -61,19 +61,19 @@ export const ListItemSelector = styled.button` :visited, :focus, :active { - outline-color: ${v2_Color.Accent.Light[3]}; + outline-color: ${V2_Color.Accent.Light[3]}; } :hover { background-color: ${(props) => - props.$multiSelect ? "transparent" : v2_Color.Accent.Light[5]}; + props.$multiSelect ? "transparent" : V2_Color.Accent.Light[5]}; } ${(props) => { const { $selected, $multiSelect } = props; if (!$multiSelect && $selected) { return css` - background: ${v2_Color.Accent.Light[5]}; + background: ${V2_Color.Accent.Light[5]}; `; } }} @@ -179,12 +179,12 @@ export const ArrowButton = styled(IconButton)` `; export const TriangleIcon = styled(TriangleForwardFillIcon)` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const TitleButton = styled.button` ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; text-align: left; line-height: 1.625rem; margin-left: 0.5rem; diff --git a/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx b/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx index cc35d0e65..5e0b5579b 100644 --- a/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx +++ b/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx @@ -1,7 +1,7 @@ import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circle-fill"; import { animated } from "react-spring"; import styled from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { v2_MediaQuery } from "../../v2_media"; import { V2_Text, V2_TextStyleHelper } from "../../v2_text"; @@ -39,8 +39,8 @@ export const List = styled.ul` } ::-webkit-scrollbar-thumb { - background: ${v2_Color.Neutral[4]}; - border-right: 5px solid ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[4]}; + border-right: 5px solid ${V2_Color.Neutral[8]}; border-top-right-radius: 4px; border-bottom-right-radius: 4px; } @@ -63,7 +63,7 @@ export const LabelIcon = styled(ExclamationCircleFillIcon)` margin-right: 0.625rem; height: 1.5rem; width: 1.5rem; - color: ${v2_Color.Validation.Red.Icon}; + color: ${V2_Color.Validation.Red.Icon}; `; export const SelectAllContainer = styled.div` @@ -75,7 +75,7 @@ export const SelectAllContainer = styled.div` export const DropdownCommonButton = styled.button` ${V2_TextStyleHelper.getTextStyle("Body", "semibold")} - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; background-color: transparent; border: none; cursor: pointer; diff --git a/src/shared/progress-bar/progress-bar.tsx b/src/shared/progress-bar/progress-bar.tsx index 5210ec3f2..c602c0357 100644 --- a/src/shared/progress-bar/progress-bar.tsx +++ b/src/shared/progress-bar/progress-bar.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { getThemeColors } from "../../theme/color-theme-helper"; type ThemeColorFunctions = ReturnType; @@ -61,7 +61,7 @@ const Bar = styled.div` } else if (color) { colorToUse = (color as ThemeColorFunctions)(props); } else { - colorToUse = v2_Color.Accent.Light[1](props); + colorToUse = V2_Color.Accent.Light[1](props); } return css` diff --git a/src/shared/range-input-inner-container/range-input-inner-container.styles.tsx b/src/shared/range-input-inner-container/range-input-inner-container.styles.tsx index 94f6a98af..7610ee65f 100644 --- a/src/shared/range-input-inner-container/range-input-inner-container.styles.tsx +++ b/src/shared/range-input-inner-container/range-input-inner-container.styles.tsx @@ -1,6 +1,6 @@ import { ArrowRightIcon } from "@lifesg/react-icons"; import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; // ============================================================================= // STYLE INTERFACE @@ -56,7 +56,7 @@ export const ElementContainer = styled.div` `; export const ArrowRight = styled(ArrowRightIcon)` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; width: 1.125rem; height: 1.125rem; flex-shrink: 0; @@ -68,8 +68,8 @@ export const Indicator = styled.div` position: absolute; background: ${(props) => props.$error - ? v2_Color.Validation.Red.Border(props) - : v2_Color.Primary(props)}; + ? V2_Color.Validation.Red.Border(props) + : V2_Color.Primary(props)}; height: 0.125rem; // half - half padding - half icon width width: calc(50% - 0.5rem - (1.125rem / 2)); diff --git a/src/shared/standalone-date-input/standalone-date-input.style.tsx b/src/shared/standalone-date-input/standalone-date-input.style.tsx index 253d2a15e..5d8c59f72 100644 --- a/src/shared/standalone-date-input/standalone-date-input.style.tsx +++ b/src/shared/standalone-date-input/standalone-date-input.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { BasicInput } from "../input-wrapper/input-wrapper"; import { V2_TextStyleHelper } from "../../v2_text/helper"; import { V2_Text } from "../../v2_text/text"; @@ -41,7 +41,7 @@ export const InputContainer = styled.div` if (props.$hover) { return css` ${BaseInput}, ${Divider} { - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; } `; } @@ -71,7 +71,7 @@ export const Divider = styled(V2_Text.Body)` ${(props) => { if (props.$inactive) { return css` - color: ${v2_Color.Neutral[3](props)}; + color: ${V2_Color.Neutral[3](props)}; `; } }} @@ -79,8 +79,8 @@ export const Divider = styled(V2_Text.Body)` export const Placeholder = styled.div` ${V2_TextStyleHelper.getTextStyle("Body", "regular")} - background-color: ${v2_Color.Neutral[8]}; - color: ${v2_Color.Neutral[3]}; + background-color: ${V2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[3]}; position: absolute; display: flex; align-items: center; @@ -90,7 +90,7 @@ export const Placeholder = styled.div` ${(props) => { if (props.$disabled) { return css` - background-color: ${v2_Color.Neutral[6](props)}; + background-color: ${V2_Color.Neutral[6](props)}; cursor: not-allowed; `; } else if (props.$hide) { diff --git a/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx b/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx index 09aa75720..0feb4931e 100644 --- a/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx +++ b/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx @@ -1,7 +1,7 @@ import { animated } from "react-spring"; import styled from "styled-components"; import { Button } from "../../button"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; import { v2_MediaQuery } from "../../v2_media"; import { V2_Text } from "../../v2_text"; import { Toggle } from "../../toggle"; @@ -22,7 +22,7 @@ export const AnimatedDiv = styled(animated.div)` top: 3.5rem; left: 0; box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.2); - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; border-radius: ${BORDER_RADIUS}; overflow: hidden; z-index: 1; @@ -104,7 +104,7 @@ export const InputContainer = styled.div` export const SwitchButton = styled(ClickableIcon)` width: 5rem; padding: 1rem 0; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; svg { height: 1rem; @@ -112,7 +112,7 @@ export const SwitchButton = styled(ClickableIcon)` } &:hover { - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; } `; @@ -135,13 +135,13 @@ export const TimeInput = styled(BasicInput)` height: 3rem; width: 5rem; text-align: center; - border: 1px solid ${v2_Color.Neutral[5]}; - background: ${v2_Color.Neutral[8]}; + border: 1px solid ${V2_Color.Neutral[5]}; + background: ${V2_Color.Neutral[8]}; :focus, :active { - border: 1px solid ${v2_Color.Accent.Light[1]}; - box-shadow: inset 0 0 5px 1px ${v2_Color.Shadow.Accent}; + border: 1px solid ${V2_Color.Accent.Light[1]}; + box-shadow: inset 0 0 5px 1px ${V2_Color.Shadow.Accent}; } :focus::placeholder { diff --git a/src/shared/toggle-icon/toggle-icon.styles.tsx b/src/shared/toggle-icon/toggle-icon.styles.tsx index dfbe33d9a..42bce002c 100644 --- a/src/shared/toggle-icon/toggle-icon.styles.tsx +++ b/src/shared/toggle-icon/toggle-icon.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../../v2_color"; +import { V2_Color } from "../../v2_color"; interface StyleProps { $active?: boolean; @@ -22,11 +22,11 @@ export const Wrapper = styled.div` ${(props) => { if (props.$active && !props.disabled) { return css` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; } else { return css` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; } }}; diff --git a/src/sidenav/sidenav-drawer-item.styles.tsx b/src/sidenav/sidenav-drawer-item.styles.tsx index ee3f79468..1dd735cc5 100644 --- a/src/sidenav/sidenav-drawer-item.styles.tsx +++ b/src/sidenav/sidenav-drawer-item.styles.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; import { Button } from "../button"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_TextStyleHelper } from "../v2_text"; import { animated } from "react-spring"; @@ -36,18 +36,18 @@ export const LinkButton = styled(Button.Default)` justify-content: space-between; ${V2_TextStyleHelper.getFontFamily("H5", "semibold")} font-size: 1rem !important; - color: ${v2_Color.Neutral[1]} !important; + color: ${V2_Color.Neutral[1]} !important; } :hover, :focus { - background-color: ${v2_Color.Accent.Light[4]}; + background-color: ${V2_Color.Accent.Light[4]}; span { ${(props) => props.$noChildren && css` - color: ${v2_Color.Primary} !important; + color: ${V2_Color.Primary} !important; `} } } @@ -55,7 +55,7 @@ export const LinkButton = styled(Button.Default)` ${(props) => props.$highlight && css` - background-color: ${v2_Color.Accent.Light[4]}; + background-color: ${V2_Color.Accent.Light[4]}; `} `; @@ -73,7 +73,7 @@ export const ChevronIcon = styled(ChevronUpIcon)` display: flex; flex-direction: column; justify-content: center; - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; transform: rotate(${(props) => (props.$expanded ? 0 : 180)}deg); transition: transform 300ms ease-in-out; `; diff --git a/src/sidenav/sidenav-drawer-subitem.styles.tsx b/src/sidenav/sidenav-drawer-subitem.styles.tsx index af0010d36..572b61387 100644 --- a/src/sidenav/sidenav-drawer-subitem.styles.tsx +++ b/src/sidenav/sidenav-drawer-subitem.styles.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { Button } from "../button"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_TextStyleHelper } from "../v2_text"; //============================================================================= @@ -18,7 +18,7 @@ export const LinkButton = styled(Button.Default)` span { ${V2_TextStyleHelper.getFontFamily("H5", "regular")} font-size: 1rem !important; - color: ${v2_Color.Neutral[1]} !important; + color: ${V2_Color.Neutral[1]} !important; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; @@ -28,10 +28,10 @@ export const LinkButton = styled(Button.Default)` :hover, :focus { - background-color: ${v2_Color.Accent.Light[5]}; + background-color: ${V2_Color.Accent.Light[5]}; span { ${V2_TextStyleHelper.getFontFamily("H5", "semibold")} - color: ${v2_Color.Primary} !important; + color: ${V2_Color.Primary} !important; } } `; diff --git a/src/sidenav/sidenav-group.styles.tsx b/src/sidenav/sidenav-group.styles.tsx index 0590f156a..5d4dc2073 100644 --- a/src/sidenav/sidenav-group.styles.tsx +++ b/src/sidenav/sidenav-group.styles.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; //============================================================================= // STYLING @@ -15,5 +15,5 @@ export const Divider = styled.div` margin: 0.5rem 0; width: 6.5rem; height: 1px; - background-color: ${v2_Color.Neutral[5]}; + background-color: ${V2_Color.Neutral[5]}; `; diff --git a/src/sidenav/sidenav-item.styles.tsx b/src/sidenav/sidenav-item.styles.tsx index cb5071f9f..87ebc7570 100644 --- a/src/sidenav/sidenav-item.styles.tsx +++ b/src/sidenav/sidenav-item.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { Button } from "../button"; //============================================================================= @@ -46,13 +46,13 @@ export const DefaultButton = styled(Button.Default)` :focus { span { div { - background-color: ${v2_Color.Accent.Light[5]}; - color: ${v2_Color.Primary} !important; + background-color: ${V2_Color.Accent.Light[5]}; + color: ${V2_Color.Primary} !important; } span { ${V2_TextStyleHelper.getFontFamily("XSmall", "semibold")} - color: ${v2_Color.Primary} !important; + color: ${V2_Color.Primary} !important; } } } @@ -62,12 +62,12 @@ export const DefaultButton = styled(Button.Default)` css` span { div { - background-color: ${v2_Color.Accent.Light[5]}; + background-color: ${V2_Color.Accent.Light[5]}; } span { ${V2_TextStyleHelper.getFontFamily("XSmall", "semibold")} - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; } } `} diff --git a/src/sidenav/sidenav.styles.tsx b/src/sidenav/sidenav.styles.tsx index 79ac5ba02..fa7f5122d 100644 --- a/src/sidenav/sidenav.styles.tsx +++ b/src/sidenav/sidenav.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { animated } from "react-spring"; @@ -29,8 +29,8 @@ const Container = styled.nav` align-items: center; overflow-y: auto; width: 8.5rem; - border: 1px solid ${v2_Color.Neutral[5]}; - background-color: ${v2_Color.Accent.Light[6]}; + border: 1px solid ${V2_Color.Neutral[5]}; + background-color: ${V2_Color.Accent.Light[6]}; padding: 0.5rem 0 1.5rem 0; `; @@ -61,9 +61,9 @@ export const DesktopDrawer = styled(animated.ul)` width: 15rem; z-index: 10; padding: 1rem 0.5rem; - background-color: ${v2_Color.Accent.Light[6]}; + background-color: ${V2_Color.Accent.Light[6]}; border-radius: 0 8px 8px 0; - border: 1px solid ${v2_Color.Neutral[5]}; + border: 1px solid ${V2_Color.Neutral[5]}; ${(props) => props.$showDrawer diff --git a/src/smart-app-banner/smart-app-banner.styles.ts b/src/smart-app-banner/smart-app-banner.styles.ts index 3a46c0dd0..0ebf2198c 100644 --- a/src/smart-app-banner/smart-app-banner.styles.ts +++ b/src/smart-app-banner/smart-app-banner.styles.ts @@ -4,7 +4,7 @@ import { StarFillIcon } from "@lifesg/react-icons/star-fill"; import { StarHalfIcon } from "@lifesg/react-icons/star-half"; import styled, { css, keyframes } from "styled-components"; import { Button } from "../button"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -36,7 +36,7 @@ export const SmartAppBannerContainer = styled.div<{ width: calc(100% - 2.5rem); min-height: 5.5rem; z-index: 9001; - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; box-shadow: 0 0.125rem 0.5rem rgba(104, 104, 104, 0.25); border-radius: 0.5rem; ${(props) => { @@ -58,7 +58,7 @@ export const DismissButton = styled(ClickableIcon)` `; export const Cross = styled(CrossIcon)` - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; height: 1.25rem; width: 1.25rem; `; diff --git a/src/spec/color-spec/base-color-set.ts b/src/spec/color-spec/base-color-set.ts index 3ee31ada9..3f92eabf0 100644 --- a/src/spec/color-spec/base-color-set.ts +++ b/src/spec/color-spec/base-color-set.ts @@ -1,6 +1,6 @@ -import { v2_ColorSet, v2_ValidationTypes } from "../../v2_color/types"; +import { V2_ColorSet, V2_ValidationTypes } from "../../v2_color/types"; -export const BaseColorSet: v2_ColorSet = { +export const BaseColorSet: V2_ColorSet = { Brand: { 1: "#EF413D", 2: "#F26664", @@ -63,7 +63,7 @@ export const BaseColorSet: v2_ColorSet = { Border: "#84B7DB", Background: "#E8F4FA", // Validation Background }, - } as v2_ValidationTypes, + } as V2_ValidationTypes, Shadow: { Accent: "rgba(87, 169, 255, 0.5)", Red: "rgba(221, 102, 102, 0.8)", diff --git a/src/spec/color-spec/bookingsg-color-set.ts b/src/spec/color-spec/bookingsg-color-set.ts index 9f6bc0268..8ba575950 100644 --- a/src/spec/color-spec/bookingsg-color-set.ts +++ b/src/spec/color-spec/bookingsg-color-set.ts @@ -1,6 +1,6 @@ -import { v2_ColorSet, v2_ValidationTypes } from "../../v2_color/types"; +import { V2_ColorSet, V2_ValidationTypes } from "../../v2_color/types"; -export const BookingSGColorSet: v2_ColorSet = { +export const BookingSGColorSet: V2_ColorSet = { Brand: { 1: "#EF413D", 2: "#F26664", @@ -63,7 +63,7 @@ export const BookingSGColorSet: v2_ColorSet = { Border: "#84B7DB", Background: "#E8F4FA", // Validation Background }, - } as v2_ValidationTypes, + } as V2_ValidationTypes, Shadow: { Accent: "rgba(161, 87, 255, 0.5)", Red: "rgba(221, 102, 102, 0.8)", diff --git a/src/spec/color-spec/ccube-color-set.ts b/src/spec/color-spec/ccube-color-set.ts index e78dd9b53..fa092aadf 100644 --- a/src/spec/color-spec/ccube-color-set.ts +++ b/src/spec/color-spec/ccube-color-set.ts @@ -1,6 +1,6 @@ -import { v2_ColorSet, v2_ValidationTypes } from "../../v2_color"; +import { V2_ColorSet, V2_ValidationTypes } from "../../v2_color"; -export const CCubeColorSet: v2_ColorSet = { +export const CCubeColorSet: V2_ColorSet = { Brand: { 1: "#8D5197", 2: "#FE3399", @@ -63,7 +63,7 @@ export const CCubeColorSet: v2_ColorSet = { Border: "#84B7DB", Background: "#E8F4FA", // Validation Background }, - } as v2_ValidationTypes, + } as V2_ValidationTypes, Shadow: { Accent: "rgba(210, 77, 255, 0.5)", Red: "rgba(221, 102, 102, 0.8)", diff --git a/src/spec/color-spec/mylegacy-color-set.ts b/src/spec/color-spec/mylegacy-color-set.ts index 08c002bac..003719113 100644 --- a/src/spec/color-spec/mylegacy-color-set.ts +++ b/src/spec/color-spec/mylegacy-color-set.ts @@ -1,6 +1,6 @@ -import { v2_ColorSet, v2_ValidationTypes } from "../../v2_color/types"; +import { V2_ColorSet, V2_ValidationTypes } from "../../v2_color/types"; -export const MyLegacyColorSet: v2_ColorSet = { +export const MyLegacyColorSet: V2_ColorSet = { Brand: { 1: "#24588D", 2: "#FFC166", @@ -63,7 +63,7 @@ export const MyLegacyColorSet: v2_ColorSet = { Border: "#84B7DB", Background: "#E8F4FA", // Validation Background }, - } as v2_ValidationTypes, + } as V2_ValidationTypes, Shadow: { Accent: "rgba(34, 154, 214, 0.6)", Red: "rgba(203, 34, 19, 0.5)", diff --git a/src/spec/color-spec/oneservice-color-set.ts b/src/spec/color-spec/oneservice-color-set.ts index 8c9037847..a790bb603 100644 --- a/src/spec/color-spec/oneservice-color-set.ts +++ b/src/spec/color-spec/oneservice-color-set.ts @@ -1,6 +1,6 @@ -import { v2_ColorSet, v2_ValidationTypes } from "../../v2_color/types"; +import { V2_ColorSet, V2_ValidationTypes } from "../../v2_color/types"; -export const OneServiceColorSet: v2_ColorSet = { +export const OneServiceColorSet: V2_ColorSet = { Brand: { 1: "#009F97", 2: "#49C3CA", @@ -63,7 +63,7 @@ export const OneServiceColorSet: v2_ColorSet = { Border: "#84B7DB", Background: "#E8F4FA", // Validation Background }, - } as v2_ValidationTypes, + } as V2_ValidationTypes, Shadow: { Accent: "rgba(45, 121, 144, 0.5)", Red: "rgba(221, 102, 102, 0.8)", diff --git a/src/spec/color-spec/rbs-color-set.ts b/src/spec/color-spec/rbs-color-set.ts index 3fe56fcae..18b4967ff 100644 --- a/src/spec/color-spec/rbs-color-set.ts +++ b/src/spec/color-spec/rbs-color-set.ts @@ -1,6 +1,6 @@ -import { v2_ColorSet, v2_ValidationTypes } from "../../v2_color/types"; +import { V2_ColorSet, V2_ValidationTypes } from "../../v2_color/types"; -export const RBSColorSet: v2_ColorSet = { +export const RBSColorSet: V2_ColorSet = { Brand: { 1: "#3E4DFF", 2: "#AEACFF", @@ -63,7 +63,7 @@ export const RBSColorSet: v2_ColorSet = { Border: "#84B7DB", Background: "#E8F4FA", }, - } as v2_ValidationTypes, + } as V2_ValidationTypes, Shadow: { Accent: "rgba(90, 87, 255, 0.5)", Red: "rgba(221, 102, 102, 0.8)", diff --git a/src/spec/design-token-spec/base-design-token-set.ts b/src/spec/design-token-spec/base-design-token-set.ts index 3ec7722c6..79d2d5f5c 100644 --- a/src/spec/design-token-spec/base-design-token-set.ts +++ b/src/spec/design-token-spec/base-design-token-set.ts @@ -1,16 +1,16 @@ import { css } from "styled-components"; -import { v2_Color } from "../../v2_color/color"; +import { V2_Color } from "../../v2_color/color"; import { v2_DesignTokenSet } from "../../v2_design-token/types"; export const BaseDesignTokenSet: v2_DesignTokenSet = { InputBoxShadow: css` - inset 0 0 4px 0px ${v2_Color.Shadow.Accent} + inset 0 0 4px 0px ${V2_Color.Shadow.Accent} `, InputErrorBoxShadow: css` - inset 0 0 4px 0px ${v2_Color.Shadow.Red} + inset 0 0 4px 0px ${V2_Color.Shadow.Red} `, ElevationBoxShadow: css` - 0px 2px 8px ${v2_Color.Shadow.Elevation} + 0px 2px 8px ${V2_Color.Shadow.Elevation} `, Table: { Header: "#F5F5F5", diff --git a/src/spec/design-token-spec/rbs-design-token-set.ts b/src/spec/design-token-spec/rbs-design-token-set.ts index f4ffb096e..96b801afa 100644 --- a/src/spec/design-token-spec/rbs-design-token-set.ts +++ b/src/spec/design-token-spec/rbs-design-token-set.ts @@ -1,16 +1,16 @@ import { css } from "styled-components"; -import { v2_Color } from "../../v2_color/color"; +import { V2_Color } from "../../v2_color/color"; import { v2_DesignTokenSet } from "../../v2_design-token/types"; export const RBSDesignTokenSet: v2_DesignTokenSet = { InputBoxShadow: css` - inset 0 0 3px 0px ${v2_Color.Shadow.Accent} + inset 0 0 3px 0px ${V2_Color.Shadow.Accent} `, InputErrorBoxShadow: css` - inset 0 0 3px 0px ${v2_Color.Shadow.Red} + inset 0 0 3px 0px ${V2_Color.Shadow.Red} `, ElevationBoxShadow: css` - 0px 2px 8px ${v2_Color.Shadow.Elevation} + 0px 2px 8px ${V2_Color.Shadow.Elevation} `, Table: { Header: "#F5F5F5", diff --git a/src/tab/tab-link-chain.style.tsx b/src/tab/tab-link-chain.style.tsx index 02048fe45..af08a74ea 100644 --- a/src/tab/tab-link-chain.style.tsx +++ b/src/tab/tab-link-chain.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { FadeWrapper } from "../shared/fade-wrapper"; import { V2_Text } from "../v2_text"; import { v2_MediaQuery } from "../v2_media"; @@ -27,12 +27,12 @@ export const Chain = styled.ul` export const ChainItem = styled.li` display: flex; flex-shrink: 0; - border-bottom: 4px solid ${v2_Color.Neutral[5]}; + border-bottom: 4px solid ${V2_Color.Neutral[5]}; ${(props) => { if (props.$active) { return css` - border-bottom: 4px solid ${v2_Color.Primary}; + border-bottom: 4px solid ${V2_Color.Primary}; `; } }} @@ -56,7 +56,7 @@ export const Label = styled(V2_Text.Body)` top: 50%; left: 50%; transform: translate(-50%, calc(-50% - 0.125rem)); // Based on testing - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; opacity: 1; ${(props) => { @@ -69,7 +69,7 @@ export const Label = styled(V2_Text.Body)` `; export const BoldLabel = styled(V2_Text.Body)` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; opacity: 0; ${(props) => { if (props.$active) { diff --git a/src/tag/tag.style.ts b/src/tag/tag.style.ts index 97ab5d900..fb41b45dc 100644 --- a/src/tag/tag.style.ts +++ b/src/tag/tag.style.ts @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { TagColorType, TagType } from "./types"; import { V2_TextStyleHelper } from "../v2_text"; import { v2_MediaQuery } from "../v2_media"; @@ -36,66 +36,66 @@ export const Wrapper = styled.div` let boxShadow: string; if (props.$type === "solid") { - color = v2_Color.Neutral[8]; - boxShadow = `0px 0px 4px 1px ${v2_Color.Neutral[4](props)}`; + color = V2_Color.Neutral[8]; + boxShadow = `0px 0px 4px 1px ${V2_Color.Neutral[4](props)}`; switch (props.$color) { case "grey": - backgroundColor = v2_Color.Neutral[3]; - borderColor = v2_Color.Neutral[3]; + backgroundColor = V2_Color.Neutral[3]; + borderColor = V2_Color.Neutral[3]; break; case "green": - backgroundColor = v2_Color.Validation.Green.Text; - borderColor = v2_Color.Validation.Green.Text; + backgroundColor = V2_Color.Validation.Green.Text; + borderColor = V2_Color.Validation.Green.Text; break; case "yellow": - backgroundColor = v2_Color.Validation.Orange.Text; - borderColor = v2_Color.Validation.Orange.Text; + backgroundColor = V2_Color.Validation.Orange.Text; + borderColor = V2_Color.Validation.Orange.Text; break; case "red": - backgroundColor = v2_Color.Validation.Red.Text; - borderColor = v2_Color.Validation.Red.Text; + backgroundColor = V2_Color.Validation.Red.Text; + borderColor = V2_Color.Validation.Red.Text; break; case "blue": - backgroundColor = v2_Color.Validation.Blue.Text; - borderColor = v2_Color.Validation.Blue.Text; + backgroundColor = V2_Color.Validation.Blue.Text; + borderColor = V2_Color.Validation.Blue.Text; break; default: - backgroundColor = v2_Color.Neutral[1]; - borderColor = v2_Color.Neutral[1]; + backgroundColor = V2_Color.Neutral[1]; + borderColor = V2_Color.Neutral[1]; break; } } else { boxShadow = `0px 0px 4px 1px rgba(164, 164, 164, 0.70)`; switch (props.$color) { case "grey": - backgroundColor = v2_Color.Neutral[6]; - borderColor = v2_Color.Neutral[4]; - color = v2_Color.Neutral[3]; + backgroundColor = V2_Color.Neutral[6]; + borderColor = V2_Color.Neutral[4]; + color = V2_Color.Neutral[3]; break; case "green": - backgroundColor = v2_Color.Validation.Green.Background; - borderColor = v2_Color.Validation.Green.Border; - color = v2_Color.Validation.Green.Text; + backgroundColor = V2_Color.Validation.Green.Background; + borderColor = V2_Color.Validation.Green.Border; + color = V2_Color.Validation.Green.Text; break; case "yellow": - backgroundColor = v2_Color.Validation.Orange.Background; - borderColor = v2_Color.Validation.Orange.Border; - color = v2_Color.Validation.Orange.Text; + backgroundColor = V2_Color.Validation.Orange.Background; + borderColor = V2_Color.Validation.Orange.Border; + color = V2_Color.Validation.Orange.Text; break; case "red": - backgroundColor = v2_Color.Validation.Red.Background; - borderColor = v2_Color.Validation.Red.Border; - color = v2_Color.Validation.Red.Text; + backgroundColor = V2_Color.Validation.Red.Background; + borderColor = V2_Color.Validation.Red.Border; + color = V2_Color.Validation.Red.Text; break; case "blue": - backgroundColor = v2_Color.Validation.Blue.Background; - borderColor = v2_Color.Validation.Blue.Border; - color = v2_Color.Validation.Blue.Text; + backgroundColor = V2_Color.Validation.Blue.Background; + borderColor = V2_Color.Validation.Blue.Border; + color = V2_Color.Validation.Blue.Text; break; default: - backgroundColor = v2_Color.Neutral[8]; - borderColor = v2_Color.Neutral[5]; - color = v2_Color.Neutral[1]; + backgroundColor = V2_Color.Neutral[8]; + borderColor = V2_Color.Neutral[5]; + color = V2_Color.Neutral[1]; boxShadow = `0px 0px 4px 1px rgba(164, 164, 164, 0.50)`; break; } diff --git a/src/text-list/text-list.styles.tsx b/src/text-list/text-list.styles.tsx index fa0661a16..033aa3b81 100644 --- a/src/text-list/text-list.styles.tsx +++ b/src/text-list/text-list.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { v2_MediaQuery } from "../v2_media"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_TextStyleHelper } from "../v2_text/helper"; import { OrderedListProps, UnorderedListProps } from "./types"; @@ -27,7 +27,7 @@ export const StyledOrderedList = styled.ol` li { ${(props) => V2_TextStyleHelper.getTextStyle(props.size, "regular")} position: relative; - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; } ${(props) => { @@ -81,7 +81,7 @@ export const StyledUnorderedList = styled.ul` li { ${(props) => V2_TextStyleHelper.getTextStyle(props.size, "regular")} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; } counter-reset: list; diff --git a/src/theme/color-theme-helper.ts b/src/theme/color-theme-helper.ts index 638b2c172..ddb0aa2b1 100644 --- a/src/theme/color-theme-helper.ts +++ b/src/theme/color-theme-helper.ts @@ -1,4 +1,4 @@ -import { v2_ColorSet } from "../v2_color/types"; +import { V2_ColorSet } from "../v2_color/types"; import { BaseColorSet } from "../spec/color-spec/base-color-set"; import { BookingSGColorSet } from "../spec/color-spec/bookingsg-color-set"; import { CCubeColorSet } from "../spec/color-spec/ccube-color-set"; @@ -35,7 +35,7 @@ const ColorSpec: ThemeCollectionSpec = { export const getThemeColors = (attributePath: string) => { return (props: any): string => { const theme = props.theme as ThemeSpec; - const colorSet: v2_ColorSet = getCollection( + const colorSet: V2_ColorSet = getCollection( ColorSpec, theme[ThemeContextKeys.colorScheme] ); diff --git a/src/theme/types.ts b/src/theme/types.ts index 8c47242db..329980d60 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -1,4 +1,4 @@ -import { v2_ColorSet, v2_ColorSetOptions } from "../v2_color/types"; +import { V2_ColorSet, V2_ColorSetOptions } from "../v2_color/types"; import { v2_DesignTokenSet, @@ -22,7 +22,7 @@ export type ColorScheme = | "ccube" | "oneservice"; export type ColorCollectionsMap = { - [key in ColorScheme]: v2_ColorSet; + [key in ColorScheme]: V2_ColorSet; }; // ============================================================================= @@ -59,7 +59,7 @@ export enum ThemeContextKeys { export interface ThemeSpecOptions { /** for color customisation, can specify subset of set */ - color?: v2_ColorSetOptions | undefined; + color?: V2_ColorSetOptions | undefined; textStyle?: V2_TextStyleSetOptionsType | undefined; designToken?: v2_DesignTokenSetOptions | undefined; } diff --git a/src/time-range-picker/time-range-picker.styles.tsx b/src/time-range-picker/time-range-picker.styles.tsx index 20eb2936c..67e3a051d 100644 --- a/src/time-range-picker/time-range-picker.styles.tsx +++ b/src/time-range-picker/time-range-picker.styles.tsx @@ -1,6 +1,6 @@ import { ArrowRightIcon } from "@lifesg/react-icons/arrow-right"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { BasicInput, InputWrapper, diff --git a/src/time-slot-bar-week/time-slot-bar-week-days.style.tsx b/src/time-slot-bar-week/time-slot-bar-week-days.style.tsx index bfafef2e7..990fee482 100644 --- a/src/time-slot-bar-week/time-slot-bar-week-days.style.tsx +++ b/src/time-slot-bar-week/time-slot-bar-week-days.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { V2_Text } from "../v2_text/text"; import { V2_TextStyleHelper } from "../v2_text"; import { Button } from "../button"; @@ -42,7 +42,7 @@ export const CellWeekText = styled(V2_Text.XSmall)` ${(props) => props.$disabled && css` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `} `; @@ -91,7 +91,7 @@ export const TimeColumnWrapper = styled.div` export const TimeColumnText = styled.div` ${V2_TextStyleHelper.getFontFamily("Body", 700)} - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; font-size: 0.625rem !important; line-height: 0.75rem !important; text-align: center; @@ -155,13 +155,13 @@ export const TimeSlotComponent = styled(TimeSlot)` ? "transparent" : props.$bgColor} 50%, - ${v2_Color.Neutral[5]} 0% + ${V2_Color.Neutral[5]} 0% ) ${props.$styleType === "stripes" && `, repeating-linear-gradient( 135deg, - ${props.$bgColor2 || v2_Color.Neutral[5]} 0px, - ${props.$bgColor2 || v2_Color.Neutral[5]} 10px, + ${props.$bgColor2 || V2_Color.Neutral[5]} 0px, + ${props.$bgColor2 || V2_Color.Neutral[5]} 10px, ${props.$bgColor} 10px, ${props.$bgColor} 20px )`}; diff --git a/src/time-slot-bar/time-slot-bar.styles.tsx b/src/time-slot-bar/time-slot-bar.styles.tsx index 0acbc4019..125b05337 100644 --- a/src/time-slot-bar/time-slot-bar.styles.tsx +++ b/src/time-slot-bar/time-slot-bar.styles.tsx @@ -1,7 +1,7 @@ import { ChevronLeftIcon } from "@lifesg/react-icons/chevron-left"; import { ChevronRightIcon } from "@lifesg/react-icons/chevron-right"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text"; import { Direction, SlotStyle, TimeSlotBarVariant } from "./types"; @@ -74,7 +74,7 @@ export const ArrowButton = styled(ClickableIcon)` z-index: 2; position: absolute; bottom: ${({ $variant }) => ($variant === "default" ? "0.25rem" : "0rem")}; - background-color: ${v2_Color.Neutral[8]}; + background-color: ${V2_Color.Neutral[8]}; box-shadow: 0px 2px 8px rgba(104, 104, 104, 0.5); border-radius: 50%; padding: 0.5rem; @@ -104,12 +104,12 @@ export const ArrowButton = styled(ClickableIcon)` export const ArrowIconRight = styled(ChevronRightIcon)` width: 1rem; height: 1rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const ArrowIconLeft = styled(ChevronLeftIcon)` font-size: 1rem; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const TimeSlotBarContainer = styled.div<{ @@ -137,7 +137,7 @@ export const TimeMarker = styled.div` display: inline-block; width: ${({ $variant }) => `${getCellWidth($variant)}px`}; position: relative; - border-left: 1px solid ${v2_Color.Neutral[2]}; + border-left: 1px solid ${V2_Color.Neutral[2]}; ${(props) => { let markerHeight = 0; @@ -160,7 +160,7 @@ export const TimeMarker = styled.div` `; export const TimeLabel = styled(V2_Text.XSmall)` - color: ${v2_Color.Neutral[2]}; + color: ${V2_Color.Neutral[2]}; position: absolute; bottom: 10%; left: 10%; @@ -194,8 +194,8 @@ export const TimeSlot = styled.div` css` background: repeating-linear-gradient( 135deg, - ${props.$bgColor2 || v2_Color.Neutral[5]} 0px, - ${props.$bgColor2 || v2_Color.Neutral[5]} 10px, + ${props.$bgColor2 || V2_Color.Neutral[5]} 0px, + ${props.$bgColor2 || V2_Color.Neutral[5]} 10px, ${props.$bgColor} 10px, ${props.$bgColor} 20px ); @@ -207,11 +207,11 @@ export const Border = styled.div<{ $variant: TimeSlotBarVariant }>` top: ${MAX_LINE_HEIGHT}rem; height: ${({ $variant }) => `${getCellHeight($variant)}px`}; z-index: 1; - border-right: 1px solid ${v2_Color.Neutral[2]}; + border-right: 1px solid ${V2_Color.Neutral[2]}; `; export const CellText = styled(V2_Text.XSmall)` - color: ${(props) => props.$color || v2_Color.Neutral[2](props)}; + color: ${(props) => props.$color || V2_Color.Neutral[2](props)}; position: absolute; bottom: 0; padding-left: 4px; diff --git a/src/time-slot-week-view/time-slot-week-days.style.tsx b/src/time-slot-week-view/time-slot-week-days.style.tsx index 18d6b8628..2ae8364ac 100644 --- a/src/time-slot-week-view/time-slot-week-days.style.tsx +++ b/src/time-slot-week-view/time-slot-week-days.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { DayLabel } from "../shared/internal-calendar/standard"; import { V2_TextStyleHelper } from "../v2_text"; @@ -10,7 +10,7 @@ export const DayLabelWeek = styled(DayLabel)` case "default": return css` ${V2_TextStyleHelper.getFontFamily("H5", "semibold")} - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; } }} @@ -44,7 +44,7 @@ export const TimeSlotText = styled.div` align-items: center; text-align: center; max-width: 2.5rem; - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; span { display: block; } diff --git a/src/timeline/timeline.style.tsx b/src/timeline/timeline.style.tsx index 1f6405cef..2abd69571 100644 --- a/src/timeline/timeline.style.tsx +++ b/src/timeline/timeline.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; import { Variant } from "./types"; @@ -34,21 +34,21 @@ export const CircleIndicator = styled.div` switch (props.$variant) { case "current": return css` - background-color: ${v2_Color.Accent.Light[1]}; + background-color: ${V2_Color.Accent.Light[1]}; `; case "upcoming-active": return css` - border: 4px solid ${v2_Color.Accent.Light[1]}; + border: 4px solid ${V2_Color.Accent.Light[1]}; `; case "upcoming-inactive": return css` - border: 4px solid ${v2_Color.Neutral[4]}; + border: 4px solid ${V2_Color.Neutral[4]}; `; case "completed": return css` - background-color: ${v2_Color.Validation.Green.Icon}; + background-color: ${V2_Color.Validation.Green.Icon}; svg { - color: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[8]}; } `; case "error": @@ -58,14 +58,14 @@ export const CircleIndicator = styled.div` margin: -0.15rem 0 -0.15rem -0.15rem; svg { - color: ${v2_Color.Validation.Red.Icon}; + color: ${V2_Color.Validation.Red.Icon}; height: 100%; width: 100%; } `; case "disabled": return css` - background-color: ${v2_Color.Neutral[4]}; + background-color: ${V2_Color.Neutral[4]}; `; } }} @@ -83,21 +83,21 @@ export const LineIndicator = styled.div` case "current": case "upcoming-active": return css` - background-color: ${v2_Color.Accent.Light[1]}; + background-color: ${V2_Color.Accent.Light[1]}; `; case "upcoming-inactive": case "disabled": return css` - background-color: ${v2_Color.Neutral[4]}; + background-color: ${V2_Color.Neutral[4]}; `; case "completed": return css` - background-color: ${v2_Color.Validation.Green.Icon}; + background-color: ${V2_Color.Validation.Green.Icon}; `; case "error": return css` margin-left: -0.15rem; - background-color: ${v2_Color.Validation.Red.Icon}; + background-color: ${V2_Color.Validation.Red.Icon}; `; } }} diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index da372d852..1178318fa 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -1,9 +1,9 @@ import { Button } from "../button"; import { animated } from "react-spring"; -import { v2_ValidationElementAttributes } from "src/v2_color"; +import { V2_ValidationElementAttributes } from "src/v2_color"; import { PropertiesToType } from "src/util/utility-types"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { v2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text"; @@ -19,16 +19,16 @@ interface StyleProps { const getValidationColorAttributes = ( props: any -): PropertiesToType string> => { +): PropertiesToType string> => { switch (props.$type) { case "success": - return v2_Color.Validation.Green; + return V2_Color.Validation.Green; case "warning": - return v2_Color.Validation.Orange; + return V2_Color.Validation.Orange; case "error": - return v2_Color.Validation.Red; + return V2_Color.Validation.Red; case "info": - return v2_Color.Validation.Blue; + return V2_Color.Validation.Blue; default: return; } diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index 930fd7c85..dff52c48f 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { Alert } from "../alert"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -67,10 +67,10 @@ export const Container = styled.div` case "no-border": { if (props.$error) { return css` - border-color: ${v2_Color.Validation.Red.Icon}; + border-color: ${V2_Color.Validation.Red.Icon}; :hover { - box-shadow: 0 0 4px 1px ${v2_Color.Shadow.Red}; + box-shadow: 0 0 4px 1px ${V2_Color.Shadow.Red}; } `; } else if (!props.$disabled) { @@ -78,7 +78,7 @@ export const Container = styled.div` border-color: transparent; :hover { - background: ${v2_Color.Accent.Light[6]}; + background: ${V2_Color.Accent.Light[6]}; } `; } else { @@ -91,36 +91,36 @@ export const Container = styled.div` default: { if (props.$disabled && !props.$selected) { return css` - border-color: ${v2_Color.Neutral[5]}; + border-color: ${V2_Color.Neutral[5]}; `; } else if (props.$disabled && props.$selected) { return css` - border-color: ${v2_Color.Neutral[4]}; + border-color: ${V2_Color.Neutral[4]}; `; } else if (props.$error) { return css` - border-color: ${v2_Color.Validation.Red.Border}; + border-color: ${V2_Color.Validation.Red.Border}; :hover { - box-shadow: 0 0 4px 1px ${v2_Color.Shadow.Red}; + box-shadow: 0 0 4px 1px ${V2_Color.Shadow.Red}; } `; } else if (props.$selected) { return css` - border-color: ${v2_Color.Primary}; + border-color: ${V2_Color.Primary}; :hover { - box-shadow: 0 0 4px 1px ${v2_Color.Shadow.Accent}; + box-shadow: 0 0 4px 1px ${V2_Color.Shadow.Accent}; } `; } else { return css` - background: ${v2_Color.Neutral[8]}; - border-color: ${v2_Color.Neutral[5]}; + background: ${V2_Color.Neutral[8]}; + border-color: ${V2_Color.Neutral[5]}; :hover { - box-shadow: 0 0 4px 1px ${v2_Color.Shadow.Accent}; - border-color: ${v2_Color.Accent.Light[1]}; + box-shadow: 0 0 4px 1px ${V2_Color.Shadow.Accent}; + border-color: ${V2_Color.Accent.Light[1]}; } `; } @@ -175,16 +175,16 @@ export const Label = styled.label` ${v2_MediaQuery.MaxWidth.mobileL} { -webkit-line-clamp: ${(props) => props.$maxLines?.mobile ?? "none"}; } - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${(props) => { if (props.$disabled) { return css` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; } else if (props.$selected) { return css` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; } }} @@ -206,15 +206,15 @@ export const SubLabel = styled.div` ${(props) => { if (props.$disabled) { return css` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; } else if (props.$selected) { return css` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; } else { return css` - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; `; } }} @@ -231,12 +231,12 @@ export const HeaderContainer = styled.div` case "no-border": { if (props.$error) { return css` - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; `; } else if (!props.$disabled) { return css` :hover { - background: ${v2_Color.Accent.Light[6]}; + background: ${V2_Color.Accent.Light[6]}; } `; } else { @@ -246,23 +246,23 @@ export const HeaderContainer = styled.div` default: { if (props.$disabled && !props.$selected) { return css` - background: ${v2_Color.Neutral[6]}; + background: ${V2_Color.Neutral[6]}; `; } else if (props.$disabled && props.$selected) { return css` - background: ${v2_Color.Neutral[6]}; + background: ${V2_Color.Neutral[6]}; `; } else if (props.$error) { return css` - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; `; } else if (props.$selected) { return css` - background: ${v2_Color.Accent.Light[5]}; + background: ${V2_Color.Accent.Light[5]}; `; } else { return css` - background: ${v2_Color.Neutral[8]}; + background: ${V2_Color.Neutral[8]}; `; } } @@ -281,7 +281,7 @@ export const IndicatorLabelContainer = styled.div` color: ${(props) => - props.$disabled ? v2_Color.Neutral[3] : v2_Color.Validation.Red.Icon}; + props.$disabled ? V2_Color.Neutral[3] : V2_Color.Validation.Red.Icon}; white-space: nowrap; ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} height: fit-content; @@ -294,7 +294,7 @@ export const RemoveButton = styled.button` export const ExpandButton = styled.button` color: ${(props) => - props.disabled ? v2_Color.Neutral[3] : v2_Color.Primary}; + props.disabled ? V2_Color.Neutral[3] : V2_Color.Primary}; ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} display: flex; align-items: center; @@ -317,7 +317,7 @@ export const ExpandButton = styled.button` export const ErrorContainer = styled.div` width: 100%; color: ${(props) => - props.$disabled ? v2_Color.Neutral[3] : v2_Color.Primary}; + props.$disabled ? V2_Color.Neutral[3] : V2_Color.Primary}; border: none; background: none; cursor: ${(props) => (props.$disabled ? "not-allowed" : "pointer")}; @@ -338,15 +338,15 @@ export const Children = styled.div` ${(props) => { if (props.$disabled) { return css` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; } else if (props.$selected) { return css` - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; } else { return css` - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; `; } }} @@ -354,14 +354,14 @@ export const Children = styled.div` export const ErrorText = styled(V2_Text.BodySmall)` color: ${(props) => - props.$disabled ? v2_Color.Neutral[3] : v2_Color.Validation.Red.Text}; + props.$disabled ? V2_Color.Neutral[3] : V2_Color.Validation.Red.Text}; `; export const ErrorList = styled(TextList.Ul)` li { color: ${(props) => props.$disabled - ? v2_Color.Neutral[3] - : v2_Color.Validation.Red.Text}; + ? V2_Color.Neutral[3] + : V2_Color.Validation.Red.Text}; } `; diff --git a/src/tooltip/tooltip.styles.tsx b/src/tooltip/tooltip.styles.tsx index 5302c43ce..396b3e49f 100644 --- a/src/tooltip/tooltip.styles.tsx +++ b/src/tooltip/tooltip.styles.tsx @@ -1,6 +1,6 @@ import { Card } from "src/card"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { Transition } from "../transition"; import { TooltipPosition } from "./types"; @@ -143,7 +143,7 @@ export const Arrow = styled.div` left: calc(50% - 10px); border-style: solid; border-width: 16px 8px 0 8px; - border-color: ${v2_Color.Neutral[8]} transparent + border-color: ${V2_Color.Neutral[8]} transparent transparent transparent; } `; @@ -174,7 +174,7 @@ export const Arrow = styled.div` right: -10%; border-style: solid; border-width: 8px 16px 8px 0; - border-color: transparent ${v2_Color.Neutral[8]} + border-color: transparent ${V2_Color.Neutral[8]} transparent transparent; } `; @@ -206,7 +206,7 @@ export const Arrow = styled.div` border-style: solid; border-width: 8px 0 8px 16px; border-color: transparent transparent transparent - ${v2_Color.Neutral[8]}; + ${V2_Color.Neutral[8]}; } `; case "bottom": @@ -237,7 +237,7 @@ export const Arrow = styled.div` border-style: solid; border-width: 0 8px 16px 8px; border-color: transparent transparent - ${v2_Color.Neutral[8]} transparent; + ${V2_Color.Neutral[8]} transparent; } `; } diff --git a/src/uneditable-section/section-item.styles.tsx b/src/uneditable-section/section-item.styles.tsx index c312624d9..7ff71dccd 100644 --- a/src/uneditable-section/section-item.styles.tsx +++ b/src/uneditable-section/section-item.styles.tsx @@ -1,6 +1,6 @@ import { ExclamationTriangleIcon } from "@lifesg/react-icons/exclamation-triangle"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; import { V2_TextStyleHelper } from "../v2_text"; @@ -50,7 +50,7 @@ export const IconContainer = styled.div` height: 100%; align-items: center; justify-content: center; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; margin-left: 0.5rem; svg { @@ -61,7 +61,7 @@ export const IconContainer = styled.div` export const Clickable = styled.button` ${V2_TextStyleHelper.getTextStyle("Body", "regular")} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; border: none; background: transparent; padding: 0; @@ -81,7 +81,7 @@ export const Clickable = styled.button` // LOADING DISPLAY // ----------------------------------------------------------------------------- export const LoadingLabel = styled.span` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; export const Spinner = styled(ComponentLoadingSpinner)` @@ -90,7 +90,7 @@ export const Spinner = styled(ComponentLoadingSpinner)` #inner2, #inner3, #inner4 { - border-color: ${v2_Color.Neutral[3]} transparent transparent transparent; + border-color: ${V2_Color.Neutral[3]} transparent transparent transparent; } `; @@ -98,19 +98,19 @@ export const Spinner = styled(ComponentLoadingSpinner)` // ERROR DISPLAY // ----------------------------------------------------------------------------- export const ErrorIcon = styled(ExclamationTriangleIcon)` - color: ${v2_Color.Validation.Orange.Icon}; + color: ${V2_Color.Validation.Orange.Icon}; margin-right: 0.5rem; height: 1.125rem; width: 1.125rem; `; export const ErrorLabel = styled.span` - color: ${v2_Color.Validation.Orange.Text}; + color: ${V2_Color.Validation.Orange.Text}; `; export const TryAgainLabel = styled.span` ${V2_TextStyleHelper.getTextStyle("Body", "semibold")} - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; text-decoration: underline; margin-left: 0.5rem; `; diff --git a/src/uneditable-section/uneditable-section.styles.tsx b/src/uneditable-section/uneditable-section.styles.tsx index d4a26010d..0a69e34c1 100644 --- a/src/uneditable-section/uneditable-section.styles.tsx +++ b/src/uneditable-section/uneditable-section.styles.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { v2_Layout } from "../v2_layout"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { v2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; @@ -16,7 +16,7 @@ interface WrapperStyleProps { // ============================================================================= export const Wrapper = styled(v2_Layout.V2_Content)` background: ${({ $background }) => - $background ? v2_Color.Neutral[7] : "transparent"}; + $background ? V2_Color.Neutral[7] : "transparent"}; padding-top: 2rem; padding-bottom: 2rem; `; diff --git a/src/unit-number/unit-number-input.style.tsx b/src/unit-number/unit-number-input.style.tsx index f4f46d173..de5a34dbf 100644 --- a/src/unit-number/unit-number-input.style.tsx +++ b/src/unit-number/unit-number-input.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color"; +import { V2_Color } from "../v2_color"; import { AddOnContainer } from "../input-group/input-group.style"; import { Input } from "../input/input"; import { V2_Text } from "../v2_text/text"; @@ -62,7 +62,7 @@ export const UnitNumberDivider = styled(V2_Text.Body)` ${(props) => { if (props.$inactive) { return css` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; } }} @@ -76,7 +76,7 @@ export const ReadOnlyLabel = styled(V2_Text.Body)` ${(props) => { if (props.$inactive) { return css` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; } }} diff --git a/src/v2_color/color.ts b/src/v2_color/color.ts index 2d3ab9bcd..ca9af22b0 100644 --- a/src/v2_color/color.ts +++ b/src/v2_color/color.ts @@ -1,10 +1,10 @@ import { getThemeColors } from "../theme/color-theme-helper"; import { PropertiesToType } from "../util/utility-types"; -import { v2_ColorSet } from "./types"; +import { V2_ColorSet } from "./types"; /** @deprecated */ -export const v2_Color: PropertiesToType< - v2_ColorSet, +export const V2_Color: PropertiesToType< + V2_ColorSet, ReturnType > = { Brand: { diff --git a/src/v2_color/types.ts b/src/v2_color/types.ts index 5ad28db36..f3274f09b 100644 --- a/src/v2_color/types.ts +++ b/src/v2_color/types.ts @@ -1,5 +1,5 @@ /** @deprecated */ -export interface v2_ValidationElementAttributes { +export interface V2_ValidationElementAttributes { Text: string; Icon?: string | undefined; Border?: string | undefined; @@ -8,15 +8,15 @@ export interface v2_ValidationElementAttributes { } /** @deprecated */ -export interface v2_ValidationTypes { - Green: v2_ValidationElementAttributes; - Orange: v2_ValidationElementAttributes; - Red: v2_ValidationElementAttributes; - Blue: v2_ValidationElementAttributes; +export interface V2_ValidationTypes { + Green: V2_ValidationElementAttributes; + Orange: V2_ValidationElementAttributes; + Red: V2_ValidationElementAttributes; + Blue: V2_ValidationElementAttributes; } /** @deprecated */ -export interface v2_ColorSet { +export interface V2_ColorSet { Brand: { 1: string; 2: string; @@ -53,7 +53,7 @@ export interface v2_ColorSet { 7: string; 8: string; }; - Validation: v2_ValidationTypes; + Validation: V2_ValidationTypes; Shadow: { Accent: string; Red: string; @@ -62,4 +62,4 @@ export interface v2_ColorSet { } /** @deprecated */ -export type v2_ColorSetOptions = Partial; +export type V2_ColorSetOptions = Partial; diff --git a/src/v2_text/text.tsx b/src/v2_text/text.tsx index 2eb91bcf3..a21f99472 100644 --- a/src/v2_text/text.tsx +++ b/src/v2_text/text.tsx @@ -1,6 +1,6 @@ import { ExternalIcon } from "@lifesg/react-icons/external"; import styled, { css } from "styled-components"; -import { v2_Color } from "../v2_color/color"; +import { V2_Color } from "../v2_color/color"; import { V2_TextStyleHelper } from "./helper"; import { V2_TextLinkProps, V2_TextLinkStyleProps, V2_TextProps } from "./types"; @@ -14,7 +14,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -32,7 +32,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -50,7 +50,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -68,7 +68,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -86,7 +86,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -104,7 +104,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -122,7 +122,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -140,7 +140,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -158,7 +158,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -176,7 +176,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -194,7 +194,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -212,7 +212,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -230,7 +230,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -248,7 +248,7 @@ export namespace V2_Text { props.weight, props.paragraph )} - color: ${v2_Color.Neutral[1]}; + color: ${V2_Color.Neutral[1]}; ${V2_TextStyleHelper.getDisplayStyle( props.inline, props.paragraph, @@ -274,16 +274,16 @@ const HyperlinkBase = styled.a` ${(props) => { return css` ${V2_TextStyleHelper.getTextStyle(props.textStyle, props.weight)} - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; text-decoration: none; :hover, :active, :focus { - color: ${v2_Color.Secondary}; + color: ${V2_Color.Secondary}; svg { - color: ${v2_Color.Secondary}; + color: ${V2_Color.Secondary}; } } `; diff --git a/stories/animation/2-animations-customisable.stories.tsx b/stories/animation/2-animations-customisable.stories.tsx index b81207898..803ca9b36 100644 --- a/stories/animation/2-animations-customisable.stories.tsx +++ b/stories/animation/2-animations-customisable.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { LoadingDotsSpinner } from "src/animations"; -import { v2_Color } from "src/v2_color"; +import { V2_Color } from "src/v2_color"; import { BaseTheme } from "src/theme"; import { AnimationDisplay, AnimationItem } from "./doc-elements"; @@ -24,7 +24,7 @@ export const CustomLoadingDotsSpinner: StoryObj = { diff --git a/stories/divider/divider.stories.tsx b/stories/divider/divider.stories.tsx index af142421f..98436ed72 100644 --- a/stories/divider/divider.stories.tsx +++ b/stories/divider/divider.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { v2_Color } from "src/v2_color"; +import { V2_Color } from "src/v2_color"; import { Divider } from "src/divider"; import { v2_Layout } from "src/v2_layout"; import { DisplayText, Wrapper } from "./doc-elements"; @@ -84,13 +84,13 @@ export const Customisations: StoryObj = { Changing the thickness diff --git a/stories/filter/doc-elements.tsx b/stories/filter/doc-elements.tsx index 4aa2744a3..da98aa4c2 100644 --- a/stories/filter/doc-elements.tsx +++ b/stories/filter/doc-elements.tsx @@ -2,7 +2,7 @@ import { MagnifierIcon } from "@lifesg/react-icons/magnifier"; import isEmpty from "lodash/isEmpty"; import React, { useState } from "react"; import styled from "styled-components"; -import { v2_Color } from "../../src/v2_color"; +import { V2_Color } from "../../src/v2_color"; import { Filter, Mode } from "../../src/filter"; import { Form } from "../../src/form"; import { V2_Text } from "../../src/v2_text"; @@ -14,7 +14,7 @@ interface Props { } const SearchIcon = styled(MagnifierIcon)` - color: ${v2_Color.Neutral[3]}; + color: ${V2_Color.Neutral[3]}; `; export const StyledFilterItem = styled(Filter.Item)<{ $mode: Mode }>` diff --git a/stories/form/form-range-select/doc-elements.tsx b/stories/form/form-range-select/doc-elements.tsx index 645569733..34a58a8be 100644 --- a/stories/form/form-range-select/doc-elements.tsx +++ b/stories/form/form-range-select/doc-elements.tsx @@ -1,6 +1,6 @@ import { TickIcon } from "@lifesg/react-icons/tick"; import styled from "styled-components"; -import { v2_Color } from "../../../src/v2_color"; +import { V2_Color } from "../../../src/v2_color"; export const ImageWrapper = styled.div` display: flex; @@ -25,5 +25,5 @@ export const ImageWrapperSelected = styled.div` export const Checkmark = styled(TickIcon)` height: 32px; width: 32px; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; diff --git a/stories/form/form-select/doc-elements.tsx b/stories/form/form-select/doc-elements.tsx index 2d47efc22..98d5b89c4 100644 --- a/stories/form/form-select/doc-elements.tsx +++ b/stories/form/form-select/doc-elements.tsx @@ -1,6 +1,6 @@ import { TickIcon } from "@lifesg/react-icons/tick"; import styled from "styled-components"; -import { v2_Color } from "../../../src/v2_color"; +import { V2_Color } from "../../../src/v2_color"; export const ImageWrapper = styled.div` display: flex; @@ -25,11 +25,11 @@ export const ImageWrapperSelected = styled.div` export const Checkmark = styled(TickIcon)` height: 32px; width: 32px; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; `; export const CustomCTAContainer = styled.div` margin: 0 0.5rem; - border-top: 1px solid ${v2_Color.Neutral[4]}; + border-top: 1px solid ${V2_Color.Neutral[4]}; padding: 1rem 0.5rem; `; diff --git a/stories/layout/doc-elements.tsx b/stories/layout/doc-elements.tsx index 346ff7ca8..aec2ce05f 100644 --- a/stories/layout/doc-elements.tsx +++ b/stories/layout/doc-elements.tsx @@ -1,6 +1,6 @@ import React from "react"; import styled, { css } from "styled-components"; -import { v2_Color } from "../../src/v2_color"; +import { V2_Color } from "../../src/v2_color"; import { v2_Layout } from "../../src/v2_layout"; import { V2_Text } from "../../src/v2_text"; @@ -26,8 +26,8 @@ const LWrapper = styled.div` width: max-content; margin: 0 auto; padding: 5px; - background: ${v2_Color.Neutral[8]}; - border: 1px solid ${v2_Color.Brand[3]}; + background: ${V2_Color.Neutral[8]}; + border: 1px solid ${V2_Color.Brand[3]}; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; z-index: 2; @@ -68,14 +68,14 @@ const PWrapper = styled.div` }} width: 1.5rem; height: 100%; - background: ${v2_Color.Brand[3]}; + background: ${V2_Color.Brand[3]}; `; // eslint-disable-next-line @typescript-eslint/no-explicit-any const Marker = styled.div` position: absolute; top: -1rem; - border: 1px solid ${v2_Color.Brand[3]}; + border: 1px solid ${V2_Color.Brand[3]}; ${(props) => { if (props.direction === "left") { return css` diff --git a/stories/markup/markup.stories.tsx b/stories/markup/markup.stories.tsx index bd2d32738..258a53779 100644 --- a/stories/markup/markup.stories.tsx +++ b/stories/markup/markup.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { v2_Color } from "src/v2_color"; +import { V2_Color } from "src/v2_color"; import { Markup } from "src/markup"; type Component = typeof Markup; @@ -13,7 +13,7 @@ export default meta; export const Default: StoryObj = { render: () => ( - +

    You can use bold text to emphasise important information diff --git a/stories/masonry/doc-elements.tsx b/stories/masonry/doc-elements.tsx index 63e2b8552..4a97ba8fe 100644 --- a/stories/masonry/doc-elements.tsx +++ b/stories/masonry/doc-elements.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Color } from "../../src/v2_color"; +import { V2_Color } from "../../src/v2_color"; import { V2_TextStyleHelper } from "../../src/v2_text"; export const DemoContainer = styled.div` @@ -7,7 +7,7 @@ export const DemoContainer = styled.div` width: 100%; justify-content: center; align-items: center; - background: ${v2_Color.Accent.Light[3]}; + background: ${V2_Color.Accent.Light[3]}; height: 6rem; ${V2_TextStyleHelper.getTextStyle("Body", "semibold")} diff --git a/stories/navbar/doc-elements.tsx b/stories/navbar/doc-elements.tsx index b71c27e2a..dcd63788a 100644 --- a/stories/navbar/doc-elements.tsx +++ b/stories/navbar/doc-elements.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { InboxIcon } from "@lifesg/react-icons/inbox"; import { V2_Text } from "../../src/v2_text/text"; -import { v2_Color } from "../../src/v2_color"; +import { V2_Color } from "../../src/v2_color"; import { Button } from "../../src/button"; import React from "react"; @@ -25,7 +25,7 @@ export const DesktopCustomComponentWrapper = styled.div` `; export const SubLabel = styled(V2_Text.H6)` - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; `; // ============================================================================= diff --git a/stories/popover/doc-elements.tsx b/stories/popover/doc-elements.tsx index 1d2a4894f..4330ade4d 100644 --- a/stories/popover/doc-elements.tsx +++ b/stories/popover/doc-elements.tsx @@ -1,6 +1,6 @@ import React, { useState } from "react"; import styled from "styled-components"; -import { v2_Color } from "../../src/v2_color"; +import { V2_Color } from "../../src/v2_color"; import { v2_MediaQuery } from "../../src/v2_media"; import { withPopover } from "../../src/popover"; import { V2_Text } from "../../src/v2_text"; @@ -37,7 +37,7 @@ export const Item = styled.div` export const CustomDiv = styled.div` padding: 1rem; - background: ${v2_Color.Neutral[6]}; + background: ${V2_Color.Neutral[6]}; border-radius: 4px; `; diff --git a/stories/storybook-common/api-table/api-table-components.tsx b/stories/storybook-common/api-table/api-table-components.tsx index 3aad4d51b..9a9041303 100644 --- a/stories/storybook-common/api-table/api-table-components.tsx +++ b/stories/storybook-common/api-table/api-table-components.tsx @@ -1,6 +1,6 @@ import React from "react"; import styled, { css } from "styled-components"; -import { v2_Color } from "../../../src/v2_color"; +import { V2_Color } from "../../../src/v2_color"; import { DefaultColProps, DescriptionColProps } from "./types"; // ============================================================================= @@ -33,7 +33,7 @@ const StyledTable = styled.table` line-height: 1.5; a { - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; cursor: pointer; text-decoration: none; } @@ -77,20 +77,20 @@ const StyledTable = styled.table` tbody { tr { border: none; - border-bottom: 1px solid ${v2_Color.Neutral[6]}; + border-bottom: 1px solid ${V2_Color.Neutral[6]}; :nth-child(even) { - background: ${v2_Color.Neutral[7]}; + background: ${V2_Color.Neutral[7]}; } } } thead { tr { - border-bottom: 2px solid ${v2_Color.Primary}; + border-bottom: 2px solid ${V2_Color.Primary}; } th { - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; } } `; @@ -110,7 +110,7 @@ export const Section = ({ children }: SectionProps) => ( ); const SectionRow = styled.tr` - background: ${v2_Color.Neutral[3]} !important; + background: ${V2_Color.Neutral[3]} !important; color: white; font-weight: bold; `; @@ -143,7 +143,7 @@ const Label = styled.td` ${(props) => { if (props.$isFunction) { return css` - color: ${v2_Color.PrimaryDark}; + color: ${V2_Color.PrimaryDark}; `; } }} @@ -153,13 +153,13 @@ const Mandatory = styled.td` font-weight: bold; :after { content: " *"; - color: ${v2_Color.Validation.Red.Text}; + color: ${V2_Color.Validation.Red.Text}; } ${(props) => { if (props.$isFunction) { return css` - color: ${v2_Color.PrimaryDark}; + color: ${V2_Color.PrimaryDark}; `; } }} diff --git a/stories/storybook-common/tabs.tsx b/stories/storybook-common/tabs.tsx index c4a58fa12..7b8add89c 100644 --- a/stories/storybook-common/tabs.tsx +++ b/stories/storybook-common/tabs.tsx @@ -1,7 +1,7 @@ import React from "react"; import { useState } from "react"; import styled, { css } from "styled-components"; -import { v2_Color } from "../../src/v2_color"; +import { V2_Color } from "../../src/v2_color"; import { V2_Text, V2_TextStyleHelper } from "../../src/v2_text"; export interface TabAttribute { @@ -62,8 +62,8 @@ const Wrapper = styled.div` flex-direction: column; width: 100%; border-radius: 4px; - background: ${v2_Color.Neutral[8]}; - border: 1px solid ${v2_Color.Neutral[6]}; + background: ${V2_Color.Neutral[8]}; + border: 1px solid ${V2_Color.Neutral[6]}; box-shadow: rgb(0 0 0 / 10%) 0 1px 3px 0; padding: 0 0 1rem; `; @@ -89,7 +89,7 @@ const Button = styled.button` bottom: -0.5rem; left: 0; width: 100%; - background: ${v2_Color.Primary(props)}; + background: ${V2_Color.Primary(props)}; height: 4px; } `; diff --git a/stories/storybook-common/text.style.tsx b/stories/storybook-common/text.style.tsx index ae9890dc5..ed83a8904 100644 --- a/stories/storybook-common/text.style.tsx +++ b/stories/storybook-common/text.style.tsx @@ -2,7 +2,7 @@ import { LinkIcon as DSLinkIcon } from "@lifesg/react-icons/link"; import { Unstyled } from "@storybook/blocks"; import React from "react"; import styled from "styled-components"; -import { v2_Color } from "../../src/v2_color"; +import { V2_Color } from "../../src/v2_color"; import { V2_Text, V2_TextProps, V2_TextStyleHelper } from "../../src/v2_text"; interface HeadingProps { @@ -44,10 +44,10 @@ const Link = styled.a` font-size: 1.5rem; margin-left: -1.5rem; padding-right: 0.5rem; - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; :hover { - color: ${v2_Color.Neutral[4]}; + color: ${V2_Color.Neutral[4]}; } `; @@ -57,7 +57,7 @@ const LinkIcon = styled(DSLinkIcon)` height: 1rem; width: 1rem; vertical-align: baseline; - color: ${v2_Color.Primary}; + color: ${V2_Color.Primary}; transform: rotate(-45deg); `; diff --git a/stories/text/doc-elements.tsx b/stories/text/doc-elements.tsx index cbd8a1cdb..c3ebecce5 100644 --- a/stories/text/doc-elements.tsx +++ b/stories/text/doc-elements.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_TextStyleHelper } from "../../src"; -import { v2_Color } from "../../src/v2_color/color"; +import { V2_Color } from "../../src/v2_color/color"; import { V2_Text } from "../../src/v2_text/text"; // ============================================================================= @@ -72,7 +72,7 @@ interface LabelContainerStyleProps { export const DisplayContainer = styled.table` tr { :not(:last-child) { - border-bottom: 1px solid ${v2_Color.Neutral[5]}; + border-bottom: 1px solid ${V2_Color.Neutral[5]}; } } @@ -109,13 +109,13 @@ const LabelContainer = styled.div` let color; switch (props.type) { case "display": - color = v2_Color.Secondary(props); + color = V2_Color.Secondary(props); break; case "header": - color = v2_Color.Accent.Light[1](props); + color = V2_Color.Accent.Light[1](props); break; default: - color = v2_Color.Accent.Dark[2](props); + color = V2_Color.Accent.Dark[2](props); break; } @@ -126,7 +126,7 @@ const LabelContainer = styled.div` `; const Label = styled(V2_Text.BodySmall)` - color: ${v2_Color.Neutral[8]}; + color: ${V2_Color.Neutral[8]}; margin: 0; `; diff --git a/tests/alert/alert.spec.tsx b/tests/alert/alert.spec.tsx index 9cb556e2e..ad949457d 100644 --- a/tests/alert/alert.spec.tsx +++ b/tests/alert/alert.spec.tsx @@ -1,6 +1,6 @@ import { render, screen } from "@testing-library/react"; import { Alert } from "../../src"; -import { v2_Color } from "../../src"; +import { V2_Color } from "../../src"; import { StarIcon } from "@lifesg/react-icons/star"; // ============================================================================= @@ -25,11 +25,11 @@ describe("Alert", () => { describe("type", () => { it.each` type | backgroundColor | borderColor - ${"success"} | ${v2_Color.Validation.Green.Background} | ${v2_Color.Validation.Green.Border} - ${"warning"} | ${v2_Color.Validation.Orange.Background} | ${v2_Color.Validation.Orange.Border} - ${"error"} | ${v2_Color.Validation.Red.Background} | ${v2_Color.Validation.Red.Border} - ${"info"} | ${v2_Color.Validation.Blue.Background} | ${v2_Color.Validation.Blue.Border} - ${"description"} | ${v2_Color.Neutral[7]} | ${v2_Color.Neutral[4]} + ${"success"} | ${V2_Color.Validation.Green.Background} | ${V2_Color.Validation.Green.Border} + ${"warning"} | ${V2_Color.Validation.Orange.Background} | ${V2_Color.Validation.Orange.Border} + ${"error"} | ${V2_Color.Validation.Red.Background} | ${V2_Color.Validation.Red.Border} + ${"info"} | ${V2_Color.Validation.Blue.Background} | ${V2_Color.Validation.Blue.Border} + ${"description"} | ${V2_Color.Neutral[7]} | ${V2_Color.Neutral[4]} `( "should render background $backgroundColor with border $borderColor for $type type", ({ type, backgroundColor, borderColor }) => { From 381c91e1fdc73e3585870b2ec38efb4fba71d19d Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 6 Aug 2024 15:33:41 +0800 Subject: [PATCH 0324/1949] [CCUBE-1518][MAHI]Deprecate media component to V2 --- src/accordion/accordion-item.style.tsx | 6 ++-- src/accordion/accordion.style.tsx | 8 ++--- src/box-container/box-container.styles.tsx | 12 +++---- src/box-container/box-container.tsx | 4 +-- src/breadcrumb/breadcrumb.style.tsx | 10 +++--- src/button/button.style.tsx | 8 ++--- src/countdown-timer/countdown-timer.style.tsx | 8 ++--- src/date-range-input/date-range-input.tsx | 4 +-- src/drawer/drawer.styles.tsx | 8 ++--- src/e-signature/e-signature.styles.ts | 12 +++---- src/e-signature/e-signature.tsx | 4 +-- src/error-display/error-display.style.tsx | 10 +++--- src/file-upload/dropzone.styles.tsx | 4 +-- src/file-upload/file-item-edit.styles.tsx | 12 +++---- .../file-list-item-thumbnail.tsx | 4 +-- .../file-list-item/file-list-item.styles.tsx | 20 ++++++------ src/file-upload/file-upload.styles.tsx | 8 ++--- .../addons/filter-item-checkbox.styles.tsx | 10 +++--- src/filter/filter-item.styles.tsx | 10 +++--- src/filter/filter.styles.tsx | 8 ++--- src/footer/footer-download-app.style.tsx | 6 ++-- src/footer/footer.style.tsx | 32 +++++++++---------- .../fullscreen-image-carousel.style.tsx | 16 +++++----- src/image-button/image-button.style.tsx | 4 +-- src/masonry/masonry.style.tsx | 10 +++--- src/masthead/masthead.style.tsx | 4 +-- src/modal/modal-box.styles.tsx | 6 ++-- src/modal/modal.styles.tsx | 4 +-- src/navbar/drawer.styles.tsx | 8 ++--- src/navbar/menu.styles.tsx | 8 ++--- src/navbar/navbar-action-buttons.styles.tsx | 22 ++++++------- src/navbar/navbar-items.styles.tsx | 12 +++---- src/navbar/navbar.styles.tsx | 16 +++++----- src/otp-input/otp-input.styles.tsx | 4 +-- src/pagination/pagination.styles.tsx | 6 ++-- src/popover-v2/popover-trigger.tsx | 4 +-- src/popover-v2/popover.styles.tsx | 4 +-- src/popover/popover.styles.tsx | 4 +-- .../progress-indicator.style.tsx | 6 ++-- src/progress-indicator/progress-indicator.tsx | 4 +-- .../dropdown-list-v2/dropdown-list.styles.tsx | 4 +-- .../dropdown-list/dropdown-list.styles.tsx | 4 +-- .../fade-wrapper/fade-wrapper.style.tsx | 6 ++-- .../calendar-dropdown.style.tsx | 4 +-- .../nested-dropdown-list.styles.tsx | 4 +-- .../timepicker-dropdown.styles.tsx | 26 +++++++-------- src/sidenav/sidenav.styles.tsx | 6 ++-- .../smart-app-banner.styles.ts | 6 ++-- src/spec/media-spec.ts | 4 +-- src/tab/tab-link-chain.style.tsx | 4 +-- src/tab/tab-link-chain.tsx | 6 ++-- src/tag/tag.style.ts | 4 +-- src/text-list/text-list.styles.tsx | 4 +-- .../time-slot-bar-week.style.tsx | 4 +-- .../time-slot-week-view.styles.tsx | 4 +-- src/timeline/timeline.style.tsx | 8 ++--- src/toast/toast.styles.tsx | 10 +++--- src/toggle/toggle.styles.tsx | 6 ++-- src/tooltip/tooltip.styles.tsx | 10 +++--- .../section-item.styles.tsx | 6 ++-- .../uneditable-section.styles.tsx | 6 ++-- src/v2_layout/col-div.style.tsx | 6 ++-- src/v2_layout/container.tsx | 12 +++---- src/v2_layout/section.tsx | 4 +-- src/v2_media/media.ts | 12 +++---- src/v2_media/types.ts | 4 +-- stories/animation/doc-elements.tsx | 4 +-- stories/countdown-timer/doc-elements.tsx | 6 ++-- stories/image-button/doc-elements.tsx | 6 ++-- stories/popover/doc-elements.tsx | 6 ++-- stories/storybook-common/story-container.tsx | 10 +++--- stories/text-list/doc-elements.tsx | 4 +-- stories/text/collection-doc-elements.tsx | 8 ++--- stories/time-slot-bar-week/doc-elements.tsx | 4 +-- stories/time-slot-week-view/doc-elements.tsx | 4 +-- stories/toggle/doc-elements.tsx | 6 ++-- stories/tooltip/doc-elements.tsx | 6 ++-- 77 files changed, 294 insertions(+), 294 deletions(-) diff --git a/src/accordion/accordion-item.style.tsx b/src/accordion/accordion-item.style.tsx index a89afc038..6ec255728 100644 --- a/src/accordion/accordion-item.style.tsx +++ b/src/accordion/accordion-item.style.tsx @@ -2,7 +2,7 @@ import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; import { animated } from "react-spring"; import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text/text"; import { Transition } from "../transition"; @@ -23,7 +23,7 @@ export const Container = styled.div` border-top: 1px solid ${V2_Color.Neutral[6]}; padding: ${(props) => (props.$isCollapsed ? "0 0 1rem" : "0")}; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { padding: ${(props) => props.$isCollapsed ? ".25rem 0 1.05rem" : "0.5rem 0"}; } @@ -77,7 +77,7 @@ export const DescriptionContainer = styled.div` display: inline-block; padding-right: 4rem; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { padding-right: 0; } `; diff --git a/src/accordion/accordion.style.tsx b/src/accordion/accordion.style.tsx index 91a444730..5c9b3b7e1 100644 --- a/src/accordion/accordion.style.tsx +++ b/src/accordion/accordion.style.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { Button } from "../button"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Color } from "../v2_color"; import { V2_Text } from "../v2_text/text"; import { TitleStyleProps, TitleWrapperStyleProps } from "./types"; @@ -19,7 +19,7 @@ export const TitleWrapper = styled.div` align-items: ${(props) => (props.$hasTitle ? "center" : "flex-end")}; padding-bottom: 1rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { justify-content: flex-end; } `; @@ -28,14 +28,14 @@ export const Title = styled(V2_Text.H2)` display: flex; align-self: flex-start; flex: 1; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { text-align: left; } ${(props) => { if (!props.$showInMobile) { return css` - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { display: none; visibility: hidden; } diff --git a/src/box-container/box-container.styles.tsx b/src/box-container/box-container.styles.tsx index 14d8cdd92..817fa83da 100644 --- a/src/box-container/box-container.styles.tsx +++ b/src/box-container/box-container.styles.tsx @@ -3,7 +3,7 @@ import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circl import { animated } from "react-spring"; import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text/text"; import { Transition } from "../transition"; import { BoxContainerDisplayState } from "./types"; @@ -52,7 +52,7 @@ export const Header = styled.div` align-items: center; justify-content: space-between; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { padding: 1rem 1.25rem; display: block; } @@ -85,7 +85,7 @@ export const LabelIcon = styled.span` align-items: center; margin-right: 2.5rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { margin-right: 0rem; } @@ -113,14 +113,14 @@ export const AlertIcon = styled(ExclamationCircleFillIcon)` export const CallToActionContainer = styled.div` display: flex; margin-left: auto; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: column; } ${(props) => { if (props.$collapsible) { return css` margin-right: 2.5rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { margin-right: 0rem; margin-top: 1rem; } @@ -138,7 +138,7 @@ export const Handle = styled.button` display: flex; align-items: center; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { margin: -1rem -1rem -1rem 0; margin-left: auto; } diff --git a/src/box-container/box-container.tsx b/src/box-container/box-container.tsx index a502c2748..76a55f927 100644 --- a/src/box-container/box-container.tsx +++ b/src/box-container/box-container.tsx @@ -2,7 +2,7 @@ import { useState } from "react"; import { useResizeDetector } from "react-resize-detector"; import { useMediaQuery } from "react-responsive"; import { useSpring } from "react-spring"; -import { v2_MediaWidths } from "../v2_media"; +import { V2_MediaWidths } from "../v2_media"; import { AlertIcon, CallToActionContainer, @@ -40,7 +40,7 @@ export const BoxContainer = ({ const resizeDetector = useResizeDetector(); const childRef = resizeDetector.ref; const isMobile = useMediaQuery({ - maxWidth: v2_MediaWidths.mobileL, + maxWidth: V2_MediaWidths.mobileL, }); // ============================================================================= diff --git a/src/breadcrumb/breadcrumb.style.tsx b/src/breadcrumb/breadcrumb.style.tsx index d7f2b50dd..76c9a6d6d 100644 --- a/src/breadcrumb/breadcrumb.style.tsx +++ b/src/breadcrumb/breadcrumb.style.tsx @@ -1,7 +1,7 @@ import { ChevronRightIcon } from "@lifesg/react-icons/chevron-right"; import styled from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text/text"; // ============================================================================= @@ -27,11 +27,11 @@ export const Wrapper = styled.div` margin: 2rem 0; - ${v2_MediaQuery.MaxWidth.desktopM} { + ${V2_MediaQuery.MaxWidth.desktopM} { margin: 1.5rem 0; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin: 1rem 0; } `; @@ -50,7 +50,7 @@ export const Content = styled.ul` display: none; /* Chrome/Safari/Webkit */ } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { flex-wrap: nowrap; } `; @@ -87,7 +87,7 @@ export const Fade = styled.div` } return ` - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { ${positionStyle} } `; diff --git a/src/button/button.style.tsx b/src/button/button.style.tsx index f5b9d35e6..1217e70e9 100644 --- a/src/button/button.style.tsx +++ b/src/button/button.style.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color/color"; -import { v2_MediaQuery } from "../v2_media/media"; +import { V2_MediaQuery } from "../v2_media/media"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; import { V2_TextStyleHelper } from "../v2_text"; import { MainStyleProps } from "./types"; @@ -88,7 +88,7 @@ export const Main = styled.button` : V2_Color.Primary}; border: 1px solid transparent; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; } @@ -107,7 +107,7 @@ export const Main = styled.button` height: 2.5rem; ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { height: auto; } `; @@ -116,7 +116,7 @@ export const Main = styled.button` height: 3rem; ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { height: auto; } `; diff --git a/src/countdown-timer/countdown-timer.style.tsx b/src/countdown-timer/countdown-timer.style.tsx index ebca3e02c..59b34409d 100644 --- a/src/countdown-timer/countdown-timer.style.tsx +++ b/src/countdown-timer/countdown-timer.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; import { V2_TextStyleHelper } from "../v2_text"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; // ============================================================================= // STYLE TYPES @@ -33,7 +33,7 @@ export const BaseCountdown = styled.div` border: 1px solid ${V2_Color.Primary}; background-color: ${V2_Color.Neutral[8]}; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { padding: 1rem; } @@ -66,7 +66,7 @@ export const FixedCountdown = styled(BaseCountdown)` ? V2_Color.Validation.Red.Border : V2_Color.Accent.Light[2]}; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { left: 0; right: 0; border-radius: 0; @@ -82,7 +82,7 @@ export const TimeLeft = styled.div` margin-left: 0.5rem; margin-right: 1.5rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { margin-right: 3rem; } `; diff --git a/src/date-range-input/date-range-input.tsx b/src/date-range-input/date-range-input.tsx index 722b00d1f..5fc6833fe 100644 --- a/src/date-range-input/date-range-input.tsx +++ b/src/date-range-input/date-range-input.tsx @@ -1,7 +1,7 @@ import dayjs from "dayjs"; import { useEffect, useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; -import { v2_MediaWidths } from "../v2_media"; +import { V2_MediaWidths } from "../v2_media"; import { DropdownRenderProps, ElementWithDropdown, @@ -189,7 +189,7 @@ export const DateRangeInput = ({ const startInputRef = useRef(); const endInputRef = useRef(); const isMobile = useMediaQuery({ - maxWidth: v2_MediaWidths.mobileL, + maxWidth: V2_MediaWidths.mobileL, }); const shouldWrap = useContainerQuery({ maxWidth: MOBILE_WRAP_WIDTH, diff --git a/src/drawer/drawer.styles.tsx b/src/drawer/drawer.styles.tsx index 0b14c9fe7..2eb578604 100644 --- a/src/drawer/drawer.styles.tsx +++ b/src/drawer/drawer.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text"; @@ -52,12 +52,12 @@ export const Container = styled.div` border-bottom-left-radius: 8px; overflow: hidden; - ${v2_MediaQuery.MaxWidth.desktopL} { + ${V2_MediaQuery.MaxWidth.desktopL} { width: 50%; min-width: 700px; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { width: 100%; min-width: unset; border-top-left-radius: 0; @@ -76,7 +76,7 @@ export const Header = styled.div` background-color: ${V2_Color.Neutral[8]}; border-bottom: 1px solid ${V2_Color.Neutral[5]}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { gap: 0.5rem; padding: 2rem 1.25rem 1rem; } diff --git a/src/e-signature/e-signature.styles.ts b/src/e-signature/e-signature.styles.ts index 5da5e3c43..ac23ae7f3 100644 --- a/src/e-signature/e-signature.styles.ts +++ b/src/e-signature/e-signature.styles.ts @@ -4,14 +4,14 @@ import { V2_Color } from "../v2_color"; import { IconButton } from "../icon-button"; import { Modal } from "../modal"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; -import { v2_MediaQuery, v2_MediaWidths } from "../v2_media"; +import { V2_MediaQuery, V2_MediaWidths } from "../v2_media"; // ============================================================================= // CUSTOM MEDIA QUERIES // ============================================================================= // for mobileL and below in both orientations -const mobileMediaQuery = ` ${v2_MediaQuery.MaxWidth.mobileL}, (orientation: landscape) and (max-height: ${v2_MediaWidths.mobileL}px)`; -const mobileLandscapeMediaQuery = `@media(orientation: landscape) and (max-height: ${v2_MediaWidths.mobileL}px)`; +const mobileMediaQuery = ` ${V2_MediaQuery.MaxWidth.mobileL}, (orientation: landscape) and (max-height: ${V2_MediaWidths.mobileL}px)`; +const mobileLandscapeMediaQuery = `@media(orientation: landscape) and (max-height: ${V2_MediaWidths.mobileL}px)`; // ============================================================================= // STYLING @@ -135,7 +135,7 @@ export const ESignatureDrawable = styled.div` ${mobileMediaQuery} { aspect-ratio: 4/3; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; height: auto; } @@ -166,7 +166,7 @@ export const ModalButtons = styled.div` justify-content: space-between; margin-top: 1rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: column-reverse; margin: 1rem 1.25rem 3rem; gap: 1rem; @@ -179,7 +179,7 @@ export const ModalButtons = styled.div` `; export const ModalActionButton = styled(Button.Default)` width: 8.5rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; } ${mobileLandscapeMediaQuery} { diff --git a/src/e-signature/e-signature.tsx b/src/e-signature/e-signature.tsx index d7a158fbc..14eecee1d 100644 --- a/src/e-signature/e-signature.tsx +++ b/src/e-signature/e-signature.tsx @@ -2,7 +2,7 @@ import { EraserIcon, PencilIcon } from "@lifesg/react-icons"; import { Suspense, lazy, useEffect, useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; import { ButtonWithIcon } from "../button-with-icon"; -import { v2_MediaWidths } from "../v2_media"; +import { V2_MediaWidths } from "../v2_media"; import { ProgressBar } from "../shared/progress-bar"; import { V2_Text } from "../v2_text"; import { ESignatureCanvasRef } from "./e-signature-canvas"; @@ -47,7 +47,7 @@ export const ESignature = (props: EsignatureProps) => { const eSignatureCanvasRef = useRef(null); const [dataURL, setDataURL] = useState(value); const isMobile = useMediaQuery({ - maxWidth: v2_MediaWidths.mobileL, + maxWidth: V2_MediaWidths.mobileL, }); // ============================================================================= diff --git a/src/error-display/error-display.style.tsx b/src/error-display/error-display.style.tsx index 5aa68dcff..5c730830d 100644 --- a/src/error-display/error-display.style.tsx +++ b/src/error-display/error-display.style.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { Button } from "../button"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; export const Container = styled.div` @@ -17,15 +17,15 @@ export const Img = styled.img` width: 25rem; height: auto; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 20rem; } - ${v2_MediaQuery.MaxWidth.mobileM} { + ${V2_MediaQuery.MaxWidth.mobileM} { width: 18rem; } - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { width: 15rem; } `; @@ -72,7 +72,7 @@ export const ActionButton = styled(Button.Default)` margin: 2rem auto 0; width: 21rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; margin: 2rem auto 0; } diff --git a/src/file-upload/dropzone.styles.tsx b/src/file-upload/dropzone.styles.tsx index 9f6a38d9c..d8aa48afe 100644 --- a/src/file-upload/dropzone.styles.tsx +++ b/src/file-upload/dropzone.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; import { CloudArrowUpFillIcon } from "@lifesg/react-icons/cloud-arrow-up-fill"; @@ -28,7 +28,7 @@ export const Container = styled.div` border-radius: 4px; padding: 2rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { padding: 2rem 1.25rem; } `; diff --git a/src/file-upload/file-item-edit.styles.tsx b/src/file-upload/file-item-edit.styles.tsx index 7cbc07761..0f75fb57e 100644 --- a/src/file-upload/file-item-edit.styles.tsx +++ b/src/file-upload/file-item-edit.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_MediaQuery } from "../v2_media/media"; +import { V2_MediaQuery } from "../v2_media/media"; import { Button } from "../button/button"; import { V2_Text } from "../v2_text/text"; import { V2_Color } from "../v2_color/color"; @@ -44,7 +44,7 @@ export const NameSection = styled.div` justify-content: space-between; margin-bottom: 1rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: column; justify-content: flex-start; } @@ -55,7 +55,7 @@ export const FileNameText = styled(V2_Text.BodySmall)` flex: 1; margin-right: 1rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { margin-right: 0; margin-bottom: 0.5rem; } @@ -65,7 +65,7 @@ export const FileSizeText = styled(V2_Text.BodySmall)``; export const ActionButtonsSection = styled.div` display: flex; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: column; } @@ -74,7 +74,7 @@ export const ActionButtonsSection = styled.div` return css` margin-left: 8rem; // 6rem width + 2rem gap - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { margin-left: 0; } `; @@ -88,7 +88,7 @@ export const ActionButton = styled(Button.Small)` margin-right: 1rem; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; :not(:last-of-type) { margin-bottom: 1rem; diff --git a/src/file-upload/file-list-item/file-list-item-thumbnail.tsx b/src/file-upload/file-list-item/file-list-item-thumbnail.tsx index 0e13cf058..876c85446 100644 --- a/src/file-upload/file-list-item/file-list-item-thumbnail.tsx +++ b/src/file-upload/file-list-item/file-list-item-thumbnail.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { V2_Color } from "../../v2_color"; -import { v2_MediaQuery } from "../../v2_media"; +import { V2_MediaQuery } from "../../v2_media"; import { ImageWithFallback } from "../../shared/image-with-fallback/image-with-fallback"; import { V2_TextStyleHelper } from "../../v2_text"; @@ -58,7 +58,7 @@ export const Thumbnail = styled(ImageWithFallback)` border: 1px solid ${V2_Color.Neutral[5]}; object-fit: cover; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 4rem; height: 4rem; } diff --git a/src/file-upload/file-list-item/file-list-item.styles.tsx b/src/file-upload/file-list-item/file-list-item.styles.tsx index 7c028b48a..8e062d7a0 100644 --- a/src/file-upload/file-list-item/file-list-item.styles.tsx +++ b/src/file-upload/file-list-item/file-list-item.styles.tsx @@ -2,7 +2,7 @@ import { DragHandleIcon as DSDragHandleIcon } from "@lifesg/react-icons/drag-han import styled, { css } from "styled-components"; import { V2_Color } from "../../v2_color"; import { IconButton as DSIconButton } from "../../icon-button"; -import { v2_MediaQuery } from "../../v2_media"; +import { V2_MediaQuery } from "../../v2_media"; import { V2_Text } from "../../v2_text"; import { ClickableIcon } from "../../shared/clickable-icon"; @@ -107,7 +107,7 @@ export const Box = styled.div` align-items: center; width: 100%; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { padding: 1rem; } @@ -132,7 +132,7 @@ export const Box = styled.div` ${(props) => { if (!props.$error && (props.$loading || props.$editable)) { return css` - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: column; align-items: flex-start; } @@ -146,7 +146,7 @@ export const ContentSection = styled.div` flex: 1; align-items: center; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: column; width: 100%; align-items: flex-start; @@ -155,7 +155,7 @@ export const ContentSection = styled.div` ${(props) => { if (props.$hasThumbnail) { return css` - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: row; align-items: center; } @@ -176,7 +176,7 @@ export const ExtendedNameSection = styled.div` flex: 1; align-items: center; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: column; align-items: flex-start; width: 100%; @@ -189,7 +189,7 @@ export const FileSizeSection = styled.div` margin-left: 0.5rem; justify-content: flex-end; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { ${(props) => { if (props.$hideInMobile) { return css` @@ -220,7 +220,7 @@ export const BaseErrorMessage = styled(V2_Text.XSmall)` export const DesktopErrorMessage = styled(BaseErrorMessage)` margin-top: 0.25rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { display: none; visibility: hidden; } @@ -229,7 +229,7 @@ export const DesktopErrorMessage = styled(BaseErrorMessage)` export const MobileErrorMessage = styled(BaseErrorMessage)` display: none; visibility: hidden; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { display: block; visibility: visible; margin-top: 0.5rem; @@ -243,7 +243,7 @@ export const ActionContainer = styled.div` justify-content: flex-end; align-items: center; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: fit-content; ${(props) => { diff --git a/src/file-upload/file-upload.styles.tsx b/src/file-upload/file-upload.styles.tsx index 6ef1bb4b4..c1e065159 100644 --- a/src/file-upload/file-upload.styles.tsx +++ b/src/file-upload/file-upload.styles.tsx @@ -2,7 +2,7 @@ import styled from "styled-components"; import { Alert } from "../alert"; import { Button } from "../button"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -44,7 +44,7 @@ export const UploadButtonContainer = styled.div` flex-direction: column; align-items: flex-end; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { align-items: flex-start; } `; @@ -52,7 +52,7 @@ export const UploadButtonContainer = styled.div` export const UploadButton = styled(Button.Small)` width: 10rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; } `; @@ -62,7 +62,7 @@ export const UploadButtonLabel = styled.label` margin-top: 0.5rem; width: 10rem; text-align: center; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { display: none; visibility: hidden; } diff --git a/src/filter/addons/filter-item-checkbox.styles.tsx b/src/filter/addons/filter-item-checkbox.styles.tsx index 13cbe611c..c1b1051ae 100644 --- a/src/filter/addons/filter-item-checkbox.styles.tsx +++ b/src/filter/addons/filter-item-checkbox.styles.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { Button } from "../../button/button"; import { V2_Color } from "../../v2_color/color"; -import { v2_MediaQuery } from "../../v2_media/media"; +import { V2_MediaQuery } from "../../v2_media/media"; import { ToggleIcon } from "../../shared/toggle-icon/toggle-icon"; import { V2_TextStyleHelper } from "../../v2_text/helper"; import { Toggle } from "../../toggle"; @@ -14,7 +14,7 @@ export const StyledFilterItem = styled(FilterItem)` position: relative; // to get the item position relative to this parent padding: 0.5rem 0.5rem 0; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { padding: 1rem 1.25rem 0.5rem; } } @@ -22,7 +22,7 @@ export const StyledFilterItem = styled(FilterItem)` [data-id="minimise-button"] { margin: 0.5rem 1.25rem 0; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin: 0.5rem 1.25rem 0; } } @@ -32,7 +32,7 @@ export const Group = styled.div` display: flex; flex-direction: column; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { flex-direction: row; flex-wrap: wrap; gap: 1rem; @@ -83,7 +83,7 @@ export const SelectAllButton = styled(Button.Small)` padding: 0; margin: 1rem 0 0.5rem 0.75rem; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin: 0 0 1rem 0; } `; diff --git a/src/filter/filter-item.styles.tsx b/src/filter/filter-item.styles.tsx index 9274cc064..560dfd7a3 100644 --- a/src/filter/filter-item.styles.tsx +++ b/src/filter/filter-item.styles.tsx @@ -3,7 +3,7 @@ import { animated } from "react-spring"; import styled from "styled-components"; import { Button } from "../button/button"; import { V2_Color } from "../v2_color/color"; -import { v2_MediaQuery } from "../v2_media/media"; +import { V2_MediaQuery } from "../v2_media/media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -30,7 +30,7 @@ export const FilterItemWrapper = styled.div` ? V2_Color.Neutral[7](props) : V2_Color.Neutral[8](props)}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { background-color: ${V2_Color.Neutral[7]}; } `; @@ -40,7 +40,7 @@ export const Divider = styled.div` height: 1px; background-color: ${V2_Color.Neutral[5]}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: ${(props) => (props.$showMobileDivider ? "block" : "none")}; margin: 0 1rem; } @@ -56,7 +56,7 @@ export const FilterItemHeader = styled.div` background-color: ${V2_Color.Neutral[8]}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { background-color: transparent; } `; @@ -81,7 +81,7 @@ export const ChevronIcon = styled(ChevronDownIcon)` export const FilterItemTitle = styled(V2_Text.H4)` margin: 1.5rem 0 1.5rem 1.25rem; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} margin: 1.5rem 1.25rem 0 1.25rem; } diff --git a/src/filter/filter.styles.tsx b/src/filter/filter.styles.tsx index 457d1fd26..889ac44cb 100644 --- a/src/filter/filter.styles.tsx +++ b/src/filter/filter.styles.tsx @@ -2,7 +2,7 @@ import { FilterIcon } from "@lifesg/react-icons/filter"; import styled from "styled-components"; import { Button } from "../button/button"; import { V2_Color } from "../v2_color/color"; -import { v2_MediaQuery } from "../v2_media/media"; +import { V2_MediaQuery } from "../v2_media/media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text/text"; @@ -48,7 +48,7 @@ export const FilterHeader = styled.div` background-color: ${V2_Color.Neutral[8]}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { border-bottom: 1px solid ${V2_Color.Neutral[5]}; } `; @@ -57,7 +57,7 @@ export const FilterTitle = styled(V2_Text.H4)` flex: 1; margin: 1.5rem 0 1rem 1.25rem; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { text-align: center; margin: 1.5rem 0; } @@ -83,7 +83,7 @@ export const FilterClearButton = styled(Button.Small)` padding: 1.5rem 1.25rem 1rem 1.25rem; height: auto; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { padding: 1.5rem 1.25rem; } `; diff --git a/src/footer/footer-download-app.style.tsx b/src/footer/footer-download-app.style.tsx index 9181ae98d..bc3025c93 100644 --- a/src/footer/footer-download-app.style.tsx +++ b/src/footer/footer-download-app.style.tsx @@ -1,4 +1,4 @@ -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; import styled from "styled-components"; @@ -7,7 +7,7 @@ export const Wrapper = styled.div` align-items: flex-start; flex-direction: column; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { justify-content: flex-start; padding: 0; } @@ -33,7 +33,7 @@ export const AppStoreLink = styled.a` object-fit: contain; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { &:not(:last-child) { margin-right: 1rem; } diff --git a/src/footer/footer.style.tsx b/src/footer/footer.style.tsx index 403231816..a05ceda88 100644 --- a/src/footer/footer.style.tsx +++ b/src/footer/footer.style.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { v2_Layout } from "../v2_layout"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Color } from "../v2_color"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -24,7 +24,7 @@ export const TopSection = styled(v2_Layout.V2_Content)` padding: 4rem 0; border-bottom: 1px solid ${V2_Color.Neutral[5]}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { padding: 2rem 0; } `; @@ -37,12 +37,12 @@ export const LogoSection = styled.div` width: auto; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { grid-column: 1 / span 8; margin-bottom: 2rem; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-column: 1 / span 4; margin-bottom: 2rem; } @@ -70,7 +70,7 @@ export const LinkSection = styled.ul` } } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { // first col grid-column: 1 / span 4; @@ -80,7 +80,7 @@ export const LinkSection = styled.ul` } } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { // first col grid-column: 1 / span 2; @@ -94,12 +94,12 @@ export const LinkSection = styled.ul` export const AddonSection = styled.div` grid-column: 9 / span 4; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { grid-column: 1 / span 8; margin-top: 2rem; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-column: 1 / span 4; } `; @@ -111,7 +111,7 @@ export const AddonSection = styled.div` export const MobileOnlyBorder = styled.div` display: none; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: block; height: 1px; background: ${V2_Color.Neutral[6]}; @@ -121,7 +121,7 @@ export const MobileOnlyBorder = styled.div` export const BottomSection = styled(v2_Layout.V2_Content)` padding: 1.375rem 0; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { border-top: none; flex-direction: column; padding: 1rem 0; @@ -136,7 +136,7 @@ export const BottomSectionContent = styled.div` margin-right: 1rem; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { grid-column: 1 / span 8; flex-direction: column; &:not(:last-child) { @@ -144,7 +144,7 @@ export const BottomSectionContent = styled.div` } } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-column: 1 / span 4; } `; @@ -153,13 +153,13 @@ export const CopyrightSection = styled(BottomSectionContent)` grid-column: 7 / span 6; justify-content: flex-end; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin-top: 1rem; justify-content: flex-start; grid-column: 1 / span 8; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-column: 1 / span 4; } `; @@ -183,14 +183,14 @@ export const DisclaimerTextLink = styled(V2_Text.Hyperlink.Small)` } } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin-bottom: 1rem; &:not(:last-child) { margin-right: 0; } } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin-bottom: 0.625rem; } `; diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx index 5fd118dc2..b572ee986 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { ImagePlaceholder } from "../shared/image-placeholder"; import { V2_Text } from "../v2_text"; @@ -35,7 +35,7 @@ export const CloseButton = styled(IconButton)` right: 3rem; z-index: 5; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { top: 1.25rem; right: 1.25rem; } @@ -52,7 +52,7 @@ export const MagnifierButton = styled(IconButton)` right: 6.5rem; z-index: 5; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { top: 1.25rem; right: 4.75rem; } @@ -73,7 +73,7 @@ export const ArrowButton = styled(IconButton)` props.$position === "left" && css` left: 3rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { left: 1.25rem; } `} @@ -82,7 +82,7 @@ export const ArrowButton = styled(IconButton)` props.$position === "right" && css` right: 3rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { right: 1.25rem; } `} @@ -189,7 +189,7 @@ export const ThumbnailContainer = styled.div` background-color: ${V2_Color.Neutral[1]}; padding: 1.5rem 1rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { padding: 1rem 1.25rem; } `; @@ -218,7 +218,7 @@ export const ThumbnailItem = styled.div` height: 6.25rem; width: 6.25rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { height: 4rem; width: 4rem; } @@ -228,7 +228,7 @@ export const ThumbnailItem = styled.div` ? css` border: 4px solid ${V2_Color.Primary}; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { border: 2px solid ${V2_Color.Primary}; } ` diff --git a/src/image-button/image-button.style.tsx b/src/image-button/image-button.style.tsx index 7982f912d..4389ea851 100644 --- a/src/image-button/image-button.style.tsx +++ b/src/image-button/image-button.style.tsx @@ -1,4 +1,4 @@ -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color/color"; import { V2_TextStyleHelper } from "../v2_text/helper"; @@ -31,7 +31,7 @@ export const Main = styled.button<{ object-fit: contain; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { padding: 0.5rem 0.25rem; gap: 0.25rem; ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} diff --git a/src/masonry/masonry.style.tsx b/src/masonry/masonry.style.tsx index fdcc64d53..e2bab7d62 100644 --- a/src/masonry/masonry.style.tsx +++ b/src/masonry/masonry.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { MasonryGridProps, MasonryTileProps } from "./types"; // ============================================================================= @@ -34,14 +34,14 @@ export const GridContainer = styled.div` gap: 2rem 2rem; justify-items: stretch; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { grid-template-columns: repeat( ${numOfCols.md || numOfCols.sm || "auto-fill"}, minmax(calc(${100 / mdColsDefault}% - 2rem), 1fr) ); } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-template-columns: repeat( ${numOfSmCols || "auto-fill"}, minmax(calc(${100 / (numOfSmCols || 1)}% - 2rem), 1fr) @@ -60,12 +60,12 @@ export const TileContainer = styled.div` grid-column: ${startLg || startMd || "auto"} / span ${colsLg || colsMd || 1}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { grid-column: ${startMd || startSm || "auto"} / span ${colsMd || colsSm || 1}; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-column: ${startSm || "auto"} / span ${colsSm || 1}; } `; diff --git a/src/masthead/masthead.style.tsx b/src/masthead/masthead.style.tsx index 8b2b2bc1e..fa0e6926e 100644 --- a/src/masthead/masthead.style.tsx +++ b/src/masthead/masthead.style.tsx @@ -1,11 +1,11 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; export const Wrapper = styled.div` background: hsl(0, 0%, 94%); padding: 0 0.5rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { padding: 0; } `; diff --git a/src/modal/modal-box.styles.tsx b/src/modal/modal-box.styles.tsx index fe771dcaa..1b72f4d00 100644 --- a/src/modal/modal-box.styles.tsx +++ b/src/modal/modal-box.styles.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; export const Box = styled.div` @@ -14,7 +14,7 @@ export const Box = styled.div` border-radius: 0.75rem; overflow: hidden; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 90%; max-height: 70%; } @@ -36,7 +36,7 @@ export const CloseButton = styled(ClickableIcon)` width: 2rem; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { right: 1.25rem; } `; diff --git a/src/modal/modal.styles.tsx b/src/modal/modal.styles.tsx index 2b195cf84..5cd816d46 100644 --- a/src/modal/modal.styles.tsx +++ b/src/modal/modal.styles.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ModalAnimationDirection } from "./types"; interface Props { @@ -39,7 +39,7 @@ export const Container = styled.div` overflow: hidden; ${(props) => visibilityStyle(props.show, props.animationFrom || "bottom")} - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { height: calc( ${(props) => props.verticalHeight diff --git a/src/navbar/drawer.styles.tsx b/src/navbar/drawer.styles.tsx index c8fd58fde..ade1baed2 100644 --- a/src/navbar/drawer.styles.tsx +++ b/src/navbar/drawer.styles.tsx @@ -1,7 +1,7 @@ import { CrossIcon } from "@lifesg/react-icons/cross"; import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; // ============================================================================= @@ -37,7 +37,7 @@ const VISIBILITY_STYLE = (show: boolean | undefined) => { export const Wrapper = styled.div` display: none; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: flex; } `; @@ -61,11 +61,11 @@ export const Container = styled.div` `; }} - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { width: 75%; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; } `; diff --git a/src/navbar/menu.styles.tsx b/src/navbar/menu.styles.tsx index 6d611efd2..6e196dca6 100644 --- a/src/navbar/menu.styles.tsx +++ b/src/navbar/menu.styles.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { v2_DesignToken } from "../v2_design-token"; // ============================================================================= @@ -33,7 +33,7 @@ export const MobileWrapper = styled.ul` display: none; list-style: none; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { border-left: 0.25rem solid ${V2_Color.Primary}; display: flex; flex-direction: column; @@ -69,7 +69,7 @@ export const Link = styled(V2_Text.Hyperlink.Small)` color: ${V2_Color.Accent.Light[1]}; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { ${V2_TextStyleHelper.getTextStyle("H5", "bold")} width: 100%; padding-left: 1.5rem; @@ -96,7 +96,7 @@ export const MenuItem = styled.li` padding-bottom: 1rem; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { padding: 0.625rem 0; :first-child { diff --git a/src/navbar/navbar-action-buttons.styles.tsx b/src/navbar/navbar-action-buttons.styles.tsx index 0181cd337..b604af8f1 100644 --- a/src/navbar/navbar-action-buttons.styles.tsx +++ b/src/navbar/navbar-action-buttons.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { Button } from "../button"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; // ============================================================================= @@ -12,7 +12,7 @@ export const Wrapper = styled.ul` margin-left: 4rem; flex-shrink: 0; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: none; } `; @@ -20,7 +20,7 @@ export const Wrapper = styled.ul` export const MobileWrapper = styled.ul` display: none; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: flex; list-style: none; margin-left: 4rem; @@ -32,7 +32,7 @@ export const DrawerWrapper = styled.ul` display: none; list-style: none; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: flex; flex-direction: column; margin-top: 2.5rem; @@ -41,7 +41,7 @@ export const DrawerWrapper = styled.ul` max-width: 24rem; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; max-width: unset; min-width: unset; @@ -60,7 +60,7 @@ export const ButtonItem = styled.li<{ $mobile?: boolean }>` margin-right: 1rem; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { width: 100%; padding: 0 0 0 1rem; justify-content: center; @@ -71,7 +71,7 @@ export const ButtonItem = styled.li<{ $mobile?: boolean }>` } } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { ${(props) => { if (props.$mobile) { return css` @@ -83,7 +83,7 @@ export const ButtonItem = styled.li<{ $mobile?: boolean }>` `; export const ActionButton = styled(Button.Small)` - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { width: 100%; padding: 0.685rem 1rem; } @@ -95,7 +95,7 @@ export const ActionButton = styled(Button.Small)` export const DownloadAppWrapper = styled.div` display: none; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: flex; flex-direction: column; margin-top: 2.5rem; @@ -121,13 +121,13 @@ export const DownloadAppImageLink = styled.a` object-fit: contain; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { img { max-width: 11rem; } } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { img { max-width: 100%; } diff --git a/src/navbar/navbar-items.styles.tsx b/src/navbar/navbar-items.styles.tsx index a55ad8ad3..b36facfe3 100644 --- a/src/navbar/navbar-items.styles.tsx +++ b/src/navbar/navbar-items.styles.tsx @@ -1,7 +1,7 @@ import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; import styled from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text"; @@ -32,7 +32,7 @@ export const Wrapper = styled.ul` ${(props) => props.$alignLeft && "margin-right: auto;"} - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: none; } `; @@ -41,7 +41,7 @@ export const MobileWrapper = styled.ul` display: none; list-style: none; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: flex; flex-direction: column; overflow: hidden; @@ -60,7 +60,7 @@ export const LinkItem = styled.li` margin-left: ${(props) => (props.$hiddenBranding ? "-0.5rem" : "0")}; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { flex-direction: column; padding: 0.125rem 0; width: 100%; @@ -82,7 +82,7 @@ export const Link = styled(V2_Text.Hyperlink.Small)` color: ${V2_Color.Neutral[1]}; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { color: ${V2_Color.Neutral[1]}; width: 100%; padding: 0.5rem 1rem; @@ -113,7 +113,7 @@ export const LinkIndicator = styled.div` right: 0.5rem; background-color: ${V2_Color.Primary}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { left: 0; right: unset; top: 0; diff --git a/src/navbar/navbar.styles.tsx b/src/navbar/navbar.styles.tsx index a5b226e6f..7fcd1c59d 100644 --- a/src/navbar/navbar.styles.tsx +++ b/src/navbar/navbar.styles.tsx @@ -1,7 +1,7 @@ import { MenuIcon } from "@lifesg/react-icons/menu"; import styled from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { Transition } from "../transition"; @@ -51,7 +51,7 @@ export const Nav = styled.nav` position: relative; transition: ${Transition.Base}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { height: ${NAVBAR_MOBILE_HEIGHT}rem; } `; @@ -63,7 +63,7 @@ export const NavElementsContainer = styled.div` flex: 1; justify-content: flex-end; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin-left: 0rem; } `; @@ -71,7 +71,7 @@ export const NavElementsContainer = styled.div` export const MobileMenuButton = styled(ClickableIcon)` display: none; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: flex; padding: 0 1.5rem; margin-right: -1.5rem; @@ -92,11 +92,11 @@ export const NavBrandContainer = styled.div` height: ${(props) => (props.$compress ? 1.5 : 2)}rem; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { height: 1.5rem; } - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { height: 1.25rem; } `; @@ -108,11 +108,11 @@ export const NavSeparator = styled.div` width: 1px; margin: 0 ${(props) => (props.$compress ? 1 : 1.5)}rem; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin: 0 1rem; } - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { width: 2px; margin: 0 0.75rem; } diff --git a/src/otp-input/otp-input.styles.tsx b/src/otp-input/otp-input.styles.tsx index aa2023877..dd2083ba3 100644 --- a/src/otp-input/otp-input.styles.tsx +++ b/src/otp-input/otp-input.styles.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { Button } from "../button"; import { Input } from "../input"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; export const Wrapper = styled.div` display: flex; @@ -31,7 +31,7 @@ export const InputField = styled(Input)` -moz-appearance: textfield; } - ${v2_MediaQuery.MaxWidth.mobileM} { + ${V2_MediaQuery.MaxWidth.mobileM} { padding: 0 0.5rem; } `; diff --git a/src/pagination/pagination.styles.tsx b/src/pagination/pagination.styles.tsx index d80890caf..fb29f8bc3 100644 --- a/src/pagination/pagination.styles.tsx +++ b/src/pagination/pagination.styles.tsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { Button } from "../button/button"; import { V2_Color } from "../v2_color"; import { Input } from "../input"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -30,7 +30,7 @@ export const PaginationList = styled.div` align-self: flex-start; overflow: auto; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { align-self: center; } `; @@ -101,7 +101,7 @@ export const NavigationButton = styled(ClickableIcon)` } }} - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { margin-right: 0rem; margin-left: 0rem; } diff --git a/src/popover-v2/popover-trigger.tsx b/src/popover-v2/popover-trigger.tsx index 8563130ac..5f8ba754a 100644 --- a/src/popover-v2/popover-trigger.tsx +++ b/src/popover-v2/popover-trigger.tsx @@ -9,7 +9,7 @@ import { } from "@floating-ui/react"; import { useEffect, useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; -import { v2_MediaWidths } from "../v2_media"; +import { V2_MediaWidths } from "../v2_media"; import { PopoverV2 } from "./popover"; import { TriggerContainer } from "./popover-trigger.styles"; import { PopoverV2TriggerProps } from "./types"; @@ -32,7 +32,7 @@ export const PopoverTrigger = ({ const nodeRef = useRef(); const popoverRef = useRef(); const isMobile = useMediaQuery({ - maxWidth: v2_MediaWidths.mobileL, + maxWidth: V2_MediaWidths.mobileL, }); const { refs, floatingStyles } = useFloating({ open: visible, diff --git a/src/popover-v2/popover.styles.tsx b/src/popover-v2/popover.styles.tsx index 67c84883f..a31ffd5fc 100644 --- a/src/popover-v2/popover.styles.tsx +++ b/src/popover-v2/popover.styles.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { Card } from "../card"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ModalBox } from "../modal/modal-box"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; @@ -18,7 +18,7 @@ export const PopoverCard = styled(Card)` color: ${V2_Color.Neutral[1]}; ${applyHtmlContentStyle({ textSize: "BodySmall" })} - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { display: none; } `; diff --git a/src/popover/popover.styles.tsx b/src/popover/popover.styles.tsx index baa7fe1e6..3ee395416 100644 --- a/src/popover/popover.styles.tsx +++ b/src/popover/popover.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ModalBox } from "../modal/modal-box"; import { Transition } from "../transition"; @@ -102,7 +102,7 @@ export const BubbleWrap = styled.div` ${(props) => getVisibilityStyle(props.$visible)} ${(props) => getBubblePosition(props.$offset)} - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { display: none; } `; diff --git a/src/progress-indicator/progress-indicator.style.tsx b/src/progress-indicator/progress-indicator.style.tsx index 718b0d8d6..c1c93a174 100644 --- a/src/progress-indicator/progress-indicator.style.tsx +++ b/src/progress-indicator/progress-indicator.style.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; // Units in rem @@ -23,11 +23,11 @@ export const Wrapper = styled.div` margin: 2rem 0; - ${v2_MediaQuery.MaxWidth.desktopM} { + ${V2_MediaQuery.MaxWidth.desktopM} { margin: 1.5rem 0; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin: 1rem 0; } `; diff --git a/src/progress-indicator/progress-indicator.tsx b/src/progress-indicator/progress-indicator.tsx index 41a47e8b7..614e0e2db 100644 --- a/src/progress-indicator/progress-indicator.tsx +++ b/src/progress-indicator/progress-indicator.tsx @@ -1,4 +1,4 @@ -import { v2_MediaWidths } from "../v2_media"; +import { V2_MediaWidths } from "../v2_media"; import { Content, Indicator, @@ -23,7 +23,7 @@ export const ProgressIndicator = ({ // CONST, STATE, REFS // ============================================================================= const isMobile = useMediaQuery({ - maxWidth: v2_MediaWidths.tablet, + maxWidth: V2_MediaWidths.tablet, }); // ============================================================================= diff --git a/src/shared/dropdown-list-v2/dropdown-list.styles.tsx b/src/shared/dropdown-list-v2/dropdown-list.styles.tsx index c0d4b70bc..cc8a1cf1d 100644 --- a/src/shared/dropdown-list-v2/dropdown-list.styles.tsx +++ b/src/shared/dropdown-list-v2/dropdown-list.styles.tsx @@ -4,7 +4,7 @@ import { SquareTickFillIcon } from "@lifesg/react-icons/square-tick-fill"; import { TickIcon } from "@lifesg/react-icons/tick"; import styled, { css } from "styled-components"; import { V2_Color } from "../../v2_color"; -import { v2_MediaQuery } from "../../v2_media"; +import { V2_MediaQuery } from "../../v2_media"; import { V2_TextStyleHelper } from "../../v2_text"; import { DropdownVariantType } from "../dropdown-list/types"; import { BasicButton } from "../input-wrapper/input-wrapper"; @@ -43,7 +43,7 @@ export const Container = styled.div` max-height: 27rem; overflow-y: auto; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { min-width: unset; width: calc(100vw - 2.5rem); max-height: 15rem; diff --git a/src/shared/dropdown-list/dropdown-list.styles.tsx b/src/shared/dropdown-list/dropdown-list.styles.tsx index 1f6e0d28a..02b68a03b 100644 --- a/src/shared/dropdown-list/dropdown-list.styles.tsx +++ b/src/shared/dropdown-list/dropdown-list.styles.tsx @@ -3,7 +3,7 @@ import { animated } from "react-spring"; import styled, { css } from "styled-components"; import { Checkbox } from "../../checkbox"; import { V2_Color } from "../../v2_color"; -import { v2_MediaQuery } from "../../v2_media"; +import { V2_MediaQuery } from "../../v2_media"; import { V2_TextStyleHelper } from "../../v2_text"; import { DropdownVariantType, @@ -78,7 +78,7 @@ export const List = styled.ul` border-bottom-right-radius: 4px; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { max-height: 15rem; } `; diff --git a/src/shared/fade-wrapper/fade-wrapper.style.tsx b/src/shared/fade-wrapper/fade-wrapper.style.tsx index 4d2cf060f..3fe6863e9 100644 --- a/src/shared/fade-wrapper/fade-wrapper.style.tsx +++ b/src/shared/fade-wrapper/fade-wrapper.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_MediaQuery } from "../../v2_media"; +import { V2_MediaQuery } from "../../v2_media"; import { ClickableIcon } from "../clickable-icon"; import { V2_Color } from "../../v2_color"; @@ -65,7 +65,7 @@ export const Fade = styled.div` } return ` - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { ${positionStyle} } `; @@ -89,7 +89,7 @@ export const Content = styled.div` export const FadeIndicatorButton = styled(ClickableIcon)` display: none; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { display: flex; height: 100%; width: 100%; diff --git a/src/shared/internal-calendar/calendar-dropdown.style.tsx b/src/shared/internal-calendar/calendar-dropdown.style.tsx index 6459cc1df..f3b517f8f 100644 --- a/src/shared/internal-calendar/calendar-dropdown.style.tsx +++ b/src/shared/internal-calendar/calendar-dropdown.style.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../../v2_media"; +import { V2_MediaQuery } from "../../v2_media"; // ============================================================================= // STYLE INTERFACE @@ -16,7 +16,7 @@ export const CalendarWrapper = styled.div` max-width: 41rem; min-width: 21rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { min-width: 17.5rem; } `; diff --git a/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx b/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx index 5e0b5579b..311793dc8 100644 --- a/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx +++ b/src/shared/nested-dropdown-list/nested-dropdown-list.styles.tsx @@ -2,7 +2,7 @@ import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circl import { animated } from "react-spring"; import styled from "styled-components"; import { V2_Color } from "../../v2_color"; -import { v2_MediaQuery } from "../../v2_media"; +import { V2_MediaQuery } from "../../v2_media"; import { V2_Text, V2_TextStyleHelper } from "../../v2_text"; // ============================================================================= @@ -45,7 +45,7 @@ export const List = styled.ul` border-bottom-right-radius: 4px; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { max-height: 15rem; } `; diff --git a/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx b/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx index 0feb4931e..91f0ee5ee 100644 --- a/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx +++ b/src/shared/timepicker-dropdown/timepicker-dropdown.styles.tsx @@ -2,7 +2,7 @@ import { animated } from "react-spring"; import styled from "styled-components"; import { Button } from "../../button"; import { V2_Color } from "../../v2_color"; -import { v2_MediaQuery } from "../../v2_media"; +import { V2_MediaQuery } from "../../v2_media"; import { V2_Text } from "../../v2_text"; import { Toggle } from "../../toggle"; import { ClickableIcon } from "../clickable-icon"; @@ -27,7 +27,7 @@ export const AnimatedDiv = styled(animated.div)` overflow: hidden; z-index: 1; - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { max-width: 100%; } `; @@ -45,7 +45,7 @@ export const InputSection = styled.div` align-items: center; justify-content: space-between; - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { flex-direction: column; width: 100%; } @@ -57,7 +57,7 @@ export const ControlSection = styled.div` margin-top: 1rem; gap: 0.5rem 1rem; - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { flex-direction: column-reverse; // FIXME: this breaks tab focus margin-top: 2rem; } @@ -71,7 +71,7 @@ export const HourMinuteSection = styled.div` align-items: center; margin-right: 2rem; - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { margin-right: 0; width: 100%; } @@ -81,11 +81,11 @@ export const TimePeriodSection = styled.div` display: flex; gap: 0.5rem; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { flex-direction: column; } - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { flex-direction: row; width: 100%; } @@ -96,7 +96,7 @@ export const InputContainer = styled.div` flex-direction: column; align-items: center; - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { width: 6rem; } `; @@ -121,11 +121,11 @@ export const DividerLabel = styled(V2_Text.Body)` margin: 0 0.25rem; text-align: center; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin: 0; } - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { margin: 0 0.25rem; } `; @@ -148,7 +148,7 @@ export const TimeInput = styled(BasicInput)` color: transparent; } - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { width: 100%; } `; @@ -164,11 +164,11 @@ export const TimePeriodToggle = styled(Toggle)` export const ControlButton = styled(Button.Small)` width: 7rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex: 1; } - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { width: 100%; } `; diff --git a/src/sidenav/sidenav.styles.tsx b/src/sidenav/sidenav.styles.tsx index fa7f5122d..38217da50 100644 --- a/src/sidenav/sidenav.styles.tsx +++ b/src/sidenav/sidenav.styles.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { animated } from "react-spring"; //============================================================================= @@ -38,7 +38,7 @@ export const DesktopContainer = styled(Container)` height: 100vh; left: 0; top: 0; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { display: none; visibility: hidden; } @@ -47,7 +47,7 @@ export const DesktopContainer = styled(Container)` export const MobileContainer = styled(Container)` display: none; visibility: hidden; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { display: none; // NOTE: Since mobile view not supported yet } `; diff --git a/src/smart-app-banner/smart-app-banner.styles.ts b/src/smart-app-banner/smart-app-banner.styles.ts index 0ebf2198c..411e974f1 100644 --- a/src/smart-app-banner/smart-app-banner.styles.ts +++ b/src/smart-app-banner/smart-app-banner.styles.ts @@ -5,7 +5,7 @@ import { StarHalfIcon } from "@lifesg/react-icons/star-half"; import styled, { css, keyframes } from "styled-components"; import { Button } from "../button"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -77,7 +77,7 @@ export const TextContainer = styled.div` flex-direction: column; align-items: left; margin: 0.5rem; - ${v2_MediaQuery.MaxWidth.mobileM} { + ${V2_MediaQuery.MaxWidth.mobileM} { margin: 0 0.5rem; } `; @@ -103,7 +103,7 @@ export const StyledButton = styled(Button.Small)` export const Title = styled(V2_Text.H6)` overflow-wrap: anywhere; - ${v2_MediaQuery.MaxWidth.mobileM} { + ${V2_MediaQuery.MaxWidth.mobileM} { ${V2_TextStyleHelper.getTextStyle("XSmall", "semibold")} } `; diff --git a/src/spec/media-spec.ts b/src/spec/media-spec.ts index 641539dcf..aa528399a 100644 --- a/src/spec/media-spec.ts +++ b/src/spec/media-spec.ts @@ -1,6 +1,6 @@ -import { v2_MediaWidth } from "../v2_media/types"; +import { V2_MediaWidth } from "../v2_media/types"; -export const MediaWidths: v2_MediaWidth = { +export const MediaWidths: V2_MediaWidth = { mobileS: 320, mobileM: 375, mobileL: 480, diff --git a/src/tab/tab-link-chain.style.tsx b/src/tab/tab-link-chain.style.tsx index af08a74ea..3f41a2925 100644 --- a/src/tab/tab-link-chain.style.tsx +++ b/src/tab/tab-link-chain.style.tsx @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; import { FadeWrapper } from "../shared/fade-wrapper"; import { V2_Text } from "../v2_text"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; // ============================================================================= // STYLE INTERFACES @@ -37,7 +37,7 @@ export const ChainItem = styled.li` } }} - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex: 1; justify-content: center; } diff --git a/src/tab/tab-link-chain.tsx b/src/tab/tab-link-chain.tsx index db6efecb1..edc9a16d0 100644 --- a/src/tab/tab-link-chain.tsx +++ b/src/tab/tab-link-chain.tsx @@ -1,6 +1,6 @@ import { useContext, useRef } from "react"; import { useMediaQuery } from "react-responsive"; -import { v2_MediaWidths } from "../v2_media"; +import { V2_MediaWidths } from "../v2_media"; import { TabContext } from "./tab-context"; import { BoldLabel, @@ -29,7 +29,7 @@ export const TabLinkChain = ({ const { setCurrentActiveIndex, currentActiveIndex, tabLinks } = useContext(TabContext); const isMobile = useMediaQuery({ - maxWidth: v2_MediaWidths.mobileL, + maxWidth: V2_MediaWidths.mobileL, }); const activeLinkRef = useRef(null); @@ -53,7 +53,7 @@ export const TabLinkChain = ({ if ( content && wrapper && - window.innerWidth <= v2_MediaWidths.tablet && + window.innerWidth <= V2_MediaWidths.tablet && activeLinkRef ) { content.scrollLeft = diff --git a/src/tag/tag.style.ts b/src/tag/tag.style.ts index fb41b45dc..b452bfc9c 100644 --- a/src/tag/tag.style.ts +++ b/src/tag/tag.style.ts @@ -2,7 +2,7 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color/color"; import { TagColorType, TagType } from "./types"; import { V2_TextStyleHelper } from "../v2_text"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; // ============================================================================= // STYLING @@ -113,7 +113,7 @@ export const Wrapper = styled.div` `; }} - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { ${({ $interactive }) => { if ($interactive) { return css` diff --git a/src/text-list/text-list.styles.tsx b/src/text-list/text-list.styles.tsx index 033aa3b81..a1565d742 100644 --- a/src/text-list/text-list.styles.tsx +++ b/src/text-list/text-list.styles.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Color } from "../v2_color"; import { V2_TextStyleHelper } from "../v2_text/helper"; import { OrderedListProps, UnorderedListProps } from "./types"; @@ -17,7 +17,7 @@ export const StyledOrderedList = styled.ol` ${(props) => baseListStyle(props.bottomMargin)} margin-left: ${BASE_MARGIN}rem; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin-left: 2.5rem; } diff --git a/src/time-slot-bar-week/time-slot-bar-week.style.tsx b/src/time-slot-bar-week/time-slot-bar-week.style.tsx index c63eeb972..de1c307df 100644 --- a/src/time-slot-bar-week/time-slot-bar-week.style.tsx +++ b/src/time-slot-bar-week/time-slot-bar-week.style.tsx @@ -1,11 +1,11 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../v2_media/media"; +import { V2_MediaQuery } from "../v2_media/media"; export const Wrapper = styled.div` min-width: 18.5rem; [data-id="calendar-header"] { - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { padding: 0 1.25rem; } } diff --git a/src/time-slot-week-view/time-slot-week-view.styles.tsx b/src/time-slot-week-view/time-slot-week-view.styles.tsx index c63eeb972..de1c307df 100644 --- a/src/time-slot-week-view/time-slot-week-view.styles.tsx +++ b/src/time-slot-week-view/time-slot-week-view.styles.tsx @@ -1,11 +1,11 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../v2_media/media"; +import { V2_MediaQuery } from "../v2_media/media"; export const Wrapper = styled.div` min-width: 18.5rem; [data-id="calendar-header"] { - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { padding: 0 1.25rem; } } diff --git a/src/timeline/timeline.style.tsx b/src/timeline/timeline.style.tsx index 2abd69571..ee91a906d 100644 --- a/src/timeline/timeline.style.tsx +++ b/src/timeline/timeline.style.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; import { Variant } from "./types"; import { Pill } from "../pill"; @@ -114,11 +114,11 @@ export const TimelineWrapper = styled.div` grid-column: ${(props) => (props.$startCol ? props.$startCol : 3)} / span ${(props) => (props.$colSpan ? props.$colSpan : 8)}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { grid-column: span 8; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-column: span 4; } `; @@ -126,7 +126,7 @@ export const TimelineWrapper = styled.div` export const TimelineTitle = styled(V2_Text.H3)` margin-bottom: 1rem; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { margin-bottom: 1.5rem; } `; diff --git a/src/toast/toast.styles.tsx b/src/toast/toast.styles.tsx index 1178318fa..101620f0f 100644 --- a/src/toast/toast.styles.tsx +++ b/src/toast/toast.styles.tsx @@ -4,7 +4,7 @@ import { V2_ValidationElementAttributes } from "src/v2_color"; import { PropertiesToType } from "src/util/utility-types"; import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color/color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text } from "../v2_text"; import { ToastType } from "./types"; @@ -50,7 +50,7 @@ export const Wrapper = styled(animated.div)` align-items: center; gap: 2rem; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { left: 0; } @@ -70,7 +70,7 @@ export const ContentWrapper = styled.div` flex: 1; justify-content: space-between; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { display: flex; align-items: flex-start; flex-direction: column; @@ -129,7 +129,7 @@ export const ActionButton = styled(Button.Small)` width: fit-content; flex-shrink: 0; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { align-self: flex-start; margin-left: 2rem; } @@ -150,7 +150,7 @@ export const DismissButton = styled(ClickableIcon)` :hover { background: transparent; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { align-self: center; } `; diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index dff52c48f..5a2be2272 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { Alert } from "../alert"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { TextList } from "../text-list"; @@ -169,10 +169,10 @@ export const Label = styled.label` -webkit-box-orient: vertical; overflow-wrap: break-word; -webkit-line-clamp: ${(props) => props.$maxLines?.desktop ?? "none"}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { -webkit-line-clamp: ${(props) => props.$maxLines?.tablet ?? "none"}; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { -webkit-line-clamp: ${(props) => props.$maxLines?.mobile ?? "none"}; } color: ${V2_Color.Neutral[1]}; diff --git a/src/tooltip/tooltip.styles.tsx b/src/tooltip/tooltip.styles.tsx index 396b3e49f..97992bd71 100644 --- a/src/tooltip/tooltip.styles.tsx +++ b/src/tooltip/tooltip.styles.tsx @@ -1,7 +1,7 @@ import { Card } from "src/card"; import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { Transition } from "../transition"; import { TooltipPosition } from "./types"; @@ -46,7 +46,7 @@ const getBubblePositionStyle = (position: TooltipPosition) => { -webkit-transform: translateY(-50%); transform: translateY(-50%); - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: auto; } `; @@ -60,7 +60,7 @@ const getBubblePositionStyle = (position: TooltipPosition) => { -webkit-transform: translateY(-50%); transform: translateY(-50%); - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: auto; } `; @@ -74,7 +74,7 @@ const getBubblePositionStyle = (position: TooltipPosition) => { -webkit-transform: translateX(-50%); transform: translateX(-50%); - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { max-width: 80vw; } `; @@ -89,7 +89,7 @@ const getBubblePositionStyle = (position: TooltipPosition) => { -webkit-transform: translateX(-50%); transform: translateX(-50%); - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { max-width: 80vw; } `; diff --git a/src/uneditable-section/section-item.styles.tsx b/src/uneditable-section/section-item.styles.tsx index 7ff71dccd..d00febfa2 100644 --- a/src/uneditable-section/section-item.styles.tsx +++ b/src/uneditable-section/section-item.styles.tsx @@ -1,7 +1,7 @@ import { ExclamationTriangleIcon } from "@lifesg/react-icons/exclamation-triangle"; import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; import { V2_TextStyleHelper } from "../v2_text"; import { UneditableSectionItemDisplayWidth } from "./types"; @@ -34,11 +34,11 @@ export const Container = styled.li` } }} - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { grid-column: auto / span 8; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-column: auto / span 4; } diff --git a/src/uneditable-section/uneditable-section.styles.tsx b/src/uneditable-section/uneditable-section.styles.tsx index 0a69e34c1..b2b23145f 100644 --- a/src/uneditable-section/uneditable-section.styles.tsx +++ b/src/uneditable-section/uneditable-section.styles.tsx @@ -1,7 +1,7 @@ import styled from "styled-components"; import { v2_Layout } from "../v2_layout"; import { V2_Color } from "../v2_color"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; // ============================================================================= @@ -42,11 +42,11 @@ export const GridUl = styled.ul` display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { column-gap: 1.5rem; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-column: 0 / span 4; column-gap: 1rem; grid-template-columns: repeat(4, minmax(0, 1fr)); diff --git a/src/v2_layout/col-div.style.tsx b/src/v2_layout/col-div.style.tsx index 0e80f2046..3ffe89065 100644 --- a/src/v2_layout/col-div.style.tsx +++ b/src/v2_layout/col-div.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_MediaQuery } from "../v2_media/media"; +import { V2_MediaQuery } from "../v2_media/media"; // ============================================================================= // STYLE INTERFACES @@ -33,12 +33,12 @@ export const StyledDiv = styled.div` return css` grid-column: ${$desktopStart || "auto"} / span ${$desktopSpan || 1}; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { grid-column: ${$tabletStart || "auto"} / span ${$tabletSpan || 1}; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-column: ${$mobileStart || "auto"} / span ${$mobileSpan || 1}; } diff --git a/src/v2_layout/container.tsx b/src/v2_layout/container.tsx index 4ec345b24..9fe12d885 100644 --- a/src/v2_layout/container.tsx +++ b/src/v2_layout/container.tsx @@ -1,6 +1,6 @@ import React from "react"; import styled, { css } from "styled-components"; -import { v2_MediaQuery } from "../v2_media/media"; +import { V2_MediaQuery } from "../v2_media/media"; import { V2_ContainerProps, V2_ContainerType, V2_DivRef } from "./types"; const Component = (props: V2_ContainerProps, ref: V2_DivRef): JSX.Element => { @@ -57,16 +57,16 @@ const StyledContainer = styled.div` /* Max width restrictions */ max-width: 1320px; - ${v2_MediaQuery.MaxWidth.desktopM} { + ${V2_MediaQuery.MaxWidth.desktopM} { max-width: 1140px; } `; } }} - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { max-width: 720px; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; padding: 0; max-width: unset; @@ -80,12 +80,12 @@ const StyledContainer = styled.div` display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { column-gap: 1.5rem; grid-template-columns: repeat(8, minmax(0, 1fr)); } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { column-gap: 1rem; grid-template-columns: repeat(4, minmax(0, 1fr)); } diff --git a/src/v2_layout/section.tsx b/src/v2_layout/section.tsx index 8c59c98d9..7ac18cbca 100644 --- a/src/v2_layout/section.tsx +++ b/src/v2_layout/section.tsx @@ -1,7 +1,7 @@ import React from "react"; import styled, { css } from "styled-components"; import { V2_DivRef, V2_SectionProps } from "./types"; -import { v2_MediaQuery } from "../v2_media"; +import { V2_MediaQuery } from "../v2_media"; const Component = (props: V2_SectionProps, ref: V2_DivRef): JSX.Element => { const { @@ -42,7 +42,7 @@ const StyledSection = styled.section` ${(props) => { if (props.$stretch) { return css` - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { padding: 0 1.5rem; // Extra enforcement diff --git a/src/v2_media/media.ts b/src/v2_media/media.ts index 2b1f55759..2e29fe201 100644 --- a/src/v2_media/media.ts +++ b/src/v2_media/media.ts @@ -1,18 +1,18 @@ import { MediaWidths as MediaWidthsSpec } from "../spec/media-spec"; -import { v2_MediaType, v2_MediaWidth } from "./types"; +import { V2_MediaType, V2_MediaWidth } from "./types"; // ============================================================================= // HELPER FUNCTION // ============================================================================= const getMediaQuerySpec = (type: "max-width" | "min-width") => { return Object.keys(MediaWidthsSpec).reduce((accumulator, key) => { - const mediaWidth = MediaWidthsSpec[key as keyof v2_MediaWidth]; + const mediaWidth = MediaWidthsSpec[key as keyof V2_MediaWidth]; accumulator[ - key as keyof v2_MediaType + key as keyof V2_MediaType ] = `@media screen and (${type}: ${mediaWidth}px)`; return accumulator; - }, {} as v2_MediaType); + }, {} as V2_MediaType); }; // ============================================================================= @@ -20,10 +20,10 @@ const getMediaQuerySpec = (type: "max-width" | "min-width") => { // ============================================================================= /** @deprecated */ -export const v2_MediaQuery = { +export const V2_MediaQuery = { MaxWidth: getMediaQuerySpec("max-width"), MinWidth: getMediaQuerySpec("min-width"), }; /** @deprecated */ -export const v2_MediaWidths = MediaWidthsSpec; +export const V2_MediaWidths = MediaWidthsSpec; diff --git a/src/v2_media/types.ts b/src/v2_media/types.ts index ebd10cf39..d79437566 100644 --- a/src/v2_media/types.ts +++ b/src/v2_media/types.ts @@ -1,5 +1,5 @@ /** @deprecated */ -export interface v2_MediaWidth { +export interface V2_MediaWidth { mobileS: number; mobileM: number; mobileL: number; @@ -10,7 +10,7 @@ export interface v2_MediaWidth { } /** @deprecated */ -export interface v2_MediaType { +export interface V2_MediaType { mobileS?: string | undefined; mobileM?: string | undefined; mobileL?: string | undefined; diff --git a/stories/animation/doc-elements.tsx b/stories/animation/doc-elements.tsx index 80dd42ee8..416384dbd 100644 --- a/stories/animation/doc-elements.tsx +++ b/stories/animation/doc-elements.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; import { StoryContainer } from "../storybook-common"; export const AnimationDisplay = styled.div` @@ -7,7 +7,7 @@ export const AnimationDisplay = styled.div` grid-template-columns: repeat(3, minmax(0, 1fr)); grid-gap: 1.25rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { grid-template-columns: repeat(1, minmax(0, 1fr)); } `; diff --git a/stories/countdown-timer/doc-elements.tsx b/stories/countdown-timer/doc-elements.tsx index 9ee24da31..43b03d8e1 100644 --- a/stories/countdown-timer/doc-elements.tsx +++ b/stories/countdown-timer/doc-elements.tsx @@ -1,12 +1,12 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; const Page = styled.div` height: 160vh; width: 65vw; margin: auto; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100vw; } `; @@ -16,7 +16,7 @@ const Section = styled.div` justify-content: space-between; gap: 2rem; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: column; align-items: center; } diff --git a/stories/image-button/doc-elements.tsx b/stories/image-button/doc-elements.tsx index 92f6d2b90..384a6956a 100644 --- a/stories/image-button/doc-elements.tsx +++ b/stories/image-button/doc-elements.tsx @@ -1,6 +1,6 @@ import React from "react"; import styled from "styled-components"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; import { V2_Text } from "../../src/v2_text"; // ============================================================================= @@ -12,7 +12,7 @@ export const Wrapper = styled.div` gap: 2rem; align-items: center; - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { grid-template-columns: min-content 1fr; grid-template-rows: repeat(5, 1fr); grid-auto-flow: column dense; @@ -22,7 +22,7 @@ export const Wrapper = styled.div` export const HeadingLabel = styled(V2_Text.H6)` text-align: center; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { text-align: left; align-self: center; } diff --git a/stories/popover/doc-elements.tsx b/stories/popover/doc-elements.tsx index 4330ade4d..5762dbb7c 100644 --- a/stories/popover/doc-elements.tsx +++ b/stories/popover/doc-elements.tsx @@ -1,7 +1,7 @@ import React, { useState } from "react"; import styled from "styled-components"; import { V2_Color } from "../../src/v2_color"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; import { withPopover } from "../../src/popover"; import { V2_Text } from "../../src/v2_text"; @@ -13,7 +13,7 @@ export const Container = styled.div` justify-content: center; margin: 3rem 0; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: column; justify-content: flex-start; align-items: center; @@ -27,7 +27,7 @@ export const Item = styled.div` margin-right: 2.5rem; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { :not(:last-of-type) { margin-right: 0; margin-bottom: 2.5rem; diff --git a/stories/storybook-common/story-container.tsx b/stories/storybook-common/story-container.tsx index 90a89f97d..778711015 100644 --- a/stories/storybook-common/story-container.tsx +++ b/stories/storybook-common/story-container.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; import { MediaWidths } from "../../src/spec/media-spec"; const MINIMUM_SIDE_PADDING = 48; @@ -14,7 +14,7 @@ export const StoryContainer = styled.div` ${MINIMUM_SIDE_PADDING + SIDEBAR_WIDTH + SPACER}px ); - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { min-width: 400px; width: calc( ${MediaWidths.tablet}px - @@ -22,19 +22,19 @@ export const StoryContainer = styled.div` ); } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { min-width: 350px; width: calc( ${MediaWidths.mobileL}px - ${MINIMUM_SIDE_PADDING + SPACER}px ); } - ${v2_MediaQuery.MaxWidth.mobileM} { + ${V2_MediaQuery.MaxWidth.mobileM} { min-width: 0; width: calc(${MediaWidths.mobileM}px - ${MINIMUM_SIDE_PADDING}px); } - ${v2_MediaQuery.MaxWidth.mobileS} { + ${V2_MediaQuery.MaxWidth.mobileS} { width: calc(${MediaWidths.mobileS}px - ${MINIMUM_SIDE_PADDING}px); } `; diff --git a/stories/text-list/doc-elements.tsx b/stories/text-list/doc-elements.tsx index d60c51325..8e31eb43a 100644 --- a/stories/text-list/doc-elements.tsx +++ b/stories/text-list/doc-elements.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; import { TextList } from "../../src/text-list"; // ============================================================================= @@ -34,7 +34,7 @@ export const CustomOrderedList = styled(TextList.Ol)` left: -3rem; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { li { margin-left: 1rem; } diff --git a/stories/text/collection-doc-elements.tsx b/stories/text/collection-doc-elements.tsx index 5c7088abe..a23f980e1 100644 --- a/stories/text/collection-doc-elements.tsx +++ b/stories/text/collection-doc-elements.tsx @@ -1,6 +1,6 @@ import React from "react"; import styled, { ThemeProvider } from "styled-components"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; import { V2_Text, V2_TextStyleHelper, @@ -148,7 +148,7 @@ const FontSizeItem = styled.li` padding-right: 0.5rem; } - ${v2_MediaQuery.MaxWidth.tablet} { + ${V2_MediaQuery.MaxWidth.tablet} { width: 100%; :not(:last-child) { margin-bottom: 2rem; @@ -172,7 +172,7 @@ const FontSpecContainerItem = styled.li` `; const SpecValueLabel = styled(V2_Text.BodySmall)` - ${v2_MediaQuery.MaxWidth.mobileM} { + ${V2_MediaQuery.MaxWidth.mobileM} { font-size: 0.75rem !important; } `; @@ -182,7 +182,7 @@ const FontSpecLabelContainer = styled.div` margin-right: 1rem; ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")} - ${v2_MediaQuery.MaxWidth.mobileM} { + ${V2_MediaQuery.MaxWidth.mobileM} { width: 5rem; ${V2_TextStyleHelper.getTextStyle("XSmall", "semibold")} } diff --git a/stories/time-slot-bar-week/doc-elements.tsx b/stories/time-slot-bar-week/doc-elements.tsx index 5d7c7dc6f..936fc5870 100644 --- a/stories/time-slot-bar-week/doc-elements.tsx +++ b/stories/time-slot-bar-week/doc-elements.tsx @@ -1,11 +1,11 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; export const Wrapper = styled.div` width: 70%; margin: auto; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; } `; diff --git a/stories/time-slot-week-view/doc-elements.tsx b/stories/time-slot-week-view/doc-elements.tsx index 5d7c7dc6f..936fc5870 100644 --- a/stories/time-slot-week-view/doc-elements.tsx +++ b/stories/time-slot-week-view/doc-elements.tsx @@ -1,11 +1,11 @@ import styled from "styled-components"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; export const Wrapper = styled.div` width: 70%; margin: auto; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; } `; diff --git a/stories/toggle/doc-elements.tsx b/stories/toggle/doc-elements.tsx index 7aa927d18..51cf36f70 100644 --- a/stories/toggle/doc-elements.tsx +++ b/stories/toggle/doc-elements.tsx @@ -1,7 +1,7 @@ import React from "react"; import styled, { css } from "styled-components"; import { V2_Text } from "../../src/v2_text"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; interface StyleProps { $layout?: "default" | "vertical"; @@ -31,7 +31,7 @@ export const Wrapper = styled.div` } } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { width: 100%; display: flex; flex-direction: column; @@ -65,7 +65,7 @@ export const Wrapper = styled.div` export const HeadingLabel = styled(V2_Text.H6)` text-align: center; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { text-align: left; align-self: center; } diff --git a/stories/tooltip/doc-elements.tsx b/stories/tooltip/doc-elements.tsx index 49b0409c2..71ea980ff 100644 --- a/stories/tooltip/doc-elements.tsx +++ b/stories/tooltip/doc-elements.tsx @@ -1,7 +1,7 @@ import React, { useState } from "react"; import styled from "styled-components"; import { Button, ButtonProps } from "../../src/button"; -import { v2_MediaQuery } from "../../src/v2_media"; +import { V2_MediaQuery } from "../../src/v2_media"; import { TooltipPosition, withTooltip } from "../../src/tooltip"; // ============================================================================= @@ -12,7 +12,7 @@ export const Container = styled.div` justify-content: center; margin: 3rem 0; - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { flex-direction: column; justify-content: flex-start; align-items: center; @@ -26,7 +26,7 @@ export const Item = styled.div` margin-right: 2.5rem; } - ${v2_MediaQuery.MaxWidth.mobileL} { + ${V2_MediaQuery.MaxWidth.mobileL} { :not(:last-of-type) { margin-right: 0; margin-bottom: 2.5rem; From aedf8e9149ab6fb4c1c2f4c0e00afc401677f3e5 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 6 Aug 2024 15:40:19 +0800 Subject: [PATCH 0325/1949] [CCUBE-1514][MAHI]Deprecate design token to V2 --- src/button/button.style.tsx | 16 +++++----- src/data-table/data-table.styles.tsx | 14 ++++----- src/input-group/input-group.style.tsx | 6 ++-- src/input-textarea/textarea.style.tsx | 6 ++-- src/navbar/menu.styles.tsx | 4 +-- .../dropdown-wrapper.styles.tsx | 6 ++-- src/shared/input-wrapper/input-wrapper.tsx | 6 ++-- .../base-design-token-set.ts | 4 +-- .../design-token-spec/rbs-design-token-set.ts | 4 +-- src/theme/design-token-helper.ts | 6 ++-- src/theme/types.ts | 8 ++--- src/v2_design-token/design-token.ts | 6 ++-- src/v2_design-token/types.ts | 30 +++++++++---------- 13 files changed, 58 insertions(+), 58 deletions(-) diff --git a/src/button/button.style.tsx b/src/button/button.style.tsx index 1217e70e9..41ea5046a 100644 --- a/src/button/button.style.tsx +++ b/src/button/button.style.tsx @@ -4,7 +4,7 @@ import { V2_MediaQuery } from "../v2_media/media"; import { ComponentLoadingSpinner } from "../shared/component-loading-spinner/component-loading-spinner"; import { V2_TextStyleHelper } from "../v2_text"; import { MainStyleProps } from "./types"; -import { v2_DesignToken } from "../v2_design-token"; +import { V2_DesignToken } from "../v2_design-token"; export const Main = styled.button` padding: 0.5rem 1rem; @@ -32,11 +32,11 @@ export const Main = styled.button` background-color: ${V2_Color.Neutral[8]}; border: 1px solid ${props.$buttonIsDanger - ? v2_DesignToken.Button.Danger.Border + ? V2_DesignToken.Button.Danger.Border : V2_Color.Primary}; color: ${props.$buttonIsDanger - ? v2_DesignToken.Button.Danger.Primary + ? V2_DesignToken.Button.Danger.Primary : V2_Color.Primary}; `; case "light": @@ -45,7 +45,7 @@ export const Main = styled.button` border: 1px solid ${V2_Color.Neutral[5]}; color: ${props.$buttonIsDanger - ? v2_DesignToken.Button.Danger.Primary + ? V2_DesignToken.Button.Danger.Primary : V2_Color.Primary}; `; case "disabled": @@ -71,20 +71,20 @@ export const Main = styled.button` } color: ${props.$buttonIsDanger - ? v2_DesignToken.Button.Danger.Primary + ? V2_DesignToken.Button.Danger.Primary : V2_Color.Primary}; :hover, :active, :focus { color: ${props.$buttonIsDanger - ? v2_DesignToken.Button.Danger.Hover + ? V2_DesignToken.Button.Danger.Hover : V2_Color.Secondary}; } `; default: return css` background-color: ${props.$buttonIsDanger - ? v2_DesignToken.Button.Danger.BackgroundColor + ? V2_DesignToken.Button.Danger.BackgroundColor : V2_Color.Primary}; border: 1px solid transparent; @@ -128,7 +128,7 @@ export const Spinner = styled(ComponentLoadingSpinner)` margin-right: 0.5rem; ${(props) => { let color = props.$buttonIsDanger - ? v2_DesignToken.Button.Danger.Primary + ? V2_DesignToken.Button.Danger.Primary : V2_Color.Primary(props); switch (props.$buttonStyle) { case "secondary": diff --git a/src/data-table/data-table.styles.tsx b/src/data-table/data-table.styles.tsx index 6de18c1f1..4e0b948c5 100644 --- a/src/data-table/data-table.styles.tsx +++ b/src/data-table/data-table.styles.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; import { ErrorDisplay } from "../error-display"; -import { v2_DesignToken } from "../v2_design-token"; +import { V2_DesignToken } from "../v2_design-token"; import { V2_Text } from "../v2_text"; // ============================================================================= @@ -146,12 +146,12 @@ export const ActionBar = styled.div` padding: 1rem; border-top: 1px solid ${borderColor}; border-radius: 0 0 4px 4px; - background-color: ${v2_DesignToken.Table.Cell.Selected}; + background-color: ${V2_DesignToken.Table.Cell.Selected}; transition: all 300ms ease; `; export const HeaderRow = styled.tr` - background-color: ${v2_DesignToken.Table.Header}; + background-color: ${V2_DesignToken.Table.Header}; height: 6rem; border-bottom: 1px solid ${borderColor}; `; @@ -188,15 +188,15 @@ export const BodyRow = styled.tr` background-color: ${(props) => { if (props.$isSelected) { return css` - ${v2_DesignToken.Table.Cell.Selected}; + ${V2_DesignToken.Table.Cell.Selected}; `; } else if (props.$alternating) { return css` - ${v2_DesignToken.Table.Cell.Primary}; + ${V2_DesignToken.Table.Cell.Primary}; `; } else { return css` - ${v2_DesignToken.Table.Cell.Secondary}; + ${V2_DesignToken.Table.Cell.Secondary}; `; } }}; @@ -205,7 +205,7 @@ export const BodyRow = styled.tr` ${(props) => { if (!props.$isSelected && props.$isSelectable) { return css` - background-color: ${v2_DesignToken.Table.Cell.Hover}; + background-color: ${V2_DesignToken.Table.Cell.Hover}; `; } }}; diff --git a/src/input-group/input-group.style.tsx b/src/input-group/input-group.style.tsx index fb9e0202e..9865930be 100644 --- a/src/input-group/input-group.style.tsx +++ b/src/input-group/input-group.style.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_DesignToken } from "../v2_design-token"; +import { V2_DesignToken } from "../v2_design-token"; import { Input } from "../input/input"; import { V2_TextStyleHelper } from "../v2_text"; import { InputGroupAddonPosition } from "./types"; @@ -35,7 +35,7 @@ export const Container = styled.div` :focus-within { border: 1px solid ${V2_Color.Accent.Light[1]}; - box-shadow: ${v2_DesignToken.InputBoxShadow}; + box-shadow: ${V2_DesignToken.InputBoxShadow}; } ${(props) => { @@ -68,7 +68,7 @@ export const Container = styled.div` :focus-within { border: 1px solid ${V2_Color.Validation.Red.Border(props)}; - box-shadow: ${v2_DesignToken.InputErrorBoxShadow}; + box-shadow: ${V2_DesignToken.InputErrorBoxShadow}; } `; } diff --git a/src/input-textarea/textarea.style.tsx b/src/input-textarea/textarea.style.tsx index 9673665f9..cfbe47808 100644 --- a/src/input-textarea/textarea.style.tsx +++ b/src/input-textarea/textarea.style.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_DesignToken } from "../v2_design-token"; +import { V2_DesignToken } from "../v2_design-token"; import { V2_TextStyleHelper } from "../v2_text"; import { Transition } from "../transition"; @@ -36,7 +36,7 @@ export const Element = styled.textarea` :active { outline: none; border: 1px solid ${V2_Color.Accent.Light[1]}; - box-shadow: ${v2_DesignToken.InputBoxShadow}; + box-shadow: ${V2_DesignToken.InputBoxShadow}; } ::placeholder, @@ -76,7 +76,7 @@ export const Element = styled.textarea` :focus, :active { border: 1px solid ${V2_Color.Validation.Red.Border(props)}; - box-shadow: ${v2_DesignToken.InputErrorBoxShadow}; + box-shadow: ${V2_DesignToken.InputErrorBoxShadow}; } `; } diff --git a/src/navbar/menu.styles.tsx b/src/navbar/menu.styles.tsx index 6e196dca6..7063fefac 100644 --- a/src/navbar/menu.styles.tsx +++ b/src/navbar/menu.styles.tsx @@ -2,7 +2,7 @@ import styled from "styled-components"; import { V2_Color } from "../v2_color"; import { V2_MediaQuery } from "../v2_media"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; -import { v2_DesignToken } from "../v2_design-token"; +import { V2_DesignToken } from "../v2_design-token"; // ============================================================================= // STYLE INTERFACE, transient props are denoted with $ // See more https://styled-components.com/docs/api#transient-props @@ -26,7 +26,7 @@ export const Wrapper = styled.ul` background: ${V2_Color.Neutral[8]}; border-radius: 0 0 0.5rem 0.5rem; - box-shadow: ${v2_DesignToken.ElevationBoxShadow}; + box-shadow: ${V2_DesignToken.ElevationBoxShadow}; `; export const MobileWrapper = styled.ul` diff --git a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx index aa5b5acf0..9e61d9731 100644 --- a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx +++ b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx @@ -1,7 +1,7 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import styled, { css, keyframes } from "styled-components"; import { V2_Color } from "../../v2_color"; -import { v2_DesignToken } from "../../v2_design-token"; +import { V2_DesignToken } from "../../v2_design-token"; import { V2_TextStyle, V2_TextStyleHelper } from "../../v2_text"; import { Transition } from "../../transition"; import { DropdownVariantType, TruncateType } from "../dropdown-list/types"; @@ -102,7 +102,7 @@ export const ElementBoundary = styled.div` :focus-within { border: 1px solid ${V2_Color.Accent.Light[1]}; - box-shadow: ${v2_DesignToken.InputBoxShadow}; + box-shadow: ${V2_DesignToken.InputBoxShadow}; } ${(props) => { @@ -155,7 +155,7 @@ export const ElementBoundary = styled.div` :focus-within { border: 1px solid ${V2_Color.Validation.Red.Border(props)}; - box-shadow: ${v2_DesignToken.InputErrorBoxShadow}; + box-shadow: ${V2_DesignToken.InputErrorBoxShadow}; } `; } diff --git a/src/shared/input-wrapper/input-wrapper.tsx b/src/shared/input-wrapper/input-wrapper.tsx index 4d985aa0f..ded44f56e 100644 --- a/src/shared/input-wrapper/input-wrapper.tsx +++ b/src/shared/input-wrapper/input-wrapper.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../../v2_color"; -import { v2_DesignToken } from "../../v2_design-token"; +import { V2_DesignToken } from "../../v2_design-token"; import { V2_TextStyleHelper } from "../../v2_text"; import { DropdownVariantType } from "../dropdown-list/types"; @@ -25,7 +25,7 @@ export interface InputStyleProps { // ============================================================================= const defaultFocusCss = css` border: 1px solid ${V2_Color.Accent.Light[1]}; - box-shadow: ${v2_DesignToken.InputBoxShadow}; + box-shadow: ${V2_DesignToken.InputBoxShadow}; `; const readOnlyFocusCss = css` @@ -40,7 +40,7 @@ const disabledFocusCss = css` const errorFocusCss = css` border: 1px solid ${V2_Color.Validation.Red.Border}; - box-shadow: ${v2_DesignToken.InputErrorBoxShadow}; + box-shadow: ${V2_DesignToken.InputErrorBoxShadow}; `; /** diff --git a/src/spec/design-token-spec/base-design-token-set.ts b/src/spec/design-token-spec/base-design-token-set.ts index 79d2d5f5c..0a70519a2 100644 --- a/src/spec/design-token-spec/base-design-token-set.ts +++ b/src/spec/design-token-spec/base-design-token-set.ts @@ -1,8 +1,8 @@ import { css } from "styled-components"; import { V2_Color } from "../../v2_color/color"; -import { v2_DesignTokenSet } from "../../v2_design-token/types"; +import { V2_DesignTokenSet } from "../../v2_design-token/types"; -export const BaseDesignTokenSet: v2_DesignTokenSet = { +export const BaseDesignTokenSet: V2_DesignTokenSet = { InputBoxShadow: css` inset 0 0 4px 0px ${V2_Color.Shadow.Accent} `, diff --git a/src/spec/design-token-spec/rbs-design-token-set.ts b/src/spec/design-token-spec/rbs-design-token-set.ts index 96b801afa..a5ab6e08b 100644 --- a/src/spec/design-token-spec/rbs-design-token-set.ts +++ b/src/spec/design-token-spec/rbs-design-token-set.ts @@ -1,8 +1,8 @@ import { css } from "styled-components"; import { V2_Color } from "../../v2_color/color"; -import { v2_DesignTokenSet } from "../../v2_design-token/types"; +import { V2_DesignTokenSet } from "../../v2_design-token/types"; -export const RBSDesignTokenSet: v2_DesignTokenSet = { +export const RBSDesignTokenSet: V2_DesignTokenSet = { InputBoxShadow: css` inset 0 0 3px 0px ${V2_Color.Shadow.Accent} `, diff --git a/src/theme/design-token-helper.ts b/src/theme/design-token-helper.ts index 782e4ec32..e005f45de 100644 --- a/src/theme/design-token-helper.ts +++ b/src/theme/design-token-helper.ts @@ -1,4 +1,4 @@ -import { v2_CssValue, v2_DesignTokenSet } from "../v2_design-token/types"; +import { CssValue, V2_DesignTokenSet } from "../v2_design-token/types"; import { BaseDesignTokenSet } from "../spec/design-token-spec/base-design-token-set"; import { RBSDesignTokenSet } from "../spec/design-token-spec/rbs-design-token-set"; @@ -29,9 +29,9 @@ const DesignTokenSpec: ThemeCollectionSpec< // HELPER FUNCTIONS // ============================================================================= export const getThemeDesignToken = (attributePath: string) => { - return (props: any): v2_CssValue => { + return (props: any): CssValue => { const theme = props.theme as ThemeSpec; - const DesignTokenSet: v2_DesignTokenSet = getCollection( + const DesignTokenSet: V2_DesignTokenSet = getCollection( DesignTokenSpec, theme[ThemeContextKeys.designTokenScheme] ); diff --git a/src/theme/types.ts b/src/theme/types.ts index 329980d60..a0dbf5d51 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -1,8 +1,8 @@ import { V2_ColorSet, V2_ColorSetOptions } from "../v2_color/types"; import { - v2_DesignTokenSet, - v2_DesignTokenSetOptions, + V2_DesignTokenSet, + V2_DesignTokenSetOptions, } from "../v2_design-token/types"; import { V2_TextStyleSetOptionsType, @@ -38,7 +38,7 @@ export type FontStyleCollectionsMap = { // ============================================================================= export type DesignTokenScheme = "base" | "rbs"; export type DesignTokenCollectionsMap = { - [key in DesignTokenScheme]: v2_DesignTokenSet; + [key in DesignTokenScheme]: V2_DesignTokenSet; }; // ============================================================================= @@ -61,7 +61,7 @@ export interface ThemeSpecOptions { /** for color customisation, can specify subset of set */ color?: V2_ColorSetOptions | undefined; textStyle?: V2_TextStyleSetOptionsType | undefined; - designToken?: v2_DesignTokenSetOptions | undefined; + designToken?: V2_DesignTokenSetOptions | undefined; } export interface ThemeSpec { diff --git a/src/v2_design-token/design-token.ts b/src/v2_design-token/design-token.ts index 8dd31ae20..8cca57168 100644 --- a/src/v2_design-token/design-token.ts +++ b/src/v2_design-token/design-token.ts @@ -1,11 +1,11 @@ import { getThemeDesignToken } from "../theme/design-token-helper"; import { PropertiesToType } from "../util/utility-types"; /** @deprecated */ -import { v2_DesignTokenSet } from "./types"; +import { V2_DesignTokenSet } from "./types"; /** @deprecated */ -export const v2_DesignToken: PropertiesToType< - v2_DesignTokenSet, +export const V2_DesignToken: PropertiesToType< + V2_DesignTokenSet, ReturnType > = { InputBoxShadow: getThemeDesignToken("InputBoxShadow"), diff --git a/src/v2_design-token/types.ts b/src/v2_design-token/types.ts index d6359df1e..4fd0840aa 100644 --- a/src/v2_design-token/types.ts +++ b/src/v2_design-token/types.ts @@ -1,31 +1,31 @@ import { SimpleInterpolation, css } from "styled-components"; /** @deprecated */ -export type v2_CssValue = SimpleInterpolation | ReturnType; +export type CssValue = SimpleInterpolation | ReturnType; /** @deprecated */ -export interface v2_DesignTokenSet { - InputBoxShadow: v2_CssValue; - InputErrorBoxShadow: v2_CssValue; - ElevationBoxShadow: v2_CssValue; +export interface V2_DesignTokenSet { + InputBoxShadow: CssValue; + InputErrorBoxShadow: CssValue; + ElevationBoxShadow: CssValue; Table: { - Header: v2_CssValue; + Header: CssValue; Cell: { - Primary: v2_CssValue; - Secondary: v2_CssValue; - Selected: v2_CssValue; - Hover: v2_CssValue; + Primary: CssValue; + Secondary: CssValue; + Selected: CssValue; + Hover: CssValue; }; }; Button: { Danger: { - Hover: v2_CssValue; - BackgroundColor: v2_CssValue; - Primary: v2_CssValue; - Border: v2_CssValue; + Hover: CssValue; + BackgroundColor: CssValue; + Primary: CssValue; + Border: CssValue; }; }; } /** @deprecated */ -export type v2_DesignTokenSetOptions = Partial; +export type V2_DesignTokenSetOptions = Partial; From 50fd67d7dea74a2bccae921d64eb9bd749237193 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 6 Aug 2024 16:54:04 +0800 Subject: [PATCH 0326/1949] [CCUBE-1514][MAHI]Most recent changes with refactoring of codemod --- codemods/deprecate-version/deprecate-data.ts | 147 ++++++++----------- codemods/deprecate-version/index.ts | 14 +- tests/codemod/deprecate-version/test-data.ts | 12 +- 3 files changed, 75 insertions(+), 98 deletions(-) diff --git a/codemods/deprecate-version/deprecate-data.ts b/codemods/deprecate-version/deprecate-data.ts index 4a069b792..96872930f 100644 --- a/codemods/deprecate-version/deprecate-data.ts +++ b/codemods/deprecate-version/deprecate-data.ts @@ -1,202 +1,173 @@ export const componentMap = [ { oldName: "DesignToken", - newName: "v2_DesignToken", - newPath: "v2_design-token", + newName: "V2_DesignToken", }, { oldName: "DesignTokenSet", - newName: "v2_DesignTokenSet", - newPath: "v2_design-token", - }, - { - oldName: "CssValue", - newName: "v2_CssValue", - newPath: "v2_design-token", + newName: "V2_DesignTokenSet", }, { oldName: "DesignTokenSetOptions", - newName: "v2_DesignTokenSetOptions", - newPath: "v2_design-token", + newName: "V2_DesignTokenSetOptions", }, { oldName: "MediaQuery", - newName: "v2_MediaQuery", - newPath: "v2_media", + newName: "V2_MediaQuery", }, { oldName: "MediaWidths", - newName: "v2_MediaWidths", - newPath: "v2_media", + newName: "V2_MediaWidths", }, { oldName: "MediaWidth", - newName: "v2_MediaWidth", - newPath: "v2_media", + newName: "V2_MediaWidth", }, { oldName: "MediaType", - newName: "v2_MediaType", - newPath: "v2_media", + newName: "V2_MediaType", }, { oldName: "Color", - newName: "v2_Color", - newPath: "v2_color", + newName: "V2_Color", }, { oldName: "ColorSet", - newName: "v2_ColorSet", - newPath: "v2_color", + newName: "V2_ColorSet", }, { oldName: "ValidationElementAttributes", - newName: "v2_ValidationElementAttributes", - newPath: "v2_color", + newName: "V2_ValidationElementAttributes", }, { oldName: "ValidationTypes", - newName: "v2_ValidationTypes", - newPath: "v2_color", + newName: "V2_ValidationTypes", }, { oldName: "ColorSetOptions", - newName: "v2_ColorSetOptions", - newPath: "v2_color", + newName: "V2_ColorSetOptions", }, { oldName: "Text", - newName: "v2_Text", - newPath: "v2_text", + newName: "V2_Text", }, { oldName: "TextStyleHelper", - newName: "v2_TextStyleHelper", - newPath: "v2_text", + newName: "V2_TextStyleHelper", }, { oldName: "TextStyle", - newName: "v2_TextStyle", - newPath: "v2_text", + newName: "V2_TextStyle", }, { oldName: "TextSizeType", - newName: "v2_TextSizeType", - newPath: "v2_text", + newName: "V2_TextSizeType", }, { oldName: "TextLinkSizeType", - newName: "v2_TextLinkSizeType", - newPath: "v2_text", + newName: "V2_TextLinkSizeType", }, { oldName: "TextStyleSpec", - newName: "v2_TextStyleSpec", - newPath: "v2_text", + newName: "V2_TextStyleSpec", }, { oldName: "TextStyleSetType", - newName: "v2_TextStyleSetType", - newPath: "v2_text", + newName: "V2_TextStyleSetType", }, { oldName: "TextStyleSetOptionsType", - newName: "v2_TextStyleSetOptionsType", - newPath: "v2_text", + newName: "V2_TextStyleSetOptionsType", }, { oldName: "TextWeight", - newName: "v2_TextWeight", - newPath: "v2_text", + newName: "V2_TextWeight", }, { oldName: "TextProps", - newName: "v2_TextProps", - newPath: "v2_text", + newName: "V2_TextProps", }, { oldName: "TextLinkProps", - newName: "v2_TextLinkProps", - newPath: "v2_text", + newName: "V2_TextLinkProps", }, { oldName: "TextLinkStyleProps", - newName: "v2_TextLinkStyleProps", - newPath: "v2_text", + newName: "V2_TextLinkStyleProps", }, { oldName: "Layout", - newName: "v2_Layout", - newPath: "v2_layout", - }, - { - oldName: "StyledDivStyleProps", - newName: "v2_StyledDivStyleProps", - newPath: "v2_layout", - }, - { - oldName: "StyledDiv", - newName: "v2_StyledDiv", - newPath: "v2_layout", + newName: "V2_Layout", }, { oldName: "ColDiv", - newName: "v2_ColDiv", - newPath: "v2_layout", + newName: "V2_ColDiv", }, { oldName: "Container", - newName: "v2_Container", - newPath: "v2_layout", + newName: "V2_Container", }, { oldName: "Content", - newName: "v2_Content", - newPath: "v2_layout", + newName: "V2_Content", }, { oldName: "Section", - newName: "v2_Section", - newPath: "v2_layout", + newName: "V2_Section", }, { oldName: "CommonLayoutProps", - newName: "v2_CommonLayoutProps", - newPath: "v2_layout", + newName: "V2_CommonLayoutProps", }, { oldName: "SectionProps", - newName: "v2_SectionProps", - newPath: "v2_layout", + newName: "V2_SectionProps", }, { oldName: "ContainerType", - newName: "v2_ContainerType", - newPath: "v2_layout", + newName: "V2_ContainerType", }, { oldName: "ContainerProps", - newName: "v2_ContainerProps", - newPath: "v2_layout", + newName: "V2_ContainerProps", }, { oldName: "ContentProps", - newName: "v2_ContentProps", - newPath: "v2_layout", + newName: "V2_ContentProps", }, { oldName: "DivRef", - newName: "v2_DivRef", - newPath: "v2_layout", + newName: "V2_DivRef", }, { oldName: "ColProps", - newName: "v2_ColProps", - newPath: "v2_layout", + newName: "V2_ColProps", }, { oldName: "ColDivProps", - newName: "v2_ColDivProps", + newName: "V2_ColDivProps", + }, +]; + +export const pathMap = [ + { + oldPath: "design-token", + newPath: "v2_design-token", + }, + { + oldPath: "color", + newPath: "v2_color", + }, + { + oldPath: "media", + newPath: "v2_media", + }, + { + oldPath: "text", + newPath: "v2_text", + }, + { + oldPath: "layout", newPath: "v2_layout", }, ]; diff --git a/codemods/deprecate-version/index.ts b/codemods/deprecate-version/index.ts index 3ba54e234..e47067935 100644 --- a/codemods/deprecate-version/index.ts +++ b/codemods/deprecate-version/index.ts @@ -1,5 +1,5 @@ import { API, FileInfo, JSCodeshift } from "jscodeshift"; -import { componentMap } from "./deprecate-data"; +import { componentMap, pathMap } from "./deprecate-data"; export default function transformer(file: FileInfo, api: API, options: any) { const j: JSCodeshift = api.jscodeshift; @@ -16,7 +16,7 @@ export default function transformer(file: FileInfo, api: API, options: any) { typeof importPath === "string" && importPath.startsWith("@lifesg/"); if (isPathLib) { - componentMap.forEach(({ oldName, newName, newPath }) => { + componentMap.forEach(({ oldName, newName }) => { let importChanged = false; // change specifiers @@ -50,8 +50,14 @@ export default function transformer(file: FileInfo, api: API, options: any) { pathParts[pathParts.length - 1] !== "react-design-system" ) { - pathParts[pathParts.length - 1] = newPath; - path.node.source.value = pathParts.join("/"); + const lastPathPart = pathParts[pathParts.length - 1]; + // map with pathMap to find the new path + pathMap.forEach(({ oldPath, newPath }) => { + if (lastPathPart === oldPath) { + pathParts[pathParts.length - 1] = newPath; + path.node.source.value = pathParts.join("/"); + } + }); } } }); diff --git a/tests/codemod/deprecate-version/test-data.ts b/tests/codemod/deprecate-version/test-data.ts index 0bffe7bdd..442b8b4b3 100644 --- a/tests/codemod/deprecate-version/test-data.ts +++ b/tests/codemod/deprecate-version/test-data.ts @@ -17,17 +17,17 @@ export default Component; `; export const expectedOutputCode = ` -import { v2_Color } from "@lifesg/react-design-system/v2_color"; -import { v2_MediaQuery } from "@lifesg/react-design-system"; -import { v2_Text } from "@lifesg/react-design-system/v2_text"; +import { V2_Color } from "@lifesg/react-design-system/v2_color"; +import { V2_MediaQuery } from "@lifesg/react-design-system"; +import { V2_Text } from "@lifesg/react-design-system/v2_text"; import {DesignToken} from "../design-token"; const Component = () => ( <> - - - + + + ); From bd78fb005bf574e16ab939420f253b490eb7db38 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 7 Aug 2024 12:37:12 +0800 Subject: [PATCH 0327/1949] [CCUBE-1514][MAHI]Made PR changes --- .eslintrc | 3 +- .../data.ts} | 0 .../index.ts | 2 +- package-lock.json | 13 ++-- package.json | 5 +- rollup.config.js | 30 +++++---- scripts/build-util.js | 12 ++++ src/footer/footer.style.tsx | 6 +- src/form/form-wrapper.style.tsx | 4 +- src/navbar/navbar.tsx | 6 +- .../notification-banner.styles.tsx | 4 +- .../uneditable-section.styles.tsx | 4 +- src/v2_layout/index.ts | 10 +-- stories/divider/divider.stories.tsx | 10 +-- stories/divider/doc-elements.tsx | 8 +-- stories/footer/footer.stories.tsx | 6 +- .../form-date-input.stories.tsx | 6 +- .../form-date-range-input.stories.tsx | 6 +- .../form-e-signature.stories.tsx | 6 +- .../form-histogram-slider.stories.tsx | 6 +- .../form-input-group.stories.tsx | 6 +- .../form/form-input/form-input.stories.tsx | 6 +- .../form-masked-input.stories.tsx | 6 +- .../form-multi-select.stories.tsx | 6 +- .../form-nested-multi-select.stories.tsx | 6 +- .../form-nested-select.stories.tsx | 6 +- .../form-phone-number-input.stories.tsx | 6 +- .../form-predictive-text-input.stories.tsx | 6 +- .../form-range-select.stories.tsx | 6 +- .../form-range-slider.stories.tsx | 6 +- .../form/form-select/form-select.stories.tsx | 6 +- .../form/form-slider/form-slider.stories.tsx | 6 +- .../form-textarea/form-textarea.stories.tsx | 6 +- .../form-time-range-picker.stories.tsx | 6 +- .../form-timepicker.stories.tsx | 6 +- .../form-unit-number-input.stories.tsx | 6 +- stories/layout/col-div.stories.tsx | 66 +++++++++---------- stories/layout/doc-elements.tsx | 10 +-- stories/layout/layout.stories.tsx | 22 +++---- stories/notification-banner/doc-elements.tsx | 4 +- tests/codemod/deprecate-version/test-data.ts | 36 ++++++++-- .../deprecate-version/transformer.spec.tsx | 10 +-- 42 files changed, 211 insertions(+), 180 deletions(-) rename codemods/{deprecate-version/deprecate-data.ts => deprecate-v2-tokens/data.ts} (100%) rename codemods/{deprecate-version => deprecate-v2-tokens}/index.ts (98%) diff --git a/.eslintrc b/.eslintrc index 53d83b6f2..ca8821681 100644 --- a/.eslintrc +++ b/.eslintrc @@ -73,8 +73,7 @@ "@typescript-eslint/no-var-requires": "off", "@typescript-eslint/no-empty-interface": "off", "@typescript-eslint/naming-convention": [ - "off", - // changed from error to off for consistency for deprecating to "v2_" + "error", { "selector": ["interface", "class"], "format": ["PascalCase"] diff --git a/codemods/deprecate-version/deprecate-data.ts b/codemods/deprecate-v2-tokens/data.ts similarity index 100% rename from codemods/deprecate-version/deprecate-data.ts rename to codemods/deprecate-v2-tokens/data.ts diff --git a/codemods/deprecate-version/index.ts b/codemods/deprecate-v2-tokens/index.ts similarity index 98% rename from codemods/deprecate-version/index.ts rename to codemods/deprecate-v2-tokens/index.ts index e47067935..953b6d89e 100644 --- a/codemods/deprecate-version/index.ts +++ b/codemods/deprecate-v2-tokens/index.ts @@ -1,5 +1,5 @@ import { API, FileInfo, JSCodeshift } from "jscodeshift"; -import { componentMap, pathMap } from "./deprecate-data"; +import { componentMap, pathMap } from "./data"; export default function transformer(file: FileInfo, api: API, options: any) { const j: JSCodeshift = api.jscodeshift; diff --git a/package-lock.json b/package-lock.json index 7e7134077..2a9e1a882 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,8 +16,7 @@ "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", - "react-zoom-pan-pinch": "^3.3.0", - "recast": "^0.23.9" + "react-zoom-pan-pinch": "^3.3.0" }, "devDependencies": { "@babel/core": "^7.25.2", @@ -10764,6 +10763,7 @@ "version": "0.16.1", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, "dependencies": { "tslib": "^2.0.1" }, @@ -14276,6 +14276,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "devOptional": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -29821,6 +29822,7 @@ "version": "0.23.9", "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", + "dev": true, "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", @@ -29836,6 +29838,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -32852,7 +32855,8 @@ "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true }, "node_modules/tinyspy": { "version": "2.2.1", @@ -33022,7 +33026,8 @@ "node_modules/tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, "node_modules/tsutils": { "version": "3.21.0", diff --git a/package.json b/package.json index 21eefab8e..4a4af6ff2 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "publish-lib": "npm publish ./dist", "start": "rollup -c -w", "test": "jest --coverage", + "test:codemods": "jest --coverage tests/codemod", "test-watch": "jest --watch", "test-e2e": "playwright test", "prepare": "(test -d ./.git && npx husky install) || true", @@ -38,12 +39,10 @@ "dependencies": { "@floating-ui/dom": "^1.5.4", "@floating-ui/react": "^0.26.6", - "@lifesg/react-design-system": "^2.7.0-canary.3", "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", - "react-zoom-pan-pinch": "^3.3.0", - "recast": "^0.23.9" + "react-zoom-pan-pinch": "^3.3.0" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/rollup.config.js b/rollup.config.js index b72853a77..2cd5b58a5 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -8,7 +8,7 @@ import postcss from "rollup-plugin-postcss"; import terser from "@rollup/plugin-terser"; import generatePackageJson from "rollup-plugin-generate-package-json"; import pkg from "./package.json"; -import { getFolders } from "./scripts/build-util"; +import { getFolders, getCodemodFolders } from "./scripts/build-util"; export const plugins = [ peerDepsExternal(), // Add the externals for me. [react, react-dom, styled-components] @@ -54,19 +54,21 @@ const subfolderPlugins = (folderName) => [ ]; // Build for codemod scripts -const folderCodemodBuildConfigs = getFolders("./codemods").map((folder) => { - return { - input: `codemods/${folder}/index.ts`, - output: { - file: `dist/codemods/${folder}/index.js`, - sourcemap: true, - exports: "named", - format: "esm", - }, - plugins: subfolderPlugins(folder), - external: ["react", "react-dom", "styled-components"], - }; -}); +const folderCodemodBuildConfigs = getCodemodFolders("./codemods").map( + (folder) => { + return { + input: `codemods/${folder}/index.ts`, + output: { + file: `dist/codemods/${folder}/index.js`, + sourcemap: true, + exports: "named", + format: "esm", + }, + plugins: subfolderPlugins(folder), + external: ["react", "react-dom", "styled-components"], + }; + } +); const folderBuildConfigs = getFolders("./src").map((folder) => { return { diff --git a/scripts/build-util.js b/scripts/build-util.js index 2f4cb5a82..8fdb64687 100644 --- a/scripts/build-util.js +++ b/scripts/build-util.js @@ -18,3 +18,15 @@ export const getFolders = (entry) => { return dirsToUse; }; + +export const getCodemodFolders = (entry) => { + const dirs = fs.readdirSync(entry); + + const dirsToIgnore = []; + + const dirsToUse = dirs + .filter((dirName) => path.extname(dirName) === "") + .filter((dirName) => dirsToIgnore.indexOf(dirName) === -1); + + return dirsToUse; +}; diff --git a/src/footer/footer.style.tsx b/src/footer/footer.style.tsx index a05ceda88..d1c46da24 100644 --- a/src/footer/footer.style.tsx +++ b/src/footer/footer.style.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Layout } from "../v2_layout"; +import { V2_Layout } from "../v2_layout"; import { V2_MediaQuery } from "../v2_media"; import { V2_Color } from "../v2_color"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; @@ -20,7 +20,7 @@ export const StyledFooterLink = styled(V2_Text.Hyperlink.Small)` // TOP SECTION // ============================================================================= -export const TopSection = styled(v2_Layout.V2_Content)` +export const TopSection = styled(V2_Layout.Content)` padding: 4rem 0; border-bottom: 1px solid ${V2_Color.Neutral[5]}; @@ -118,7 +118,7 @@ export const MobileOnlyBorder = styled.div` } `; -export const BottomSection = styled(v2_Layout.V2_Content)` +export const BottomSection = styled(V2_Layout.Content)` padding: 1.375rem 0; ${V2_MediaQuery.MaxWidth.tablet} { diff --git a/src/form/form-wrapper.style.tsx b/src/form/form-wrapper.style.tsx index 08ddec1ce..569585476 100644 --- a/src/form/form-wrapper.style.tsx +++ b/src/form/form-wrapper.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { v2_Layout } from "../v2_layout"; +import { V2_Layout } from "../v2_layout"; const commonStyles = css` display: flex; @@ -14,6 +14,6 @@ export const Container = styled.div` ${commonStyles} `; -export const ColDivContainer = styled(v2_Layout.V2_ColDiv)` +export const ColDivContainer = styled(V2_Layout.ColDiv)` ${commonStyles} `; diff --git a/src/navbar/navbar.tsx b/src/navbar/navbar.tsx index 53d230fed..c8e374236 100644 --- a/src/navbar/navbar.tsx +++ b/src/navbar/navbar.tsx @@ -6,7 +6,7 @@ import React, { useState, } from "react"; import { ButtonProps } from "../button/types"; -import { v2_Layout } from "../v2_layout"; +import { V2_Layout } from "../v2_layout"; import { Masthead } from "../masthead/masthead"; import { Overlay } from "../overlay/overlay"; import { MediaWidths } from "../spec/media-spec"; @@ -268,7 +268,7 @@ const Component = ( const renderNavbar = () => { return ( - +

    {!hideNavElements && renderDrawer()} - + ); }; diff --git a/src/notification-banner/notification-banner.styles.tsx b/src/notification-banner/notification-banner.styles.tsx index 5a8f393ba..af47c9a4e 100644 --- a/src/notification-banner/notification-banner.styles.tsx +++ b/src/notification-banner/notification-banner.styles.tsx @@ -1,7 +1,7 @@ import { CrossIcon } from "@lifesg/react-icons/cross"; import styled, { css } from "styled-components"; import { V2_Color } from "../v2_color"; -import { v2_Layout } from "../v2_layout"; +import { V2_Layout } from "../v2_layout"; import { ClickableIcon } from "../shared/clickable-icon"; import { V2_Text, V2_TextStyleHelper } from "../v2_text"; import { Transition } from "../transition"; @@ -51,7 +51,7 @@ export const Wrapper = styled.div` cursor: ${(props) => (props.$clickable ? "pointer" : "default")}; `; -export const Container = styled(v2_Layout.V2_Content)` +export const Container = styled(V2_Layout.Content)` display: flex; `; diff --git a/src/uneditable-section/uneditable-section.styles.tsx b/src/uneditable-section/uneditable-section.styles.tsx index b2b23145f..8275d2b8e 100644 --- a/src/uneditable-section/uneditable-section.styles.tsx +++ b/src/uneditable-section/uneditable-section.styles.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { v2_Layout } from "../v2_layout"; +import { V2_Layout } from "../v2_layout"; import { V2_Color } from "../v2_color"; import { V2_MediaQuery } from "../v2_media"; import { V2_Text } from "../v2_text"; @@ -14,7 +14,7 @@ interface WrapperStyleProps { // ============================================================================= // STYLING // ============================================================================= -export const Wrapper = styled(v2_Layout.V2_Content)` +export const Wrapper = styled(V2_Layout.Content)` background: ${({ $background }) => $background ? V2_Color.Neutral[7] : "transparent"}; padding-top: 2rem; diff --git a/src/v2_layout/index.ts b/src/v2_layout/index.ts index 406493436..702dcc494 100644 --- a/src/v2_layout/index.ts +++ b/src/v2_layout/index.ts @@ -3,11 +3,11 @@ import { V2_Container } from "./container"; import { V2_Content } from "./content"; import { V2_Section } from "./section"; -export const v2_Layout = { - V2_Section: V2_Section, - V2_Container: V2_Container, - V2_Content: V2_Content, - V2_ColDiv: V2_ColDiv, +export const V2_Layout = { + Section: V2_Section, + Container: V2_Container, + Content: V2_Content, + ColDiv: V2_ColDiv, }; export * from "./types"; diff --git a/stories/divider/divider.stories.tsx b/stories/divider/divider.stories.tsx index 98436ed72..57a5a1050 100644 --- a/stories/divider/divider.stories.tsx +++ b/stories/divider/divider.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { V2_Color } from "src/v2_color"; import { Divider } from "src/divider"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { DisplayText, Wrapper } from "./doc-elements"; type Component = typeof Divider; @@ -35,7 +35,7 @@ export const Default: StoryObj = { export const UsingInGridLayout: StoryObj = { render: () => { return ( - + Dividers in the grid layout = { tabletCols={[1, 4]} desktopCols={[1, 5]} /> - + ); }, }; @@ -66,7 +66,7 @@ export const UsingInGridLayout: StoryObj = { export const Customisations: StoryObj = { render: () => { return ( - + Changing the color (pure string) = { thickness={5} style={{ marginBottom: "1.5rem" }} /> - + ); }, }; diff --git a/stories/divider/doc-elements.tsx b/stories/divider/doc-elements.tsx index f77a58e96..740962fba 100644 --- a/stories/divider/doc-elements.tsx +++ b/stories/divider/doc-elements.tsx @@ -1,8 +1,8 @@ import styled from "styled-components"; -import { v2_Layout } from "../../src/v2_layout"; +import { V2_Layout } from "../../src/v2_layout"; import { V2_Text } from "../../src/v2_text"; -export const Wrapper = styled(v2_Layout.V2_Content)` +export const Wrapper = styled(V2_Layout.Content)` padding: 5rem; `; @@ -12,8 +12,8 @@ export const TextComponent = styled(V2_Text.Body)` export const DisplayText = ({ children }: { children: React.ReactNode }) => { return ( - + {children} - + ); }; diff --git a/stories/footer/footer.stories.tsx b/stories/footer/footer.stories.tsx index 79c078380..2b149ba56 100644 --- a/stories/footer/footer.stories.tsx +++ b/stories/footer/footer.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Footer } from "src/footer"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; type Component = typeof Footer; @@ -67,7 +67,7 @@ export const WithCustomContent: StoryObj = { render: () => { return (
    - +
    = { > My custom content
    -
    +
    ); }, diff --git a/stories/form/form-date-input/form-date-input.stories.tsx b/stories/form/form-date-input/form-date-input.stories.tsx index bd8da38bf..5f94945ec 100644 --- a/stories/form/form-date-input/form-date-input.stories.tsx +++ b/stories/form/form-date-input/form-date-input.stories.tsx @@ -3,7 +3,7 @@ import dayjs from "dayjs"; import { useState } from "react"; import { DateInput } from "src/date-input"; import { Form } from "src/form"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -105,7 +105,7 @@ export const AllowDisabledSelection: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-date-range-input/form-date-range-input.stories.tsx b/stories/form/form-date-range-input/form-date-range-input.stories.tsx index 826d9c2e3..bfda50823 100644 --- a/stories/form/form-date-range-input/form-date-range-input.stories.tsx +++ b/stories/form/form-date-range-input/form-date-range-input.stories.tsx @@ -3,7 +3,7 @@ import dayjs from "dayjs"; import { useState } from "react"; import { DateRangeInput } from "src/date-range-input"; import { Form } from "src/form"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; type Component = typeof Form.DateRangeInput; @@ -213,7 +213,7 @@ export const AllowDisabledSelection: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-e-signature/form-e-signature.stories.tsx b/stories/form/form-e-signature/form-e-signature.stories.tsx index 903961cb6..3ada1cbac 100644 --- a/stories/form/form-e-signature/form-e-signature.stories.tsx +++ b/stories/form/form-e-signature/form-e-signature.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { ESignature } from "src/e-signature"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { signatureDataURL } from "./doc-elements"; @@ -64,7 +64,7 @@ export const WithLoadingIndicator: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, }; diff --git a/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx b/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx index db2155472..1d4060980 100644 --- a/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx +++ b/stories/form/form-histogram-slider/form-histogram-slider.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { HistogramSlider } from "src/histogram-slider"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { V2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -140,7 +140,7 @@ export const WithLabels: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { bins={LARGE_BIN_DATA} interval={100} /> - + ); }, parameters: { diff --git a/stories/form/form-input-group/form-input-group.stories.tsx b/stories/form/form-input-group/form-input-group.stories.tsx index 20b2ce00b..62ac9109d 100644 --- a/stories/form/form-input-group/form-input-group.stories.tsx +++ b/stories/form/form-input-group/form-input-group.stories.tsx @@ -3,7 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; import { InputGroup } from "src/input-group"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { V2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -279,7 +279,7 @@ export const AllowClear: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-input/form-input.stories.tsx b/stories/form/form-input/form-input.stories.tsx index 8ebb0baef..394cb0041 100644 --- a/stories/form/form-input/form-input.stories.tsx +++ b/stories/form/form-input/form-input.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; import { Input } from "src/input"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -68,14 +68,14 @@ export const Default: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + - + ); }, parameters: { diff --git a/stories/form/form-masked-input/form-masked-input.stories.tsx b/stories/form/form-masked-input/form-masked-input.stories.tsx index fd2ac1913..f57929775 100644 --- a/stories/form/form-masked-input/form-masked-input.stories.tsx +++ b/stories/form/form-masked-input/form-masked-input.stories.tsx @@ -2,7 +2,7 @@ import { ToggleOffIcon } from "@lifesg/react-icons/toggle-off"; import { ToggleOffFillIcon } from "@lifesg/react-icons/toggle-off-fill"; import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { MaskedInput, MaskedInputLoadState } from "src/masked-input"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -205,7 +205,7 @@ export const WithCustomizations: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-multi-select/form-multi-select.stories.tsx b/stories/form/form-multi-select/form-multi-select.stories.tsx index b380cfb2e..d281d2278 100644 --- a/stories/form/form-multi-select/form-multi-select.stories.tsx +++ b/stories/form/form-multi-select/form-multi-select.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { InputMultiSelect } from "src/input-multi-select"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -84,7 +84,7 @@ export const WithSearch: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx b/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx index e795269e2..5620af58a 100644 --- a/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx +++ b/stories/form/form-nested-multi-select/form-nested-multi-select.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; import { InputNestedMultiSelect } from "src/input-nested-multi-select"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { options, @@ -105,7 +105,7 @@ export const WithSearch: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-nested-select/form-nested-select.stories.tsx b/stories/form/form-nested-select/form-nested-select.stories.tsx index 41f6728f7..fc3871aca 100644 --- a/stories/form/form-nested-select/form-nested-select.stories.tsx +++ b/stories/form/form-nested-select/form-nested-select.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; import { InputNestedSelect } from "src/input-nested-select"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { options, twoTierOptions } from "./nested-data-list"; @@ -109,7 +109,7 @@ export const WithSearch: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx b/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx index d0082199f..a987ab4e1 100644 --- a/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx +++ b/stories/form/form-phone-number-input/form-phone-number-input.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { PhoneNumberInput, PhoneNumberInputValue, @@ -109,7 +109,7 @@ export const AllowClear: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-predictive-text/form-predictive-text-input.stories.tsx b/stories/form/form-predictive-text/form-predictive-text-input.stories.tsx index ddbf99bf2..24f313e70 100644 --- a/stories/form/form-predictive-text/form-predictive-text-input.stories.tsx +++ b/stories/form/form-predictive-text/form-predictive-text-input.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { PredictiveTextInput } from "src/predictive-text-input"; import { Container } from "../shared-doc-elements"; import { @@ -108,7 +108,7 @@ export const WithSecondaryLabel: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-range-select/form-range-select.stories.tsx b/stories/form/form-range-select/form-range-select.stories.tsx index 6069b3499..25e3e5a9f 100644 --- a/stories/form/form-range-select/form-range-select.stories.tsx +++ b/stories/form/form-range-select/form-range-select.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { InputRangeSelect } from "src/input-range-select"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { @@ -225,7 +225,7 @@ export const WithSearch: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-range-slider/form-range-slider.stories.tsx b/stories/form/form-range-slider/form-range-slider.stories.tsx index e387ef469..800d785ed 100644 --- a/stories/form/form-range-slider/form-range-slider.stories.tsx +++ b/stories/form/form-range-slider/form-range-slider.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { InputRangeSlider } from "src/input-range-slider"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { V2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -132,7 +132,7 @@ export const WithLabels: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { tabletCols={[1, 9]} value={[25, 50]} /> - + ); }, parameters: { diff --git a/stories/form/form-select/form-select.stories.tsx b/stories/form/form-select/form-select.stories.tsx index dcbf9a98b..118f95f1a 100644 --- a/stories/form/form-select/form-select.stories.tsx +++ b/stories/form/form-select/form-select.stories.tsx @@ -3,7 +3,7 @@ import { ComponentProps, useEffect, useState } from "react"; import { Button } from "src/button"; import { Form } from "src/form"; import { InputSelect } from "src/input-select"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { @@ -276,7 +276,7 @@ export const LoadState: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-slider/form-slider.stories.tsx b/stories/form/form-slider/form-slider.stories.tsx index 0dfab78e5..a297b6c58 100644 --- a/stories/form/form-slider/form-slider.stories.tsx +++ b/stories/form/form-slider/form-slider.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { InputSlider } from "src/input-slider"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { V2_Text } from "src/v2_text"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -109,14 +109,14 @@ export const WithLabels: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + - + ); }, parameters: { diff --git a/stories/form/form-textarea/form-textarea.stories.tsx b/stories/form/form-textarea/form-textarea.stories.tsx index b4bf77057..b5968991e 100644 --- a/stories/form/form-textarea/form-textarea.stories.tsx +++ b/stories/form/form-textarea/form-textarea.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { Textarea } from "src/input-textarea"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; import { renderCustomCounter } from "./doc-elements"; @@ -75,7 +75,7 @@ export const WithCustomCounter: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx index 64958cfbf..462ddd1ad 100644 --- a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx +++ b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { TimeRangePicker } from "src/time-range-picker"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -84,7 +84,7 @@ export const TwelveHourFormat: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-timepicker/form-timepicker.stories.tsx b/stories/form/form-timepicker/form-timepicker.stories.tsx index 88f4c80cd..66cd75603 100644 --- a/stories/form/form-timepicker/form-timepicker.stories.tsx +++ b/stories/form/form-timepicker/form-timepicker.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Form } from "src/form"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { Timepicker } from "src/timepicker"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -71,7 +71,7 @@ export const TwelveHourFormat: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/form/form-unit-number-input/form-unit-number-input.stories.tsx b/stories/form/form-unit-number-input/form-unit-number-input.stories.tsx index 993efc15c..5a2b4e991 100644 --- a/stories/form/form-unit-number-input/form-unit-number-input.stories.tsx +++ b/stories/form/form-unit-number-input/form-unit-number-input.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { UnitNumberInput } from "src/unit-number"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; @@ -47,7 +47,7 @@ export const Default: StoryObj = { export const RenderingInGridLayout: StoryObj = { render: () => { return ( - + = { mobileCols={[1, 5]} tabletCols={[1, 9]} /> - + ); }, parameters: { diff --git a/stories/layout/col-div.stories.tsx b/stories/layout/col-div.stories.tsx index b4f4060aa..84b4314c6 100644 --- a/stories/layout/col-div.stories.tsx +++ b/stories/layout/col-div.stories.tsx @@ -1,13 +1,13 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { V2_Text } from "src/v2_text"; import { Wrapper } from "./doc-elements"; -type Component = typeof v2_Layout.V2_ColDiv; +type Component = typeof V2_Layout.ColDiv; const meta: Meta = { title: "Getting Started/Layout/Column Divs", - component: v2_Layout.V2_ColDiv, + component: V2_Layout.ColDiv, parameters: { layout: "fullscreen", }, @@ -19,7 +19,7 @@ export const ColumnDivs: StoryObj = { render: () => { return ( - = { }} > 1 - - + = { }} > 2 - - + = { }} > 3 - - + = { }} > 4 - - + = { }} > 5 - - + = { }} > 6 - - + = { }} > 7 - - + = { }} > 8 - - + = { }} > 9 - - + = { }} > 10 - - + = { }} > 11 - - + = { }} > 12 - + ); }, @@ -160,7 +160,7 @@ export const SpecifyingRanges: StoryObj = { render: () => { return ( - = { }} > One - - + = { }} > Two - - + = { }} > Three - + ); }, diff --git a/stories/layout/doc-elements.tsx b/stories/layout/doc-elements.tsx index aec2ce05f..6d1e6ea01 100644 --- a/stories/layout/doc-elements.tsx +++ b/stories/layout/doc-elements.tsx @@ -1,7 +1,7 @@ import React from "react"; import styled, { css } from "styled-components"; import { V2_Color } from "../../src/v2_color"; -import { v2_Layout } from "../../src/v2_layout"; +import { V2_Layout } from "../../src/v2_layout"; import { V2_Text } from "../../src/v2_text"; interface LabelProps { @@ -101,12 +101,12 @@ const Marker = styled.div` // ============================================================================= // eslint-disable-next-line @typescript-eslint/no-explicit-any export const Wrapper = ({ children }: any) => ( - - + {children} - - + + ); diff --git a/stories/layout/layout.stories.tsx b/stories/layout/layout.stories.tsx index bbbfaf5fd..5fc5eb024 100644 --- a/stories/layout/layout.stories.tsx +++ b/stories/layout/layout.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { v2_Layout } from "src/v2_layout"; +import { V2_Layout } from "src/v2_layout"; import { V2_Text } from "src/v2_text"; const meta: Meta = { @@ -14,7 +14,7 @@ export default meta; export const GeneralUsage: StoryObj = { render: () => { return ( - +
    -
    + ); }, }; @@ -39,8 +39,8 @@ export const GeneralUsage: StoryObj = { export const SplitUsage: StoryObj = { render: () => { return ( - - + +
    -
    -
    + + ); }, }; @@ -78,10 +78,10 @@ export const FlexColumnLayout: StoryObj = { ); }; return ( - + {renderContent(First item)} {renderContent(Second item)} - + ); }, }; @@ -113,9 +113,9 @@ export const GridLayout: StoryObj = { return columns; }; return ( - + {renderColumns()} - + ); }, }; diff --git a/stories/notification-banner/doc-elements.tsx b/stories/notification-banner/doc-elements.tsx index 1bf7424cb..50403ae11 100644 --- a/stories/notification-banner/doc-elements.tsx +++ b/stories/notification-banner/doc-elements.tsx @@ -1,11 +1,11 @@ import styled from "styled-components"; -import { v2_Layout } from "../../src/v2_layout"; +import { V2_Layout } from "../../src/v2_layout"; import { withNotificationBanner } from "../../src/notification-banner"; interface ContentProps { $color?: string | undefined; } -export const StyledContent = styled(v2_Layout.V2_Content)` +export const StyledContent = styled(V2_Layout.Content)` [data-id="container"] { flex-direction: column; background-color: ${(props) => props?.$color}; diff --git a/tests/codemod/deprecate-version/test-data.ts b/tests/codemod/deprecate-version/test-data.ts index 442b8b4b3..dc13c767a 100644 --- a/tests/codemod/deprecate-version/test-data.ts +++ b/tests/codemod/deprecate-version/test-data.ts @@ -1,15 +1,26 @@ export const inputCode = ` import { Color } from "@lifesg/react-design-system/color"; import { MediaQuery } from "@lifesg/react-design-system"; -import { Text } from "@lifesg/react-design-system/text"; -import {DesignToken} from "../design-token"; +import { MediaWidths as DSMediaWidth } from "@lifesg/react-design-system" +import { Text, TextStyleHelper } from "@lifesg/react-design-system/text" +import { Layout } from "@lifesg/react-design-system/layout"; +import { DesignToken } from "@lifesg/react-design-system/design-token"; +import { ColDiv } from "@lifesg/react-design-system/layout"; +import {ContainerType} from "@lifesg/react-design-system/layout" + + + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    const Component = () => ( <> - + ); @@ -19,15 +30,26 @@ export default Component; export const expectedOutputCode = ` import { V2_Color } from "@lifesg/react-design-system/v2_color"; import { V2_MediaQuery } from "@lifesg/react-design-system"; -import { V2_Text } from "@lifesg/react-design-system/v2_text"; -import {DesignToken} from "../design-token"; +import { V2_MediaWidths as DSMediaWidth } from "@lifesg/react-design-system" +import { V2_Text, V2_TextStyleHelper } from "@lifesg/react-design-system/v2_text" +import { V2_Layout } from "@lifesg/react-design-system/v2_layout"; +import { V2_DesignToken } from "@lifesg/react-design-system/v2_design-token"; +import { V2_ColDiv } from "@lifesg/react-design-system/v2_layout"; +import {V2_ContainerType} from "@lifesg/react-design-system/v2_layout" + + + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    const Component = () => ( <> - + - + ); diff --git a/tests/codemod/deprecate-version/transformer.spec.tsx b/tests/codemod/deprecate-version/transformer.spec.tsx index 8ade8f5de..dc4c5e4a3 100644 --- a/tests/codemod/deprecate-version/transformer.spec.tsx +++ b/tests/codemod/deprecate-version/transformer.spec.tsx @@ -11,8 +11,6 @@ describe("Codemod Transformer for updating version", () => { // create sample input file for testing jest.resetAllMocks(); fs.writeFileSync(inputPath, inputCode); - console.log(`Input file created at: ${inputPath}`); - console.log(`Input code:\n${inputCode}`); }); afterAll(() => { @@ -24,20 +22,14 @@ describe("Codemod Transformer for updating version", () => { it("should transform the code to updated version", () => { // copy the input file to the transformed output file fs.copyFileSync(inputPath, outputPath); - console.log(`Output file created at: ${outputPath}`); // do the jscodeshift command - console.log(`Running jscodeshift command...`); - execSync( - `jscodeshift -t ../react-design-system/codemods/deprecate-version ${outputPath}` - ); + execSync(`jscodeshift -t ./codemods/deprecate-v2-tokens ${outputPath}`); // check the transformed code const transformedCode = fs.readFileSync(outputPath, "utf8"); - console.log(`Transformed code:\n${transformedCode}`); // compare the transformed code with the expected output - console.log(`Expected output code:\n${expectedOutputCode}`); expect(transformedCode.trim().split("\n")).toMatchObject( expectedOutputCode.trim().split("\n") ); From b43daee5a01bebb5607fa6c05fd372aab719eb02 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 7 Aug 2024 15:52:38 +0800 Subject: [PATCH 0328/1949] [CCUBE-1514][MAHI]Deprecated neccassary imports for storybook to V2 --- stories/color/a-color.mdx | 14 ++++++------- stories/color/base-color.mdx | 4 ++-- stories/color/bsg-color.mdx | 4 ++-- stories/color/ccube-color.mdx | 4 ++-- stories/getting-started/media-query.mdx | 10 +++++----- stories/getting-started/themes.mdx | 8 ++++---- stories/layout/col-div.mdx | 2 +- stories/layout/layout.mdx | 20 +++++++++---------- .../notification-banner.mdx | 6 +++--- stories/popover/popover.mdx | 4 ++-- stories/text/a-intro.mdx | 2 +- stories/text/b-advanced.mdx | 10 +++++----- stories/text/c-base-collection.mdx | 5 +++-- stories/text/d-oneservice-collection.mdx | 5 +++-- 14 files changed, 50 insertions(+), 48 deletions(-) diff --git a/stories/color/a-color.mdx b/stories/color/a-color.mdx index 2f1fab8f5..682b29bf0 100644 --- a/stories/color/a-color.mdx +++ b/stories/color/a-color.mdx @@ -10,7 +10,7 @@ import { Secondary, Title } from "../storybook-common"; Colors provide a visual identity to the user interface in the LifeSG and BookingSG apps. ```tsx -import { Color } from "@lifesg/react-design-system/color"; +import { V2_Color } from "@lifesg/react-design-system/v2_color"; ``` Usage @@ -18,23 +18,23 @@ import { Color } from "@lifesg/react-design-system/color"; You can use the `Color` component to declare colours within style declarations. ```tsx -import { Color } from "@lifesg/react-design-system/color"; +import { V2_Color } from "@lifesg/react-design-system/v2_Color"; import styled, { css } from "styled-components"; const Container = styled.div` - background: ${Color.Primary}; + background: ${V2_Color.Primary}; // If you extract props, remember to wrap nested interpolations with the css helper ${(props) => { return css` - color: ${Color.Secondary}; + color: ${V2_Color.Secondary}; `; }} // Otherwise, you have to pass the props down manually (not recommended) ${(props) => { return ` - color: ${Color.Secondary(props)}; + color: ${V2_Color.Secondary(props)}; `; }} `; @@ -43,10 +43,10 @@ const Container = styled.div` If you require the color as a constant value, you could do this ```tsx -import { Color } from "@lifesg/react-design-system/color"; +import { V2_Color } from "@lifesg/react-design-system/v2_color"; import { BaseTheme } from "@lifesg/react-design-system/theme"; -const PrimaryColor = Color.Primary({ theme: BaseTheme }); +const PrimaryColor = V2_Color.Primary({ theme: BaseTheme }); ``` Collections diff --git a/stories/color/base-color.mdx b/stories/color/base-color.mdx index 76b174551..cd47c165c 100644 --- a/stories/color/base-color.mdx +++ b/stories/color/base-color.mdx @@ -1,6 +1,6 @@ import { Meta, Unstyled } from "@storybook/blocks"; import { BaseColorSet } from "src/spec/color-spec/base-color-set"; -import { Text } from "src/text"; +import { V2_Text } from "src/v2_text"; import { PreviewBox, Secondary, Title } from "../storybook-common"; import { ColorPalette } from "./doc-color-palette"; @@ -37,7 +37,7 @@ const theme: ThemeSpec = {
    -Validation +Validation `Color.Validation.` diff --git a/stories/color/bsg-color.mdx b/stories/color/bsg-color.mdx index 1e3ab9d9c..bf85a05d7 100644 --- a/stories/color/bsg-color.mdx +++ b/stories/color/bsg-color.mdx @@ -1,6 +1,6 @@ import { Meta, Unstyled } from "@storybook/blocks"; import { BookingSGColorSet } from "src/spec/color-spec/bookingsg-color-set"; -import { Text } from "src/text"; +import { V2_Text } from "src/v2_text"; import { PreviewBox, Secondary, Title } from "../storybook-common"; import { ColorPalette } from "./doc-color-palette"; @@ -40,7 +40,7 @@ const theme: ThemeSpec = {
    -Validation +Validation `Color.Validation.` diff --git a/stories/color/ccube-color.mdx b/stories/color/ccube-color.mdx index 6340b4d41..9160a00f2 100644 --- a/stories/color/ccube-color.mdx +++ b/stories/color/ccube-color.mdx @@ -1,6 +1,6 @@ import { Meta, Unstyled } from "@storybook/blocks"; import { CCubeColorSet } from "src/spec/color-spec/ccube-color-set"; -import { Text } from "src/text"; +import { V2_Text } from "src/v2_text"; import { PreviewBox, Secondary, Title } from "../storybook-common"; import { ColorPalette } from "./doc-color-palette"; @@ -37,7 +37,7 @@ const theme: ThemeSpec = {
    -Validation +Validation `Color.Validation.` diff --git a/stories/getting-started/media-query.mdx b/stories/getting-started/media-query.mdx index 8d2676a0b..045ff8bb3 100644 --- a/stories/getting-started/media-query.mdx +++ b/stories/getting-started/media-query.mdx @@ -10,7 +10,7 @@ import { Heading3, Secondary, Title } from "../storybook-common"; To target different media widths, you can make use of this component. ```tsx -import { MediaQuery } from "@lifesg/react-design-system/media"; +import { V2_MediaQuery } from "@lifesg/react-design-system/v2_media"; ``` Here are the list of media width breakpoints that the design system is using @@ -35,7 +35,7 @@ You can either target styles using the `max-width` or `min-width` breakpoints. D ```tsx import styled from "styled-components"; -import { MediaQuery } from "@lifesg/react-design-system/media"; +import { V2_MediaQuery } from "@lifesg/react-design-system/v2_media"; const Components = styled.div` ${MediaQuery.MaxWidth.mobileL} { @@ -53,7 +53,7 @@ const Components = styled.div` ```tsx import styled from "styled-components"; -import { MediaQuery } from "@lifesg/react-design-system/media"; +import { V2_MediaQuery } from "@lifesg/react-design-system/v2_media"; const Components = styled.div` ${MediaQuery.MinWidth.mobileL} { @@ -70,13 +70,13 @@ const Components = styled.div` Using media width values ```tsx -import { MediaWidths } from "@lifesg/react-design-system/media"; +import { V2_MediaWidths } from "@lifesg/react-design-system/v2_media"; ``` You can import `MediaWidths` and use the value as required. It will return the various breakpoint values. ```tsx -import { MediaWidths } from "@lifesg/react-design-system/media"; +import { V2_MediaWidths } from "@lifesg/react-design-system/v2_media"; export const MyComponent = () => { const { innerWidth } = window; diff --git a/stories/getting-started/themes.mdx b/stories/getting-started/themes.mdx index 7a071409a..03e59ebc7 100644 --- a/stories/getting-started/themes.mdx +++ b/stories/getting-started/themes.mdx @@ -87,17 +87,17 @@ In this example, here is how we usually specify properties that are dependent on ```tsx import styled, { css } from "styled-components"; -import { Color } from "@lifesg/react-design-system/color"; +import { V2_Color } from "@lifesg/react-design-system/V2_color"; const SomeComponent = styled.div` - background: ${Color.Primary}; + background: ${V2_Color.Primary}; `; // Or if you extract the props const AnotherComponent = styled.div` ${(props) => { return css` - background: ${Color.Primary(props)}; + background: ${V2_Color.Primary(props)}; `; }} `; @@ -117,7 +117,7 @@ const SomeComponent = styled.div` }; return css` - background: ${Color.Primary(modifiedProps)}; + background: ${V2_Color.Primary(modifiedProps)}; `; }} `; diff --git a/stories/layout/col-div.mdx b/stories/layout/col-div.mdx index 91d15e57f..0f688dea8 100644 --- a/stories/layout/col-div.mdx +++ b/stories/layout/col-div.mdx @@ -12,7 +12,7 @@ import { PropsTable } from "./col-div-props-table"; A div that conforms to the grid layout of `Layout.Container`. ```tsx -import { Layout } from "@lifesg/react-design-system/layout"; +import { V2_Layout } from "@lifesg/react-design-system/v2_layout"; ``` Anatomy diff --git a/stories/layout/layout.mdx b/stories/layout/layout.mdx index fa8e32ae2..713530140 100644 --- a/stories/layout/layout.mdx +++ b/stories/layout/layout.mdx @@ -1,6 +1,6 @@ import { Canvas, Meta } from "@storybook/blocks"; -import { Layout } from "src/layout"; -import { Text } from "src/text"; +import { V2_Layout } from "src/v2_layout"; +import { V2_Text } from "src/v2_text"; import { Heading3, Heading4, Secondary, Title } from "../storybook-common"; import { Label, PaddingLabel } from "./doc-elements"; import * as LayoutStories from "./layout.stories"; @@ -15,7 +15,7 @@ import { PropsTable } from "./props-table"; The layout components handle responsive displays for its child elements. ```tsx -import { Layout } from "@lifesg/react-design-system/layout"; +import { V2_Layout } from "@lifesg/react-design-system/v2_layout"; ``` Anatomy @@ -113,7 +113,7 @@ There are two ways to customize the style of the `Layout` elements. If you are using `Layout.Content`, you are able to modify the styles by extending the component. ```tsx -import { Layout } from "@lifesg/react-design-system/layout"; +import { V2_Layout } from "@lifesg/react-design-system/v2_layout"; import styled from "styled-components"; // Method 1: Using the data-id property @@ -126,29 +126,29 @@ export const ModifiedContent = styled(Layout.Content)` `; // Method 2: Using the component itself -export const ModifiedContent2 = styled(Layout.Content)` +export const ModifiedContent2 = styled(V2_Layout.Content)` /* Modifying styles here will modify the Section component */ - ${Layout.Container} { + ${V2_Layout.Container} { /* Modifying styles here will modify the Container component */ } `; ``` -Breaking up Layout.Content +Breaking up V2_Layout.Content You can break up the `Section` and `Container` separately and style them separately for more freedom. This is useful if you intend to add complex styles or other elements inside `Section`. ```tsx -import { Layout } from "@lifesg/react-design-system/layout"; +import { V2_Layout } from "@lifesg/react-design-system/layout"; import styled from "styled-components"; -const ModifiedSection = styled(Layout.Section)` +const ModifiedSection = styled(V2_Layout.Section)` /* Your styles here */ `; -const ModifiedContainer = styled(Layout.Container)` +const ModifiedContainer = styled(V2_Layout.Container)` /* Your styles here */ `; diff --git a/stories/notification-banner/notification-banner.mdx b/stories/notification-banner/notification-banner.mdx index 6ae5ce8fd..b5696380e 100644 --- a/stories/notification-banner/notification-banner.mdx +++ b/stories/notification-banner/notification-banner.mdx @@ -1,5 +1,5 @@ import { Canvas, Meta, Unstyled } from "@storybook/blocks"; -import { Text } from "src/text"; +import { V2_Text } from "src/V2_text"; import { Heading3, Heading4, @@ -85,7 +85,7 @@ properties. > - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation @@ -94,7 +94,7 @@ properties. esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - +
    diff --git a/stories/popover/popover.mdx b/stories/popover/popover.mdx index a8f073def..94d7ec610 100644 --- a/stories/popover/popover.mdx +++ b/stories/popover/popover.mdx @@ -43,11 +43,11 @@ is how you can do it. Step 1: Create the trigger component ```tsx -import { Text } from "@lifesg/react-design-system/text"; +import { V2_Text } from "@lifesg/react-design-system/v2_text"; const Trigger = () => ( - Hover me + Hover me ); ``` diff --git a/stories/text/a-intro.mdx b/stories/text/a-intro.mdx index 74354fca2..586c2dcc0 100644 --- a/stories/text/a-intro.mdx +++ b/stories/text/a-intro.mdx @@ -12,7 +12,7 @@ import { PropsTable } from "./props-table"; The component that is used for headings, body text, links and more. ```tsx -import { Text } from "@lifesg/react-design-system/text"; +import { V2_Text } from "@lifesg/react-design-system/v2_text"; ``` The `Text` component comes with 2 categories of components: diff --git a/stories/text/b-advanced.mdx b/stories/text/b-advanced.mdx index 4699f916f..51cddfe83 100644 --- a/stories/text/b-advanced.mdx +++ b/stories/text/b-advanced.mdx @@ -1,5 +1,5 @@ import { Canvas, Meta, Story, Unstyled } from "@storybook/blocks"; -import { Text } from "src/text"; +import { V2_Text } from "src/v2_text"; import { Heading3, Heading4, @@ -41,16 +41,16 @@ Comparing to if you did not specify it. - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi euismod quam eget ex tincidunt dapibus. Donec vitae leo vehicula, fermentum urna vitae, gravida ex. - - +
    + Aenean imperdiet faucibus velit, eu maximus libero facilisis ut. Donec nulla nisi, fermentum eget lorem at, feugiat ultricies ex. Aliquam volutpat nibh non suscipit rhoncus. -
    + diff --git a/stories/text/c-base-collection.mdx b/stories/text/c-base-collection.mdx index 35a6a9855..0c8c9382b 100644 --- a/stories/text/c-base-collection.mdx +++ b/stories/text/c-base-collection.mdx @@ -1,5 +1,5 @@ import { Meta, Unstyled } from "@storybook/blocks"; -import { Text } from "src/text"; +import { V2_Text } from "src/v2_text"; import { BaseTextStyleSet } from "src/spec/text-spec/base-text-style-set"; import { Secondary, Title } from "../storybook-common"; import { FontDisplay, FontSizeDisplay } from "./collection-doc-elements"; @@ -21,7 +21,8 @@ const theme: ThemeSpec = { Font Family -Open Sans +Open Sans + diff --git a/stories/text/d-oneservice-collection.mdx b/stories/text/d-oneservice-collection.mdx index c79c14958..396f21ada 100644 --- a/stories/text/d-oneservice-collection.mdx +++ b/stories/text/d-oneservice-collection.mdx @@ -1,5 +1,5 @@ import { Meta, Unstyled } from "@storybook/blocks"; -import { Text } from "src/text"; +import { V2_Text } from "src/v2_text"; import { OneServiceTextStyleSet } from "src/spec/text-spec/oneservice-text-style-set"; import { Secondary, Title } from "../storybook-common"; import { FontDisplay, FontSizeDisplay } from "./collection-doc-elements"; @@ -22,7 +22,8 @@ const theme: ThemeSpec = { Font Family -Open Sans +Open Sans + From 1b15366689c11a4c06c31ab94a958c946f3a3ce6 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Thu, 8 Aug 2024 11:01:01 +0800 Subject: [PATCH 0329/1949] [CCUBE-1514][MAHI]Fixed PR changes for storybook --- stories/color/mylegacy-color.mdx | 4 ++-- stories/color/oneservice-color.mdx | 4 ++-- stories/color/rbs-color.mdx | 4 ++-- stories/notification-banner/notification-banner.mdx | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/stories/color/mylegacy-color.mdx b/stories/color/mylegacy-color.mdx index 663b26f5c..50a7de8eb 100644 --- a/stories/color/mylegacy-color.mdx +++ b/stories/color/mylegacy-color.mdx @@ -1,6 +1,6 @@ import { Meta, Unstyled } from "@storybook/blocks"; import { MyLegacyColorSet } from "src/spec/color-spec/mylegacy-color-set"; -import { Text } from "src/text"; +import { V2_Text } from "src/v2_text"; import { PreviewBox, Secondary, Title } from "../storybook-common"; import { ColorPalette } from "./doc-color-palette"; @@ -37,7 +37,7 @@ const theme: ThemeSpec = {
    -Validation +Validation `Color.Validation.` diff --git a/stories/color/oneservice-color.mdx b/stories/color/oneservice-color.mdx index 7febbcf6c..1aee5b3e5 100644 --- a/stories/color/oneservice-color.mdx +++ b/stories/color/oneservice-color.mdx @@ -1,6 +1,6 @@ import { Meta, Unstyled } from "@storybook/blocks"; import { OneServiceColorSet } from "src/spec/color-spec/oneservice-color-set"; -import { Text } from "src/text"; +import { V2_Text } from "src/v2_text"; import { PreviewBox, Secondary, Title } from "../storybook-common"; import { ColorPalette } from "./doc-color-palette"; @@ -40,7 +40,7 @@ const theme: ThemeSpec = {
    -Validation +Validation `Color.Validation.` diff --git a/stories/color/rbs-color.mdx b/stories/color/rbs-color.mdx index 93ed09b88..94865a591 100644 --- a/stories/color/rbs-color.mdx +++ b/stories/color/rbs-color.mdx @@ -1,6 +1,6 @@ import { Meta, Unstyled } from "@storybook/blocks"; import { RBSColorSet } from "src/spec/color-spec/rbs-color-set"; -import { Text } from "src/text"; +import { V2_Text } from "src/v2_text"; import { PreviewBox, Secondary, Title } from "../storybook-common"; import { ColorPalette } from "./doc-color-palette"; @@ -37,7 +37,7 @@ const theme: ThemeSpec = {
    -Validation +Validation `Color.Validation.` diff --git a/stories/notification-banner/notification-banner.mdx b/stories/notification-banner/notification-banner.mdx index b5696380e..256ab0824 100644 --- a/stories/notification-banner/notification-banner.mdx +++ b/stories/notification-banner/notification-banner.mdx @@ -1,5 +1,5 @@ import { Canvas, Meta, Unstyled } from "@storybook/blocks"; -import { V2_Text } from "src/V2_text"; +import { V2_Text } from "src/v2_text"; import { Heading3, Heading4, From dc2cd6d52257e7c3ee8b2f56049f3e51841bd86b Mon Sep 17 00:00:00 2001 From: wang_xiang Date: Thu, 8 Aug 2024 15:44:38 +0800 Subject: [PATCH 0330/1949] [BOOKINGSG-5979][WX]add new component SelectHistogram --- src/form/form-select-histogram.tsx | 39 ++++ src/form/index.ts | 2 + src/form/types.ts | 5 + src/index.ts | 1 + src/select-histogram/index.ts | 2 + .../select-histogram.styles.tsx | 58 +++++ src/select-histogram/select-histogram.tsx | 201 ++++++++++++++++++ src/select-histogram/types.ts | 16 ++ .../form-select-histogram.mdx | 48 +++++ .../form-select-histogram.stories.tsx | 197 +++++++++++++++++ .../form-select-histogram/props-table.tsx | 29 +++ .../select-histogram.spec.tsx | 198 +++++++++++++++++ 12 files changed, 796 insertions(+) create mode 100644 src/form/form-select-histogram.tsx create mode 100644 src/select-histogram/index.ts create mode 100644 src/select-histogram/select-histogram.styles.tsx create mode 100644 src/select-histogram/select-histogram.tsx create mode 100644 src/select-histogram/types.ts create mode 100644 stories/form/form-select-histogram/form-select-histogram.mdx create mode 100644 stories/form/form-select-histogram/form-select-histogram.stories.tsx create mode 100644 stories/form/form-select-histogram/props-table.tsx create mode 100644 tests/select-histogram/select-histogram.spec.tsx diff --git a/src/form/form-select-histogram.tsx b/src/form/form-select-histogram.tsx new file mode 100644 index 000000000..c59e2c8f1 --- /dev/null +++ b/src/form/form-select-histogram.tsx @@ -0,0 +1,39 @@ +import { SelectHistogram } from "../select-histogram/select-histogram"; +import { FormWrapper } from "./form-wrapper"; +import { FormSelectHistogramSliderProps } from "./types"; + +export const FormSelectHistogram = ({ + label, + errorMessage, + id = "select-histogram", + "data-error-testid": errorTestId, + "data-testid": testId, + layoutType, + mobileCols, + tabletCols, + desktopCols, + histogramSlider, + ...otherProps +}: FormSelectHistogramSliderProps): JSX.Element => { + return ( + + + + ); +}; diff --git a/src/form/index.ts b/src/form/index.ts index c13c6d701..4310d1580 100644 --- a/src/form/index.ts +++ b/src/form/index.ts @@ -15,6 +15,7 @@ import { FormPredictiveTextInput } from "./form-predictive-text-input"; import { FormRangeSelect } from "./form-range-select"; import { FormRangeSlider } from "./form-range-slider"; import { FormSelect } from "./form-select"; +import { FormSelectHistogram } from "./form-select-histogram"; import { FormSlider } from "./form-slider"; import { FormTextarea } from "./form-textarea"; import { FormTimeRangePicker } from "./form-time-range-picker"; @@ -34,6 +35,7 @@ export const Form = { NestedSelect: FormNestedSelect, NestedMultiSelect: FormNestedMultiSelect, Select: FormSelect, + SelectHistogram: FormSelectHistogram, Slider: FormSlider, RangeSlider: FormRangeSlider, RangeSelect: FormRangeSelect, diff --git a/src/form/types.ts b/src/form/types.ts index 2ac98263c..e6aaab427 100644 --- a/src/form/types.ts +++ b/src/form/types.ts @@ -16,6 +16,7 @@ import { ColProps } from "../layout/types"; import { MaskedInputPartialProps } from "../masked-input/types"; import { PhoneNumberInputProps } from "../phone-number-input/types"; import { PredictiveTextInputProps } from "../predictive-text-input/types"; +import { SelectHistogramSliderProps } from "../select-histogram"; import { TimeRangePickerProps } from "../time-range-picker/types"; import { TimepickerProps } from "../timepicker/types"; import { UnitNumberInputProps } from "../unit-number/types"; @@ -144,3 +145,7 @@ export interface FormHistogramSliderProps export interface FormESignatureProps extends EsignatureProps, BaseFormElementProps {} + +export interface FormSelectHistogramSliderProps + extends SelectHistogramSliderProps, + BaseFormElementProps {} diff --git a/src/index.ts b/src/index.ts index 0fc347a29..d11d546a4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -59,6 +59,7 @@ export * from "./popover-v2"; export * from "./predictive-text-input"; export * from "./progress-indicator"; export * from "./radio-button"; +export * from "./select-histogram"; export * from "./sidenav"; export * from "./smart-app-banner"; export * from "./tab"; diff --git a/src/select-histogram/index.ts b/src/select-histogram/index.ts new file mode 100644 index 000000000..042d5c766 --- /dev/null +++ b/src/select-histogram/index.ts @@ -0,0 +1,2 @@ +export * from "./select-histogram"; +export * from "./types"; diff --git a/src/select-histogram/select-histogram.styles.tsx b/src/select-histogram/select-histogram.styles.tsx new file mode 100644 index 000000000..ad9044c5e --- /dev/null +++ b/src/select-histogram/select-histogram.styles.tsx @@ -0,0 +1,58 @@ +import styled, { css } from "styled-components"; +import { Color } from "../color"; +import { MediaQuery } from "../media"; +import { ValueLabelStyleProps } from "../shared/dropdown-wrapper/dropdown-wrapper.styles"; +import { TextStyleHelper } from "../text"; + +export const HistogramSliderDropdownContainer = styled.div` + overflow: hidden; + border: 1px solid ${Color.Neutral[5]}; + border-radius: 4px; + background: ${Color.Neutral[8]}; + padding: 1rem; + min-width: 23rem; + + ${MediaQuery.MaxWidth.mobileL} { + min-width: unset; + width: calc(100vw - 2.5rem); + max-height: 15rem; + } +`; + +export const Label = styled.div` + display: flex; + align-items: baseline; +`; + +export const Separator = styled.div` + margin: 0 0.5rem; +`; + +export const ValueLabel = styled.div` + ${(props) => + TextStyleHelper.getTextStyle( + props.$variant === "small" ? "BodySmall" : "Body", + "regular" + )} + text-align: left; + line-height: 1.375rem; + ${(props) => { + switch (props.truncateType) { + case "middle": + break; + case "end": + default: + return css` + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + `; + } + }} + overflow: hidden; +`; + +export const PlaceholderLabel = styled(ValueLabel)` + color: ${Color.Neutral[3]}; +`; diff --git a/src/select-histogram/select-histogram.tsx b/src/select-histogram/select-histogram.tsx new file mode 100644 index 000000000..f2f5c188d --- /dev/null +++ b/src/select-histogram/select-histogram.tsx @@ -0,0 +1,201 @@ +import { useEffect, useRef, useState } from "react"; +import { HistogramSlider } from "../histogram-slider"; +import { + DropdownListState, + ExpandableElement, +} from "../shared/dropdown-list-v2"; +import { ElementWithDropdown } from "../shared/dropdown-wrapper"; +import { LabelContainer } from "../shared/dropdown-wrapper/dropdown-wrapper.styles"; +import { InputBox } from "../shared/input-wrapper/input-wrapper"; +import { Text } from "../text"; +import { SimpleIdGenerator } from "../util"; +import { + HistogramSliderDropdownContainer, + Label, + PlaceholderLabel, + Separator, +} from "./select-histogram.styles"; +import { SelectHistogramSliderProps } from "./types"; + +export const SelectHistogram = ({ + placeholder = "Select", + optionTruncationType = "end", + error, + alignment = "left", + dropdownZIndex, + histogramSlider, + ...otherProps +}: SelectHistogramSliderProps): JSX.Element => { + const { + className, + disabled, + readOnly, + interval, + value, + bins = [], + onChange, + onChangeEnd, + rangeLabelPrefix, + rangeLabelSuffix, + renderRangeLabel, + renderEmptyView, + } = histogramSlider; + // ============================================================================= + // CONST, STATE + // ============================================================================= + const [selection, setSelection] = useState<[number, number]>( + initSelection() + ); + const [showOptions, setShowOptions] = useState(false); + const [internalId] = useState(() => SimpleIdGenerator.generate()); + const values = bins.map((item) => item.minValue); + const minValue = Math.min(...values); + + const nodeRef = useRef(); + const selectorRef = useRef(); + const labelContainerRef = useRef(); + + // ========================================================================= + // EFFECTS + // ========================================================================= + useEffect(() => { + if (value !== selection) { + setSelection(initSelection()); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [value]); + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + const handleOpen = () => { + setShowOptions(true); + }; + + const handleClose = () => { + setShowOptions(false); + }; + + const handleDismiss = () => { + selectorRef.current.focus(); + setShowOptions(false); + }; + + const onSliderChange = (values: [number, number]) => { + setSelection(values); + onChange?.(values); + }; + + const onSliderChangeEnd = (values: [number, number]) => { + setSelection(values); + onChangeEnd?.(values); + }; + + // ============================================================================= + // HELPER FUNCTIONS + // ============================================================================= + function initSelection(): [number, number] { + return value ?? [minValue, minValue + interval]; + } + + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= + const renderSelector = (value: number) => { + if (renderRangeLabel) { + return renderRangeLabel(value); + } + + return ( + + {rangeLabelPrefix} + {value} + {rangeLabelSuffix} + + ); + }; + + const getDisplayValue = () => { + return !values || values.length === 0 ? ( + + {placeholder} + + ) : ( + + ); + }; + + const renderSelectorContent = () => ( + + {getDisplayValue()} + + ); + + const renderElement = () => { + return ( + + + {renderSelectorContent()} + + + ); + }; + + const renderDropdown = ({ elementWidth }: { elementWidth: number }) => ( + + + + ); + + return ( + + + + ); +}; diff --git a/src/select-histogram/types.ts b/src/select-histogram/types.ts new file mode 100644 index 000000000..b04ab5536 --- /dev/null +++ b/src/select-histogram/types.ts @@ -0,0 +1,16 @@ +import { HistogramSliderProps } from "../histogram-slider"; +import { TruncateType } from "../shared/dropdown-list-v2/types"; +import { DropdownAlignmentType } from "../shared/dropdown-wrapper"; + +export interface SelectHistogramSliderProps { + error?: boolean | undefined; + alignment?: DropdownAlignmentType | undefined; + dropdownZIndex?: number | undefined; + histogramSlider: HistogramSliderProps; + id?: string | undefined; + disabled?: boolean | undefined; + "data-testid"?: string | undefined; + placeholder?: string | undefined; + /** Specifies the truncation type. Truncated text will be replaced with ellipsis. Values: "middle" | "end" */ + optionTruncationType?: TruncateType | undefined; +} diff --git a/stories/form/form-select-histogram/form-select-histogram.mdx b/stories/form/form-select-histogram/form-select-histogram.mdx new file mode 100644 index 000000000..51434b6df --- /dev/null +++ b/stories/form/form-select-histogram/form-select-histogram.mdx @@ -0,0 +1,48 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../../storybook-common"; +import * as FormSelectHistogramStories from "./form-select-histogram.stories"; +import { PropsTable } from "./props-table"; + + + +Form.SelectHistogarm + +Overview + +A field that provides a set of options shown as a histogram for a user to select. + +```tsx +import { Form } from "@lifesg/react-design-system/form"; +``` + + + +With labels + + + +Empty bins + +If there are no results across any of the bins, you may specify a custom display. + + + +Rendering in grid layouts + +You can also specify [ColDiv's](/docs/getting-started-layout-column-divs--column-divs) +column props to span across the specified columns in grid layouts. + + + +Using the field as a standalone + +In the case that you require the select histogram field as a standalone, you can do this. + +```tsx +import { SelectHistogram } from "@lifesg/react-design-system/select-histogram"; +``` + + + +Component API + diff --git a/stories/form/form-select-histogram/form-select-histogram.stories.tsx b/stories/form/form-select-histogram/form-select-histogram.stories.tsx new file mode 100644 index 000000000..e7767a6eb --- /dev/null +++ b/stories/form/form-select-histogram/form-select-histogram.stories.tsx @@ -0,0 +1,197 @@ +import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circle-fill"; +import type { Meta, StoryObj } from "@storybook/react"; +import { Form } from "src/form"; +import { Layout } from "src/layout"; +import { Text } from "src/text"; +import { SelectHistogram } from "../../../src/select-histogram"; +import { StoryContainer } from "../../storybook-common"; +import { Container } from "../shared-doc-elements"; +type Component = typeof Form.SelectHistogram; +const meta: Meta = { + title: "Form/SelectHistogram", + component: Form.SelectHistogram, +}; + +export default meta; + +const BINS_DATA = [ + { count: 0, minValue: 0 }, + { count: 10, minValue: 100 }, + { count: 8, minValue: 200 }, + { count: 12, minValue: 300 }, + { count: 7, minValue: 400 }, + { count: 9, minValue: 700 }, +]; + +export const Default: StoryObj = { + render: () => { + return ( + + + + + + + + + ); + }, +}; + +export const EmptyBins: StoryObj = { + render: () => { + return ( + + + ( +
    + No results found. +
    + ), + }} + /> +
    +
    + ); + }, +}; + +export const WithLabels: StoryObj = { + render: () => { + return ( + + + + + + val === 1 ? ( + + 1 photo + + ) : ( + + {val} photos + + ), + }} + /> + + + ); + }, +}; + +export const RenderingInGridLayout: StoryObj = { + render: () => { + return ( + + + + + ); + }, + parameters: { + layout: "fullscreen", + }, +}; + +export const StandaloneUsage: StoryObj = { + render: () => { + return ( + + + + + + ); + }, +}; diff --git a/stories/form/form-select-histogram/props-table.tsx b/stories/form/form-select-histogram/props-table.tsx new file mode 100644 index 000000000..eba588d01 --- /dev/null +++ b/stories/form/form-select-histogram/props-table.tsx @@ -0,0 +1,29 @@ +import React from "react"; +import { ApiTable } from "../../storybook-common/api-table"; +import { ApiTableSectionProps } from "../../storybook-common/api-table/types"; +import { SHARED_FORM_PROPS_DATA } from "../shared-props-data"; + +const DATA: ApiTableSectionProps[] = [ + { + name: "HistogramSlider specific props", + attributes: [ + { + name: "histogramSlider", + description: "The properties from histogram slider", + mandatory: true, + propTypes: ( + + HistogramSlider + + ), + }, + ], + }, + ...SHARED_FORM_PROPS_DATA, +]; + +export const PropsTable = () => ; diff --git a/tests/select-histogram/select-histogram.spec.tsx b/tests/select-histogram/select-histogram.spec.tsx new file mode 100644 index 000000000..9db16c735 --- /dev/null +++ b/tests/select-histogram/select-histogram.spec.tsx @@ -0,0 +1,198 @@ +import { fireEvent, render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { SelectHistogram } from "../../src"; + +const SELECTOR_TESTID = "select-histogram-selector"; +const FIELD_TESTID = "select-histogram"; + +const MOCK_BIN_DATA = [ + { count: 1, minValue: 1 }, + { count: 1, minValue: 2 }, + { count: 1, minValue: 3 }, +]; + +const expectRangeLabel = ( + from: number, + to: number, + rangeLabelPrefix?: string, + rangeLabelSuffix?: string +) => { + const fromLabel = rangeLabelPrefix + ? rangeLabelPrefix + from + : rangeLabelSuffix + ? from + rangeLabelSuffix + : from; + + const toLabel = rangeLabelPrefix + ? rangeLabelPrefix + to + : rangeLabelSuffix + ? to + rangeLabelSuffix + : to; + + expect(screen.getByText(fromLabel)).toBeVisible(); + expect(screen.getByText("-")).toBeVisible(); // show separator + expect(screen.getByText(toLabel)).toBeVisible(); +}; + +describe("SelectHistogram", () => { + beforeEach(() => { + jest.clearAllMocks(); + + global.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn(), + })); + }); + + it("should render the component", async () => { + render( + + ); + + expect(screen.getByTestId(SELECTOR_TESTID)).toBeVisible(); + expectRangeLabel(1, 2); + }); + + it("should open dropdown panel and show histogram slider when selector is clicked", async () => { + const user = userEvent.setup(); + + render( + + ); + + await user.click(screen.queryByTestId(SELECTOR_TESTID)); + + expect(screen.getByTestId(SELECTOR_TESTID)).toBeVisible(); + expectRangeLabel(1, 2); + expect(screen.getByTestId(FIELD_TESTID)).toBeInTheDocument(); + expect(screen.queryAllByRole("slider")).toHaveLength(2); + expect(screen.queryByTestId("slider-thumb-0")).toHaveAttribute( + "aria-valuenow", + "1" + ); + + expect(screen.queryByTestId("slider-thumb-1")).toHaveAttribute( + "aria-valuenow", + "2" + ); + }); + + it("should handle change", async () => { + const user = userEvent.setup(); + const mockChange = jest.fn(); + + render( + + ); + + await user.click(screen.queryByTestId(SELECTOR_TESTID)); + + const thumb = screen.queryByTestId("slider-track-0"); + + await waitFor(() => { + fireEvent.mouseDown(thumb.parentElement); + expect(mockChange).toHaveBeenCalledWith([1, 2]); + }); + }); + + it("should toggle dropdown list when selector is clicked", async () => { + const user = userEvent.setup(); + const mockChange = jest.fn(); + + render( + + ); + + await user.click(screen.queryByTestId(SELECTOR_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(FIELD_TESTID)).toBeVisible(); + }); + + await user.click(screen.queryByTestId(SELECTOR_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(FIELD_TESTID)).not.toBeInTheDocument(); + }); + }); + + describe("range labels in the selector", () => { + it("should render range labels", () => { + render( + + ); + + expectRangeLabel(1, 2); + }); + + it("should render range labels with prefix", () => { + render( + + ); + + expectRangeLabel(1, 2, "test"); + }); + + it("should render range labels with suffix", () => { + render( + + ); + + expectRangeLabel(1, 2, undefined, "test"); + }); + + it("should render range labels with custom render function", () => { + render( +
    ${val}.00
    , + }} + /> + ); + + expect(screen.queryByText("$1.00")).toBeInTheDocument(); + expect(screen.queryByText("$2.00")).toBeInTheDocument(); + }); + }); +}); From 0497e48dfea15c53eb8066c81eb4e076e59cbaf7 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Mon, 12 Aug 2024 10:31:46 +0800 Subject: [PATCH 0331/1949] [CCUBE-1514][MAHI]Refactored jest script and added more test. Pr change. --- tests/codemod/deprecate-version/test-data.ts | 35 +++++++++++++------ .../deprecate-version/transformer.spec.tsx | 8 ++--- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/tests/codemod/deprecate-version/test-data.ts b/tests/codemod/deprecate-version/test-data.ts index dc13c767a..c767d6f90 100644 --- a/tests/codemod/deprecate-version/test-data.ts +++ b/tests/codemod/deprecate-version/test-data.ts @@ -7,13 +7,15 @@ import { Layout } from "@lifesg/react-design-system/layout"; import { DesignToken } from "@lifesg/react-design-system/design-token"; import { ColDiv } from "@lifesg/react-design-system/layout"; import {ContainerType} from "@lifesg/react-design-system/layout" +import {BaseColorSet} from "@lifesg/react-design-system/layout" +const Container = styled.div\` + color: \${DesignToken.Table.Cell.Primary}; +\` - -
    Item 1
    -
    Item 2
    -
    Item 3
    -
    +interface Props { + foo : ContainerType; +} const Component = () => ( <> @@ -21,6 +23,11 @@ const Component = () => ( + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    ); @@ -28,6 +35,7 @@ export default Component; `; export const expectedOutputCode = ` + import { V2_Color } from "@lifesg/react-design-system/v2_color"; import { V2_MediaQuery } from "@lifesg/react-design-system"; import { V2_MediaWidths as DSMediaWidth } from "@lifesg/react-design-system" @@ -36,13 +44,15 @@ import { V2_Layout } from "@lifesg/react-design-system/v2_layout"; import { V2_DesignToken } from "@lifesg/react-design-system/v2_design-token"; import { V2_ColDiv } from "@lifesg/react-design-system/v2_layout"; import {V2_ContainerType} from "@lifesg/react-design-system/v2_layout" +import {BaseColorSet} from "@lifesg/react-design-system/layout" +const Container = styled.div\` + color: \${V2_DesignToken.Table.Cell.Primary}; +\` - -
    Item 1
    -
    Item 2
    -
    Item 3
    -
    +interface Props { + foo : V2_ContainerType; +} const Component = () => ( <> @@ -50,6 +60,11 @@ const Component = () => ( + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    ); diff --git a/tests/codemod/deprecate-version/transformer.spec.tsx b/tests/codemod/deprecate-version/transformer.spec.tsx index dc4c5e4a3..1982ac48f 100644 --- a/tests/codemod/deprecate-version/transformer.spec.tsx +++ b/tests/codemod/deprecate-version/transformer.spec.tsx @@ -24,14 +24,14 @@ describe("Codemod Transformer for updating version", () => { fs.copyFileSync(inputPath, outputPath); // do the jscodeshift command - execSync(`jscodeshift -t ./codemods/deprecate-v2-tokens ${outputPath}`); + execSync( + `jscodeshift --parser=tsx -t ./codemods/deprecate-v2-tokens ${outputPath}` + ); // check the transformed code const transformedCode = fs.readFileSync(outputPath, "utf8"); // compare the transformed code with the expected output - expect(transformedCode.trim().split("\n")).toMatchObject( - expectedOutputCode.trim().split("\n") - ); + expect(transformedCode.trim()).toEqual(expectedOutputCode.trim()); }); }); From bf61b656f28dfb3a7bf976309cbad0a825d17e3e Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Mon, 12 Aug 2024 12:13:59 +0800 Subject: [PATCH 0332/1949] [CCUBE-1514][MAHI]Fixed PR change. Removed redundant script. --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 4a4af6ff2..df82c71ba 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "publish-lib": "npm publish ./dist", "start": "rollup -c -w", "test": "jest --coverage", - "test:codemods": "jest --coverage tests/codemod", "test-watch": "jest --watch", "test-e2e": "playwright test", "prepare": "(test -d ./.git && npx husky install) || true", From 2c86cc0cdace24ee3b98077845d8510e18107378 Mon Sep 17 00:00:00 2001 From: Benedict Date: Mon, 12 Aug 2024 18:00:12 +0800 Subject: [PATCH 0333/1949] [MOL-15577][BC] Add codeowners --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..38755a10e --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @LifeSG/react-design-system \ No newline at end of file From 23cc9eeb6590c65291d60544f58a5e58802c02ea Mon Sep 17 00:00:00 2001 From: wang_xiang Date: Tue, 13 Aug 2024 12:46:50 +0800 Subject: [PATCH 0334/1949] [BOOKINGSG-5979][WX]refactor props of the component --- src/form/form-select-histogram.tsx | 6 +- src/select-histogram/select-histogram.tsx | 59 ++++--- src/select-histogram/types.ts | 14 +- .../form-select-histogram.stories.tsx | 54 +++--- .../form-select-histogram/props-table.tsx | 157 ++++++++++++++++-- .../select-histogram.spec.tsx | 19 ++- 6 files changed, 239 insertions(+), 70 deletions(-) diff --git a/src/form/form-select-histogram.tsx b/src/form/form-select-histogram.tsx index c59e2c8f1..ed1ea0119 100644 --- a/src/form/form-select-histogram.tsx +++ b/src/form/form-select-histogram.tsx @@ -5,7 +5,7 @@ import { FormSelectHistogramSliderProps } from "./types"; export const FormSelectHistogram = ({ label, errorMessage, - id = "select-histogram", + id = "form-select-histogram", "data-error-testid": errorTestId, "data-testid": testId, layoutType, @@ -17,7 +17,7 @@ export const FormSelectHistogram = ({ }: FormSelectHistogramSliderProps): JSX.Element => { return ( diff --git a/src/select-histogram/select-histogram.tsx b/src/select-histogram/select-histogram.tsx index f2f5c188d..713cfb3b5 100644 --- a/src/select-histogram/select-histogram.tsx +++ b/src/select-histogram/select-histogram.tsx @@ -18,28 +18,26 @@ import { import { SelectHistogramSliderProps } from "./types"; export const SelectHistogram = ({ - placeholder = "Select", - optionTruncationType = "end", - error, alignment = "left", + className, + disabled, dropdownZIndex, + error, histogramSlider, + id, + onBlur, + onChange, + onChangeEnd, + optionTruncationType = "end", + placeholder = "Select", + rangeLabelPrefix, + rangeLabelSuffix, + readOnly, + renderRangeLabel, + value, ...otherProps }: SelectHistogramSliderProps): JSX.Element => { - const { - className, - disabled, - readOnly, - interval, - value, - bins = [], - onChange, - onChangeEnd, - rangeLabelPrefix, - rangeLabelSuffix, - renderRangeLabel, - renderEmptyView, - } = histogramSlider; + const { interval, bins = [], renderEmptyView } = histogramSlider; // ============================================================================= // CONST, STATE // ============================================================================= @@ -47,6 +45,7 @@ export const SelectHistogram = ({ initSelection() ); const [showOptions, setShowOptions] = useState(false); + const [focused, setFocused] = useState(false); const [internalId] = useState(() => SimpleIdGenerator.generate()); const values = bins.map((item) => item.minValue); const minValue = Math.min(...values); @@ -55,6 +54,7 @@ export const SelectHistogram = ({ const selectorRef = useRef(); const labelContainerRef = useRef(); + const testId = otherProps["data-testid"] || "select-histogram"; // ========================================================================= // EFFECTS // ========================================================================= @@ -91,6 +91,22 @@ export const SelectHistogram = ({ onChangeEnd?.(values); }; + const handleNodeFocus = () => { + if (!focused && !showOptions) { + setFocused(true); + } + }; + + const handleNodeBlur = (e: React.FocusEvent) => { + if ( + focused && + !showOptions && + !nodeRef.current.contains(e.relatedTarget as Node) + ) { + setFocused(false); + onBlur?.(); + } + }; // ============================================================================= // HELPER FUNCTIONS // ============================================================================= @@ -142,10 +158,13 @@ export const SelectHistogram = ({ return ( ); diff --git a/src/select-histogram/types.ts b/src/select-histogram/types.ts index b04ab5536..8e3642e0a 100644 --- a/src/select-histogram/types.ts +++ b/src/select-histogram/types.ts @@ -6,11 +6,23 @@ export interface SelectHistogramSliderProps { error?: boolean | undefined; alignment?: DropdownAlignmentType | undefined; dropdownZIndex?: number | undefined; - histogramSlider: HistogramSliderProps; id?: string | undefined; disabled?: boolean | undefined; "data-testid"?: string | undefined; placeholder?: string | undefined; /** Specifies the truncation type. Truncated text will be replaced with ellipsis. Values: "middle" | "end" */ optionTruncationType?: TruncateType | undefined; + onBlur?: (() => void) | undefined; + readOnly?: boolean | undefined; + className?: string | undefined; + rangeLabelPrefix?: string | undefined; + rangeLabelSuffix?: string | undefined; + renderRangeLabel?: ((value: number) => React.ReactNode) | undefined; + onChange?: ((value: [number, number]) => void) | undefined; + onChangeEnd?: ((value: [number, number]) => void) | undefined; + value?: [number, number] | undefined; + histogramSlider: Pick< + HistogramSliderProps, + "bins" | "interval" | "renderEmptyView" + >; } diff --git a/stories/form/form-select-histogram/form-select-histogram.stories.tsx b/stories/form/form-select-histogram/form-select-histogram.stories.tsx index e7767a6eb..eea7cafff 100644 --- a/stories/form/form-select-histogram/form-select-histogram.stories.tsx +++ b/stories/form/form-select-histogram/form-select-histogram.stories.tsx @@ -1,4 +1,3 @@ -import { ExclamationCircleFillIcon } from "@lifesg/react-icons/exclamation-circle-fill"; import type { Meta, StoryObj } from "@storybook/react"; import { Form } from "src/form"; import { Layout } from "src/layout"; @@ -37,10 +36,10 @@ export const Default: StoryObj = { /> = { histogramSlider={{ bins: BINS_DATA, interval: 100, - value: [100, 400], }} + value={[100, 400]} /> @@ -104,39 +103,37 @@ export const WithLabels: StoryObj = { histogramSlider={{ bins: BINS_DATA, interval: 100, - value: [100, 400], - - rangeLabelPrefix: "$", }} + rangeLabelPrefix="$" + value={[100, 400]} /> - val === 1 ? ( - - 1 photo - - ) : ( - - {val} photos - - ), }} + value={[100, 400]} + renderRangeLabel={(val) => + val === 1 ? ( + + 1 photo + + ) : ( + + {val} photos + + ) + } /> @@ -152,20 +149,22 @@ export const RenderingInGridLayout: StoryObj = { label="A shorter form select histogram" histogramSlider={{ bins: BINS_DATA, - rangeLabelPrefix: "$", + interval: 100, - value: [100, 400], }} + value={[100, 400]} + rangeLabelPrefix="$" mobileCols={[1, 5]} /> @@ -185,10 +184,11 @@ export const StandaloneUsage: StoryObj = { diff --git a/stories/form/form-select-histogram/props-table.tsx b/stories/form/form-select-histogram/props-table.tsx index eba588d01..0b901aa8a 100644 --- a/stories/form/form-select-histogram/props-table.tsx +++ b/stories/form/form-select-histogram/props-table.tsx @@ -1,25 +1,160 @@ import React from "react"; -import { ApiTable } from "../../storybook-common/api-table"; +import { ApiTable, code } from "../../storybook-common/api-table"; import { ApiTableSectionProps } from "../../storybook-common/api-table/types"; import { SHARED_FORM_PROPS_DATA } from "../shared-props-data"; const DATA: ApiTableSectionProps[] = [ + { + name: "SelectHistogram specific props", + attributes: [ + { + name: "className", + mandatory: false, + description: "The class selector of the component", + propTypes: ["string"], + }, + { + name: "id", + mandatory: false, + description: "The unique identifier of the component", + propTypes: ["string"], + }, + { + name: "data-testid", + mandatory: false, + description: "The test identifier of the component", + propTypes: ["string"], + }, + { + name: "disabled", + mandatory: false, + description: + "Indicates if the component is disabled and selection is not allowed", + propTypes: ["boolean"], + }, + { + name: "readOnly", + mandatory: false, + description: + "Indicates if the component is in the readonly state", + propTypes: ["boolean"], + }, + { + name: "value", + mandatory: false, + description: ( + <> + The selected range, in the format {code("[start, end]")} + + ), + propTypes: ["[number, number]"], + }, + { + name: "rangeLabelPrefix", + mandatory: false, + description: + "Text to be prepended to the selection range labels", + propTypes: ["string"], + }, + { + name: "rangeLabelSuffix", + mandatory: false, + description: + "Text to be appended to the selection range labels", + propTypes: ["string"], + }, + { + name: "renderRangeLabel", + mandatory: false, + description: "Function to render custom selection range labels", + propTypes: ["(value: number) => React.ReactNode"], + }, + { + name: "onChange", + mandatory: false, + description: ( + <> + Called on every selection change. Returns value in the + format {code("[start, end]")} + + ), + propTypes: ["(value: [number, number]) => void"], + }, + { + name: "onChangeEnd", + mandatory: false, + description: ( + <> + Called when a thumb is released after selection is + complete. Returns value in the format{" "} + {code("[start, end]")} + + ), + propTypes: ["(value: [number, number]) => void"], + }, + { + name: "placeholder", + mandatory: false, + description: "The placeholder text of the selector", + propTypes: ["string"], + defaultValue: "Select", + }, + { + name: "error", + mandatory: false, + description: ( + <> + Indicates if an error display is to be set  (Not + needed if you indicated errorMessage) + + ), + propTypes: ["boolean"], + }, + { + name: "alignment", + mandatory: false, + description: + "Specifies if the dropdown is aligned to the left or right of the main field", + propTypes: [`"left"`, `"right"`], + defaultValue: `"left"`, + }, + { + name: "dropdownZIndex", + mandatory: false, + description: + "The custom z-index of the dropdown. Try specifying this if you encounter z-index conflicts.", + propTypes: ["number"], + defaultValue: "50", + }, + ], + }, { name: "HistogramSlider specific props", attributes: [ { - name: "histogramSlider", - description: "The properties from histogram slider", + name: "bins", mandatory: true, - propTypes: ( - - HistogramSlider - + description: + "A list of histogram bins grouped by their lower limit", + propTypes: ["HistogramBinProps[]"], + }, + { + name: "interval", + mandatory: true, + description: "Dictates the upper limit of each bin", + propTypes: ["number"], + }, + + { + name: "renderEmptyView", + mandatory: false, + description: ( + <> + A custom display if there are no results across any of + the bins + ), + propTypes: ["() => void"], }, ], }, diff --git a/tests/select-histogram/select-histogram.spec.tsx b/tests/select-histogram/select-histogram.spec.tsx index 9db16c735..0457ba349 100644 --- a/tests/select-histogram/select-histogram.spec.tsx +++ b/tests/select-histogram/select-histogram.spec.tsx @@ -2,7 +2,7 @@ import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { SelectHistogram } from "../../src"; -const SELECTOR_TESTID = "select-histogram-selector"; +const SELECTOR_TESTID = "selector"; const FIELD_TESTID = "select-histogram"; const MOCK_BIN_DATA = [ @@ -94,8 +94,8 @@ describe("SelectHistogram", () => { histogramSlider={{ bins: MOCK_BIN_DATA, interval: 1, - onChange: mockChange, }} + onChange={mockChange} /> ); @@ -119,8 +119,8 @@ describe("SelectHistogram", () => { histogramSlider={{ bins: MOCK_BIN_DATA, interval: 1, - onChange: mockChange, }} + onChange={mockChange} /> ); @@ -133,7 +133,12 @@ describe("SelectHistogram", () => { await user.click(screen.queryByTestId(SELECTOR_TESTID)); await waitFor(() => { - expect(screen.queryByTestId(FIELD_TESTID)).not.toBeInTheDocument(); + expect( + screen.queryByTestId("slider-track-0") + ).not.toBeInTheDocument(); + expect( + screen.queryByTestId("slider-track-1") + ).not.toBeInTheDocument(); }); }); @@ -156,8 +161,8 @@ describe("SelectHistogram", () => { histogramSlider={{ bins: MOCK_BIN_DATA, interval: 1, - rangeLabelPrefix: "test", }} + rangeLabelPrefix="test" /> ); @@ -171,8 +176,8 @@ describe("SelectHistogram", () => { histogramSlider={{ bins: MOCK_BIN_DATA, interval: 1, - rangeLabelSuffix: "test", }} + rangeLabelSuffix="test" /> ); @@ -186,8 +191,8 @@ describe("SelectHistogram", () => { histogramSlider={{ bins: MOCK_BIN_DATA, interval: 1, - renderRangeLabel: (val) =>
    ${val}.00
    , }} + renderRangeLabel={(val) =>
    ${val}.00
    } /> ); From ecc4930594ee1d908e73817560e018630d6a310e Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Wed, 14 Aug 2024 09:10:13 +0800 Subject: [PATCH 0335/1949] [BOOKINGSG-5979][RL] Update documentation --- src/form/form-select-histogram.tsx | 4 +- src/form/types.ts | 6 +-- src/select-histogram/select-histogram.tsx | 4 +- src/select-histogram/types.ts | 30 +++++++------- .../form-select-histogram.stories.tsx | 17 ++++---- .../form-select-histogram/props-table.tsx | 41 +++++++------------ 6 files changed, 47 insertions(+), 55 deletions(-) diff --git a/src/form/form-select-histogram.tsx b/src/form/form-select-histogram.tsx index ed1ea0119..feaa6c481 100644 --- a/src/form/form-select-histogram.tsx +++ b/src/form/form-select-histogram.tsx @@ -1,6 +1,6 @@ import { SelectHistogram } from "../select-histogram/select-histogram"; import { FormWrapper } from "./form-wrapper"; -import { FormSelectHistogramSliderProps } from "./types"; +import { FormSelectHistogramProps } from "./types"; export const FormSelectHistogram = ({ label, @@ -14,7 +14,7 @@ export const FormSelectHistogram = ({ desktopCols, histogramSlider, ...otherProps -}: FormSelectHistogramSliderProps): JSX.Element => { +}: FormSelectHistogramProps): JSX.Element => { return ( { +}: SelectHistogramProps): JSX.Element => { const { interval, bins = [], renderEmptyView } = histogramSlider; // ============================================================================= // CONST, STATE diff --git a/src/select-histogram/types.ts b/src/select-histogram/types.ts index 8e3642e0a..540c004e0 100644 --- a/src/select-histogram/types.ts +++ b/src/select-histogram/types.ts @@ -2,27 +2,29 @@ import { HistogramSliderProps } from "../histogram-slider"; import { TruncateType } from "../shared/dropdown-list-v2/types"; import { DropdownAlignmentType } from "../shared/dropdown-wrapper"; -export interface SelectHistogramSliderProps { - error?: boolean | undefined; +export type SelectHistogramSliderProps = Pick< + HistogramSliderProps, + "bins" | "interval" | "renderEmptyView" +>; + +export interface SelectHistogramProps { alignment?: DropdownAlignmentType | undefined; + className?: string | undefined; + "data-testid"?: string | undefined; + disabled?: boolean | undefined; dropdownZIndex?: number | undefined; + error?: boolean | undefined; id?: string | undefined; - disabled?: boolean | undefined; - "data-testid"?: string | undefined; - placeholder?: string | undefined; + histogramSlider: SelectHistogramSliderProps; /** Specifies the truncation type. Truncated text will be replaced with ellipsis. Values: "middle" | "end" */ optionTruncationType?: TruncateType | undefined; - onBlur?: (() => void) | undefined; - readOnly?: boolean | undefined; - className?: string | undefined; + placeholder?: string | undefined; rangeLabelPrefix?: string | undefined; rangeLabelSuffix?: string | undefined; - renderRangeLabel?: ((value: number) => React.ReactNode) | undefined; + readOnly?: boolean | undefined; + value?: [number, number] | undefined; + onBlur?: (() => void) | undefined; onChange?: ((value: [number, number]) => void) | undefined; onChangeEnd?: ((value: [number, number]) => void) | undefined; - value?: [number, number] | undefined; - histogramSlider: Pick< - HistogramSliderProps, - "bins" | "interval" | "renderEmptyView" - >; + renderRangeLabel?: ((value: number) => React.ReactNode) | undefined; } diff --git a/stories/form/form-select-histogram/form-select-histogram.stories.tsx b/stories/form/form-select-histogram/form-select-histogram.stories.tsx index eea7cafff..020f4bd07 100644 --- a/stories/form/form-select-histogram/form-select-histogram.stories.tsx +++ b/stories/form/form-select-histogram/form-select-histogram.stories.tsx @@ -5,7 +5,9 @@ import { Text } from "src/text"; import { SelectHistogram } from "../../../src/select-histogram"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; + type Component = typeof Form.SelectHistogram; + const meta: Meta = { title: "Form/SelectHistogram", component: Form.SelectHistogram, @@ -36,27 +38,27 @@ export const Default: StoryObj = { /> @@ -146,10 +148,9 @@ export const RenderingInGridLayout: StoryObj = { return ( = { mobileCols={[1, 5]} /> The selected range, in the format {code("[start, end]")} @@ -51,27 +45,23 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "rangeLabelPrefix", - mandatory: false, description: "Text to be prepended to the selection range labels", propTypes: ["string"], }, { name: "rangeLabelSuffix", - mandatory: false, description: "Text to be appended to the selection range labels", propTypes: ["string"], }, { name: "renderRangeLabel", - mandatory: false, description: "Function to render custom selection range labels", propTypes: ["(value: number) => React.ReactNode"], }, { name: "onChange", - mandatory: false, description: ( <> Called on every selection change. Returns value in the @@ -82,7 +72,6 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "onChangeEnd", - mandatory: false, description: ( <> Called when a thumb is released after selection is @@ -94,14 +83,12 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "placeholder", - mandatory: false, description: "The placeholder text of the selector", propTypes: ["string"], defaultValue: "Select", }, { name: "error", - mandatory: false, description: ( <> Indicates if an error display is to be set  (Not @@ -112,7 +99,6 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "alignment", - mandatory: false, description: "Specifies if the dropdown is aligned to the left or right of the main field", propTypes: [`"left"`, `"right"`], @@ -120,23 +106,32 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "dropdownZIndex", - mandatory: false, description: "The custom z-index of the dropdown. Try specifying this if you encounter z-index conflicts.", propTypes: ["number"], defaultValue: "50", }, + { + name: "histogramSlider", + description: "The histogram slider configuration", + mandatory: true, + propTypes: ["SelectHistogramSliderProps"], + }, ], }, { - name: "HistogramSlider specific props", + name: "SelectHistogramSliderProps", attributes: [ { name: "bins", mandatory: true, description: "A list of histogram bins grouped by their lower limit", - propTypes: ["HistogramBinProps[]"], + propTypes: ( + + HistogramBinProps + + ), }, { name: "interval", @@ -144,17 +139,11 @@ const DATA: ApiTableSectionProps[] = [ description: "Dictates the upper limit of each bin", propTypes: ["number"], }, - { name: "renderEmptyView", - mandatory: false, - description: ( - <> - A custom display if there are no results across any of - the bins - - ), - propTypes: ["() => void"], + description: + "A custom display if there are no results across any of the bins", + propTypes: ["() => React.ReactNode"], }, ], }, From b8eb7e308efbb3fa1851edede2567195b1545e58 Mon Sep 17 00:00:00 2001 From: Ashley Teo Date: Thu, 15 Aug 2024 10:49:06 +0800 Subject: [PATCH 0336/1949] [MOL-15934][AT] add support for an 'isReady' state to handle situations when the download is not yet available. --- .../file-list-card/file-list-card.tsx | 10 ++++- src/file-download/types.ts | 4 ++ .../file-download/file-download.stories.tsx | 43 ++++++++++++++++++- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/file-download/file-list-card/file-list-card.tsx b/src/file-download/file-list-card/file-list-card.tsx index bfd7ba926..aed27db57 100644 --- a/src/file-download/file-list-card/file-list-card.tsx +++ b/src/file-download/file-list-card/file-list-card.tsx @@ -33,6 +33,7 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { errorMessage, thumbnailImageDataUrl, truncateText = true, + isReady = true, } = fileItem; // Local variables @@ -44,6 +45,7 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { }); const [displayText, setDisplayText] = useState(); const containerRef = useRef(); + const downloadButtonRef = useRef(); // ========================================================================= // EFFECTS @@ -72,6 +74,10 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { }; const handleDownload = async () => { + if (!isReady || isLoading) { + return; + } + setIsLoading(true); try { setIsError(false); @@ -165,7 +171,7 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { sizeType="small" aria-label={`download ${name}`} > - {isLoading ? ( + {isLoading || !isReady ? ( { return ( - + {renderContents()} {renderActions()} diff --git a/src/file-download/types.ts b/src/file-download/types.ts index 753c24589..c93b7d39f 100644 --- a/src/file-download/types.ts +++ b/src/file-download/types.ts @@ -14,6 +14,8 @@ export interface FileItemDownloadProps { thumbnailImageDataUrl?: string | undefined; /** Indicates if text should be truncated */ truncateText?: boolean | undefined; + /** Indicate if file is ready for download, defaults to true */ + isReady?: boolean; } export type FileDownloadStyle = "bordered" | "no-border"; @@ -30,4 +32,6 @@ export interface FileDownloadProps { id?: string | undefined; /** Called when file item is clicked */ onDownload: (file: FileItemDownloadProps) => void | Promise; + /** controlled loading state*/ + isLoading?: boolean; } diff --git a/stories/file-download/file-download.stories.tsx b/stories/file-download/file-download.stories.tsx index c5fb745e0..7621ddf91 100644 --- a/stories/file-download/file-download.stories.tsx +++ b/stories/file-download/file-download.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import { FileDownload, FileItemDownloadProps } from "../../src/file-download"; type Component = typeof FileDownload; @@ -52,7 +52,7 @@ export const Default: StoryObj = { return ( = { }, }; +export const WithReadyState: StoryObj = { + render: () => { + const [fileItems, setFileItem] = useState([ + { + id: "1", + name: "not-ready.txt", + mimeType: "application/txt", + filePath: "", + errorMessage: "This is custom error message!", + isReady: false, + }, + ]); + + useEffect(() => { + setInterval(() => { + const isReadyFileItem = structuredClone(fileItems); + isReadyFileItem[0] = { + ...isReadyFileItem[0], + isReady: true, + name: "ready.txt", + }; + + setFileItem(isReadyFileItem); + }, 10000); + }, []); + + return ( + + ); + }, +}; + // The following code is meant for simulation purposes and is not intended for production const handleDemoDownload = async (file: FileItemDownloadProps) => { From 6461c7c2fbaddbedd48b3c1144a55fdc9b63be7d Mon Sep 17 00:00:00 2001 From: Ashley Teo Date: Thu, 15 Aug 2024 10:51:40 +0800 Subject: [PATCH 0337/1949] [MOL-15934][AT] remove unused ref --- src/file-download/file-list-card/file-list-card.tsx | 3 +-- src/file-download/types.ts | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/file-download/file-list-card/file-list-card.tsx b/src/file-download/file-list-card/file-list-card.tsx index aed27db57..dce6f17c2 100644 --- a/src/file-download/file-list-card/file-list-card.tsx +++ b/src/file-download/file-list-card/file-list-card.tsx @@ -45,7 +45,6 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { }); const [displayText, setDisplayText] = useState(); const containerRef = useRef(); - const downloadButtonRef = useRef(); // ========================================================================= // EFFECTS @@ -188,7 +187,7 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { return ( - + {renderContents()} {renderActions()} diff --git a/src/file-download/types.ts b/src/file-download/types.ts index c93b7d39f..5813880c2 100644 --- a/src/file-download/types.ts +++ b/src/file-download/types.ts @@ -32,6 +32,4 @@ export interface FileDownloadProps { id?: string | undefined; /** Called when file item is clicked */ onDownload: (file: FileItemDownloadProps) => void | Promise; - /** controlled loading state*/ - isLoading?: boolean; } From f484c1297c0acba11a1bf8ce08079be73f3373cf Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Thu, 8 Aug 2024 11:13:49 +0800 Subject: [PATCH 0338/1949] [CCUBE-1515][MAHI]Deprecate theme to V2 --- codemods/deprecate-v2-tokens/data.ts | 78 +++++++++++++++++++ custom-types/styled.d.ts | 4 +- package.json | 1 + .../loading-dots-spinner.tsx | 4 +- src/e-signature/e-signature-canvas.tsx | 4 +- src/error-display/error-display-data.tsx | 4 +- src/error-display/error-display.tsx | 4 +- src/error-display/types.ts | 4 +- src/index.ts | 2 +- .../dropdown-list-v2/dropdown-label.tsx | 4 +- src/shared/progress-bar/progress-bar.tsx | 2 +- src/theme/index.ts | 45 ----------- src/v2_color/color.ts | 2 +- src/v2_design-token/design-token.ts | 2 +- src/v2_text/text-style.ts | 2 +- src/{theme => v2_theme}/color-theme-helper.ts | 19 +++-- .../design-token-helper.ts | 20 ++--- src/{theme => v2_theme}/helper.ts | 4 +- src/v2_theme/index.ts | 45 +++++++++++ src/{theme => v2_theme}/text-theme-helper.ts | 20 ++--- src/{theme => v2_theme}/types.ts | 43 +++++----- .../2-animations-customisable.stories.tsx | 6 +- stories/text/collection-doc-elements.tsx | 6 +- tests/error-display/error-display.spec.tsx | 24 +++--- 24 files changed, 217 insertions(+), 132 deletions(-) delete mode 100644 src/theme/index.ts rename src/{theme => v2_theme}/color-theme-helper.ts (83%) rename src/{theme => v2_theme}/design-token-helper.ts (77%) rename src/{theme => v2_theme}/helper.ts (91%) create mode 100644 src/v2_theme/index.ts rename src/{theme => v2_theme}/text-theme-helper.ts (78%) rename src/{theme => v2_theme}/types.ts (65%) diff --git a/codemods/deprecate-v2-tokens/data.ts b/codemods/deprecate-v2-tokens/data.ts index 96872930f..5b70b64e8 100644 --- a/codemods/deprecate-v2-tokens/data.ts +++ b/codemods/deprecate-v2-tokens/data.ts @@ -147,6 +147,80 @@ export const componentMap = [ oldName: "ColDivProps", newName: "V2_ColDivProps", }, + // Added theme name mappings + { + oldName: "BaseTheme", + newName: "V2_BaseTheme", + }, + { + oldName: "BookingSGTheme", + newName: "V2_BookingSGTheme", + }, + { + oldName: "RBSTheme", + newName: "V2_RBSTheme", + }, + { + oldName: "MyLegacyTheme", + newName: "V2_MyLegacyTheme", + }, + { + oldName: "CCubeTheme", + newName: "V2_CCubeTheme", + }, + { + oldName: "OneServiceTheme", + newName: "V2_OneServiceTheme", + }, + // Added type name mappings + { + oldName: "ThemeSpec", + newName: "V2_ThemeSpec", + }, + { + oldName: "ThemeSpecOptions", + newName: "V2_ThemeSpecOptions", + }, + { + oldName: "ThemeCollectionSpec", + newName: "V2_ThemeCollectionSpec", + }, + { + oldName: "ColorScheme", + newName: "V2_ColorScheme", + }, + { + oldName: "TextStyleScheme", + newName: "V2_TextStyleScheme", + }, + { + oldName: "DesignTokenScheme", + newName: "V2_DesignTokenScheme", + }, + { + oldName: "ResourceScheme", + newName: "V2_ResourceScheme", + }, + { + oldName: "ColorCollectionsMap", + newName: "V2_ColorCollectionsMap", + }, + { + oldName: "FontStyleCollectionsMap", + newName: "V2_FontStyleCollectionsMap", + }, + { + oldName: "DesignTokenCollectionsMap", + newName: "V2_DesignTokenCollectionsMap", + }, + { + oldName: "ThemeContextKeys", + newName: "V2_ThemeContextKeys", + }, + { + oldName: "ThemeLayout", + newName: "V2_ThemeLayout", + }, ]; export const pathMap = [ @@ -170,4 +244,8 @@ export const pathMap = [ oldPath: "layout", newPath: "v2_layout", }, + { + oldPath: "theme", + newPath: "v2_theme", + }, ]; diff --git a/custom-types/styled.d.ts b/custom-types/styled.d.ts index eb78113cb..507572516 100644 --- a/custom-types/styled.d.ts +++ b/custom-types/styled.d.ts @@ -1,6 +1,6 @@ import "styled-components"; -import { ThemeSpec } from "../src/theme/types"; +import { V2_ThemeSpec } from "../src/v2_theme/types"; declare module "styled-components" { - export interface DefaultTheme extends ThemeSpec {} + export interface DefaultTheme extends V2_ThemeSpec {} } diff --git a/package.json b/package.json index df82c71ba..f5a28ebd8 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", + "@lifesg/react-design-system": "^2.7.0-canary.3", "react-zoom-pan-pinch": "^3.3.0" }, "devDependencies": { diff --git a/src/animations/loading-dots-spinner/loading-dots-spinner.tsx b/src/animations/loading-dots-spinner/loading-dots-spinner.tsx index 833719222..ef2c03d12 100644 --- a/src/animations/loading-dots-spinner/loading-dots-spinner.tsx +++ b/src/animations/loading-dots-spinner/loading-dots-spinner.tsx @@ -1,6 +1,6 @@ import styled, { useTheme } from "styled-components"; import { V2_Color } from "../../v2_color"; -import { BaseTheme } from "../../theme"; +import { V2_BaseTheme } from "../../v2_theme"; import { CustomisableAnimationProps } from "../types"; import { LottieLoadingDotsSpinner } from "./lottie-animation"; @@ -10,7 +10,7 @@ export const LoadingDotsSpinner = ({ }: CustomisableAnimationProps) => { const theme = useTheme(); const animationColor = - color || V2_Color.Primary({ theme: theme || BaseTheme }); + color || V2_Color.Primary({ theme: theme || V2_BaseTheme }); return ( diff --git a/src/e-signature/e-signature-canvas.tsx b/src/e-signature/e-signature-canvas.tsx index 4d0896923..992859dac 100644 --- a/src/e-signature/e-signature-canvas.tsx +++ b/src/e-signature/e-signature-canvas.tsx @@ -9,7 +9,7 @@ import { } from "react"; import { useTheme } from "styled-components"; import { V2_Color } from "../v2_color"; -import { BaseTheme } from "../theme"; +import { V2_BaseTheme } from "../v2_theme"; import { SignatureCanvas, SignatureCanvasContainer, @@ -90,7 +90,7 @@ const Component = ( pencilBrush.current = new fabric.PencilBrush(fabricCanvas.current); pencilBrush.current.color = `#${V2_Color.Neutral[8]({ - theme: theme || BaseTheme, + theme: theme || V2_BaseTheme, })}`; pencilBrush.current.width = 3; diff --git a/src/error-display/error-display-data.tsx b/src/error-display/error-display-data.tsx index 4462b2109..8003e8786 100644 --- a/src/error-display/error-display-data.tsx +++ b/src/error-display/error-display-data.tsx @@ -1,4 +1,4 @@ -import { ResourceScheme } from "../theme/types"; +import { V2_ResourceScheme } from "../v2_theme/types"; import { renderDescriptionWithProps } from "./error-display-helper-comp"; import { ErrorDisplayHelper } from "./helper"; import { @@ -528,7 +528,7 @@ export const generateErrorDisplayData = ( export const getErrorDisplayData = ( type: ErrorDisplayType, - resourceScheme: ResourceScheme + resourceScheme: V2_ResourceScheme ) => { switch (resourceScheme) { case "bookingsg": diff --git a/src/error-display/error-display.tsx b/src/error-display/error-display.tsx index 32e7bb325..8104aac88 100644 --- a/src/error-display/error-display.tsx +++ b/src/error-display/error-display.tsx @@ -1,6 +1,6 @@ import React from "react"; import { useTheme } from "styled-components"; -import { BaseTheme } from "../theme"; +import { V2_BaseTheme } from "../v2_theme"; import { getErrorDisplayData } from "./error-display-data"; import { ActionButton, @@ -33,7 +33,7 @@ export const ErrorDisplay = ({ const theme = useTheme(); const defaultAssets = getErrorDisplayData( type, - illustrationScheme || (theme || BaseTheme).resourceScheme + illustrationScheme || (theme || V2_BaseTheme).resourceScheme ); const testId = otherProps["data-testid"] || "error-display"; diff --git a/src/error-display/types.ts b/src/error-display/types.ts index f1ee7005e..24051a367 100644 --- a/src/error-display/types.ts +++ b/src/error-display/types.ts @@ -1,5 +1,5 @@ import { ButtonProps } from "../button"; -import { ResourceScheme } from "../theme"; +import { V2_ResourceScheme } from "../v2_theme"; export type ErrorDisplayType = | "400" @@ -46,7 +46,7 @@ export interface ErrorDisplayAttributes { /** Specifies if only the image is rendered */ imageOnly?: boolean | undefined; /** Use specific resource scheme instead of theme resource scheme */ - illustrationScheme?: ResourceScheme | undefined; + illustrationScheme?: V2_ResourceScheme | undefined; } export interface ErrorDisplayProps diff --git a/src/index.ts b/src/index.ts index b8c3c6b24..1a3aab41c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -64,7 +64,7 @@ export * from "./tab"; export * from "./tag"; export * from "./v2_text"; export * from "./text-list"; -export * from "./theme"; +export * from "./v2_theme"; export * from "./time-range-picker"; export * from "./time-slot-bar"; export * from "./time-slot-bar-week"; diff --git a/src/shared/dropdown-list-v2/dropdown-label.tsx b/src/shared/dropdown-list-v2/dropdown-label.tsx index ff9e48da7..93b26ba20 100644 --- a/src/shared/dropdown-list-v2/dropdown-label.tsx +++ b/src/shared/dropdown-list-v2/dropdown-label.tsx @@ -2,7 +2,7 @@ import { useCallback, useMemo } from "react"; import { useResizeDetector } from "react-resize-detector"; import { useTheme } from "styled-components"; import { V2_TextStyle } from "../../v2_text"; -import { BaseTheme } from "../../theme"; +import { V2_BaseTheme } from "../../v2_theme"; import { StringHelper } from "../../util/string-helper"; import { DropdownVariantType, LabelDisplayType } from "../dropdown-list/types"; import { @@ -32,7 +32,7 @@ export const DropdownLabel = ({ truncationType = "middle", variant, }: DropdownLabelProps): JSX.Element => { - const theme = useTheme() || BaseTheme; + const theme = useTheme() || V2_BaseTheme; const fontSize = V2_TextStyle.Body.fontSize({ theme }); const fontFamily = V2_TextStyle.Body.fontFamily({ theme }); const { ref, width } = useResizeDetector(); diff --git a/src/shared/progress-bar/progress-bar.tsx b/src/shared/progress-bar/progress-bar.tsx index c602c0357..4df9d51f9 100644 --- a/src/shared/progress-bar/progress-bar.tsx +++ b/src/shared/progress-bar/progress-bar.tsx @@ -1,6 +1,6 @@ import styled, { css } from "styled-components"; import { V2_Color } from "../../v2_color"; -import { getThemeColors } from "../../theme/color-theme-helper"; +import { getThemeColors } from "../../v2_theme/color-theme-helper"; type ThemeColorFunctions = ReturnType; diff --git a/src/theme/index.ts b/src/theme/index.ts deleted file mode 100644 index 5f1fa3516..000000000 --- a/src/theme/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { ThemeContextKeys, ThemeSpec } from "./types"; - -export const BaseTheme: ThemeSpec = { - [ThemeContextKeys.colorScheme]: "base", - [ThemeContextKeys.textStyleScheme]: "base", - [ThemeContextKeys.designTokenScheme]: "base", - [ThemeContextKeys.resourceScheme]: "base", -}; - -export const BookingSGTheme: ThemeSpec = { - [ThemeContextKeys.colorScheme]: "bookingsg", - [ThemeContextKeys.textStyleScheme]: "base", - [ThemeContextKeys.designTokenScheme]: "base", - [ThemeContextKeys.resourceScheme]: "bookingsg", -}; - -export const RBSTheme: ThemeSpec = { - [ThemeContextKeys.colorScheme]: "rbs", - [ThemeContextKeys.textStyleScheme]: "base", - [ThemeContextKeys.designTokenScheme]: "rbs", - [ThemeContextKeys.resourceScheme]: "rbs", -}; - -export const MyLegacyTheme: ThemeSpec = { - [ThemeContextKeys.colorScheme]: "mylegacy", - [ThemeContextKeys.textStyleScheme]: "base", - [ThemeContextKeys.designTokenScheme]: "base", - [ThemeContextKeys.resourceScheme]: "base", -}; - -export const CCubeTheme: ThemeSpec = { - [ThemeContextKeys.colorScheme]: "ccube", - [ThemeContextKeys.textStyleScheme]: "base", - [ThemeContextKeys.designTokenScheme]: "base", - [ThemeContextKeys.resourceScheme]: "ccube", -}; - -export const OneServiceTheme: ThemeSpec = { - [ThemeContextKeys.colorScheme]: "oneservice", - [ThemeContextKeys.textStyleScheme]: "oneservice", - [ThemeContextKeys.designTokenScheme]: "base", - [ThemeContextKeys.resourceScheme]: "base", -}; - -export * from "./types"; diff --git a/src/v2_color/color.ts b/src/v2_color/color.ts index ca9af22b0..86bd9f8a5 100644 --- a/src/v2_color/color.ts +++ b/src/v2_color/color.ts @@ -1,4 +1,4 @@ -import { getThemeColors } from "../theme/color-theme-helper"; +import { getThemeColors } from "../v2_theme/color-theme-helper"; import { PropertiesToType } from "../util/utility-types"; import { V2_ColorSet } from "./types"; diff --git a/src/v2_design-token/design-token.ts b/src/v2_design-token/design-token.ts index 8cca57168..b9fdab4da 100644 --- a/src/v2_design-token/design-token.ts +++ b/src/v2_design-token/design-token.ts @@ -1,4 +1,4 @@ -import { getThemeDesignToken } from "../theme/design-token-helper"; +import { getThemeDesignToken } from "../v2_theme/design-token-helper"; import { PropertiesToType } from "../util/utility-types"; /** @deprecated */ import { V2_DesignTokenSet } from "./types"; diff --git a/src/v2_text/text-style.ts b/src/v2_text/text-style.ts index 97931ae90..f973145eb 100644 --- a/src/v2_text/text-style.ts +++ b/src/v2_text/text-style.ts @@ -1,4 +1,4 @@ -import { getThemeTextStyles } from "../theme/text-theme-helper"; +import { getThemeTextStyles } from "../v2_theme/text-theme-helper"; import { PropertiesToType } from "../util/utility-types"; import { V2_TextStyleSetType } from "./types"; diff --git a/src/theme/color-theme-helper.ts b/src/v2_theme/color-theme-helper.ts similarity index 83% rename from src/theme/color-theme-helper.ts rename to src/v2_theme/color-theme-helper.ts index ddb0aa2b1..180520171 100644 --- a/src/theme/color-theme-helper.ts +++ b/src/v2_theme/color-theme-helper.ts @@ -7,17 +7,20 @@ import { OneServiceColorSet } from "../spec/color-spec/oneservice-color-set"; import { RBSColorSet } from "../spec/color-spec/rbs-color-set"; import { getCollection, getValue } from "./helper"; import { - ColorCollectionsMap, - ColorScheme, - ThemeCollectionSpec, - ThemeContextKeys, - ThemeSpec, + V2_ColorCollectionsMap, + V2_ColorScheme, + V2_ThemeCollectionSpec, + V2_ThemeContextKeys, + V2_ThemeSpec, } from "./types"; // ============================================================================= // THEME SPECIFICATION // ============================================================================= -const ColorSpec: ThemeCollectionSpec = { +const ColorSpec: V2_ThemeCollectionSpec< + V2_ColorCollectionsMap, + V2_ColorScheme +> = { collections: { base: BaseColorSet, bookingsg: BookingSGColorSet, @@ -34,10 +37,10 @@ const ColorSpec: ThemeCollectionSpec = { // ============================================================================= export const getThemeColors = (attributePath: string) => { return (props: any): string => { - const theme = props.theme as ThemeSpec; + const theme = props.theme as V2_ThemeSpec; const colorSet: V2_ColorSet = getCollection( ColorSpec, - theme[ThemeContextKeys.colorScheme] + theme[V2_ThemeContextKeys.colorScheme] ); return theme.options && theme.options.color diff --git a/src/theme/design-token-helper.ts b/src/v2_theme/design-token-helper.ts similarity index 77% rename from src/theme/design-token-helper.ts rename to src/v2_theme/design-token-helper.ts index e005f45de..2d8af0041 100644 --- a/src/theme/design-token-helper.ts +++ b/src/v2_theme/design-token-helper.ts @@ -4,19 +4,19 @@ import { BaseDesignTokenSet } from "../spec/design-token-spec/base-design-token- import { RBSDesignTokenSet } from "../spec/design-token-spec/rbs-design-token-set"; import { getCollection, getValue } from "./helper"; import { - DesignTokenCollectionsMap, - DesignTokenScheme, - ThemeCollectionSpec, - ThemeContextKeys, - ThemeSpec, + V2_DesignTokenCollectionsMap, + V2_DesignTokenScheme, + V2_ThemeCollectionSpec, + V2_ThemeContextKeys, + V2_ThemeSpec, } from "./types"; // ============================================================================= // THEME SPECIFICATION // ============================================================================= -const DesignTokenSpec: ThemeCollectionSpec< - DesignTokenCollectionsMap, - DesignTokenScheme +const DesignTokenSpec: V2_ThemeCollectionSpec< + V2_DesignTokenCollectionsMap, + V2_DesignTokenScheme > = { collections: { base: BaseDesignTokenSet, @@ -30,10 +30,10 @@ const DesignTokenSpec: ThemeCollectionSpec< // ============================================================================= export const getThemeDesignToken = (attributePath: string) => { return (props: any): CssValue => { - const theme = props.theme as ThemeSpec; + const theme = props.theme as V2_ThemeSpec; const DesignTokenSet: V2_DesignTokenSet = getCollection( DesignTokenSpec, - theme[ThemeContextKeys.designTokenScheme] + theme[V2_ThemeContextKeys.designTokenScheme] ); return theme.options?.designToken diff --git a/src/theme/helper.ts b/src/v2_theme/helper.ts similarity index 91% rename from src/theme/helper.ts rename to src/v2_theme/helper.ts index 451cb1ffe..e192e5288 100644 --- a/src/theme/helper.ts +++ b/src/v2_theme/helper.ts @@ -1,5 +1,5 @@ import get from "lodash/get"; -import { ThemeCollectionSpec } from "./types"; +import { V2_ThemeCollectionSpec } from "./types"; /** * @@ -25,7 +25,7 @@ export const getValue = ( * @returns the selected collection */ export const getCollection = ( - collectionSpec: ThemeCollectionSpec, + collectionSpec: V2_ThemeCollectionSpec, contextValue?: string ): C => { const themeContextValue = contextValue || collectionSpec.defaultValue; diff --git a/src/v2_theme/index.ts b/src/v2_theme/index.ts new file mode 100644 index 000000000..f0d7e5453 --- /dev/null +++ b/src/v2_theme/index.ts @@ -0,0 +1,45 @@ +import { V2_ThemeContextKeys, V2_ThemeSpec } from "./types"; + +export const V2_BaseTheme: V2_ThemeSpec = { + [V2_ThemeContextKeys.colorScheme]: "base", + [V2_ThemeContextKeys.textStyleScheme]: "base", + [V2_ThemeContextKeys.designTokenScheme]: "base", + [V2_ThemeContextKeys.resourceScheme]: "base", +}; + +export const V2_BookingSGTheme: V2_ThemeSpec = { + [V2_ThemeContextKeys.colorScheme]: "bookingsg", + [V2_ThemeContextKeys.textStyleScheme]: "base", + [V2_ThemeContextKeys.designTokenScheme]: "base", + [V2_ThemeContextKeys.resourceScheme]: "bookingsg", +}; + +export const V2_RBSTheme: V2_ThemeSpec = { + [V2_ThemeContextKeys.colorScheme]: "rbs", + [V2_ThemeContextKeys.textStyleScheme]: "base", + [V2_ThemeContextKeys.designTokenScheme]: "rbs", + [V2_ThemeContextKeys.resourceScheme]: "rbs", +}; + +export const V2_MyLegacyTheme: V2_ThemeSpec = { + [V2_ThemeContextKeys.colorScheme]: "mylegacy", + [V2_ThemeContextKeys.textStyleScheme]: "base", + [V2_ThemeContextKeys.designTokenScheme]: "base", + [V2_ThemeContextKeys.resourceScheme]: "base", +}; + +export const V2_CCubeTheme: V2_ThemeSpec = { + [V2_ThemeContextKeys.colorScheme]: "ccube", + [V2_ThemeContextKeys.textStyleScheme]: "base", + [V2_ThemeContextKeys.designTokenScheme]: "base", + [V2_ThemeContextKeys.resourceScheme]: "ccube", +}; + +export const V2_OneServiceTheme: V2_ThemeSpec = { + [V2_ThemeContextKeys.colorScheme]: "oneservice", + [V2_ThemeContextKeys.textStyleScheme]: "oneservice", + [V2_ThemeContextKeys.designTokenScheme]: "base", + [V2_ThemeContextKeys.resourceScheme]: "base", +}; + +export * from "./types"; diff --git a/src/theme/text-theme-helper.ts b/src/v2_theme/text-theme-helper.ts similarity index 78% rename from src/theme/text-theme-helper.ts rename to src/v2_theme/text-theme-helper.ts index 377a519ae..d0928141a 100644 --- a/src/theme/text-theme-helper.ts +++ b/src/v2_theme/text-theme-helper.ts @@ -3,19 +3,19 @@ import { OneServiceTextStyleSet } from "../spec/text-spec/oneservice-text-style- import { V2_TextStyleSetType } from "../v2_text/types"; import { getCollection, getValue } from "./helper"; import { - FontStyleCollectionsMap, - TextStyleScheme, - ThemeCollectionSpec, - ThemeContextKeys, - ThemeSpec, + V2_FontStyleCollectionsMap, + V2_TextStyleScheme, + V2_ThemeCollectionSpec, + V2_ThemeContextKeys, + V2_ThemeSpec, } from "./types"; // ============================================================================= // THEME SPECIFICATION // ============================================================================= -const TextStyleSpec: ThemeCollectionSpec< - FontStyleCollectionsMap, - TextStyleScheme +const TextStyleSpec: V2_ThemeCollectionSpec< + V2_FontStyleCollectionsMap, + V2_TextStyleScheme > = { collections: { base: BaseTextStyleSet, @@ -29,10 +29,10 @@ const TextStyleSpec: ThemeCollectionSpec< // ============================================================================= export const getThemeTextStyles = (attributePath: string) => { return (props: any): string | number => { - const theme = props.theme as ThemeSpec; + const theme = props.theme as V2_ThemeSpec; const textStyleSet: V2_TextStyleSetType = getCollection( TextStyleSpec, - theme[ThemeContextKeys.textStyleScheme] + theme[V2_ThemeContextKeys.textStyleScheme] ); return theme.options && theme.options.textStyle diff --git a/src/theme/types.ts b/src/v2_theme/types.ts similarity index 65% rename from src/theme/types.ts rename to src/v2_theme/types.ts index a0dbf5d51..3170cda9a 100644 --- a/src/theme/types.ts +++ b/src/v2_theme/types.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import { V2_ColorSet, V2_ColorSetOptions } from "../v2_color/types"; import { @@ -9,47 +10,47 @@ import { V2_TextStyleSetType, } from "../v2_text/types"; -export type ThemeLayout = "normal"; +export type V2_ThemeLayout = "normal"; // ============================================================================= // COLOR THEMES // ============================================================================= -export type ColorScheme = +export type V2_ColorScheme = | "base" | "bookingsg" | "rbs" | "mylegacy" | "ccube" | "oneservice"; -export type ColorCollectionsMap = { - [key in ColorScheme]: V2_ColorSet; +export type V2_ColorCollectionsMap = { + [key in V2_ColorScheme]: V2_ColorSet; }; // ============================================================================= // FONT STYLE THEMES // ============================================================================= -export type TextStyleScheme = "base" | "oneservice"; -export type FontStyleCollectionsMap = { - [key in TextStyleScheme]: V2_TextStyleSetType; +export type V2_TextStyleScheme = "base" | "oneservice"; +export type V2_FontStyleCollectionsMap = { + [key in V2_TextStyleScheme]: V2_TextStyleSetType; }; // ============================================================================= // DESIGN TOKEN THEMES // ============================================================================= -export type DesignTokenScheme = "base" | "rbs"; -export type DesignTokenCollectionsMap = { - [key in DesignTokenScheme]: V2_DesignTokenSet; +export type V2_DesignTokenScheme = "base" | "rbs"; +export type V2_DesignTokenCollectionsMap = { + [key in V2_DesignTokenScheme]: V2_DesignTokenSet; }; // ============================================================================= // RESOURCE THEMES // ============================================================================= -export type ResourceScheme = "base" | "bookingsg" | "rbs" | "ccube"; +export type V2_ResourceScheme = "base" | "bookingsg" | "rbs" | "ccube"; // ============================================================================= // GENERAL // ============================================================================= -export enum ThemeContextKeys { +export enum V2_ThemeContextKeys { colorScheme = "colorScheme", layout = "layout", textStyleScheme = "textStyleScheme", @@ -57,29 +58,29 @@ export enum ThemeContextKeys { resourceScheme = "resourceScheme", } -export interface ThemeSpecOptions { +export interface V2_ThemeSpecOptions { /** for color customisation, can specify subset of set */ color?: V2_ColorSetOptions | undefined; textStyle?: V2_TextStyleSetOptionsType | undefined; designToken?: V2_DesignTokenSetOptions | undefined; } -export interface ThemeSpec { +export interface V2_ThemeSpec { /** Sets the color scheme of the theme */ - [ThemeContextKeys.colorScheme]: ColorScheme; + [V2_ThemeContextKeys.colorScheme]: V2_ColorScheme; /** Sets the text style scheme of the theme */ - [ThemeContextKeys.textStyleScheme]: TextStyleScheme; + [V2_ThemeContextKeys.textStyleScheme]: V2_TextStyleScheme; /** Sets the design token scheme of the theme */ - [ThemeContextKeys.designTokenScheme]: DesignTokenScheme; + [V2_ThemeContextKeys.designTokenScheme]: V2_DesignTokenScheme; /** Sets the layout scheme of the theme */ - [ThemeContextKeys.layout]?: ThemeLayout | undefined; + [V2_ThemeContextKeys.layout]?: V2_ThemeLayout | undefined; /** Sets the resource scheme (e.g. images, text) of the theme */ - [ThemeContextKeys.resourceScheme]: ResourceScheme; + [V2_ThemeContextKeys.resourceScheme]: V2_ResourceScheme; /** For specific customisations to any schemes */ - options?: ThemeSpecOptions | undefined; + options?: V2_ThemeSpecOptions | undefined; } -export interface ThemeCollectionSpec { +export interface V2_ThemeCollectionSpec { collections: T; defaultValue: V; } diff --git a/stories/animation/2-animations-customisable.stories.tsx b/stories/animation/2-animations-customisable.stories.tsx index 803ca9b36..5fec12aef 100644 --- a/stories/animation/2-animations-customisable.stories.tsx +++ b/stories/animation/2-animations-customisable.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { LoadingDotsSpinner } from "src/animations"; import { V2_Color } from "src/v2_color"; -import { BaseTheme } from "src/theme"; +import { V2_BaseTheme } from "src/v2_theme"; import { AnimationDisplay, AnimationItem } from "./doc-elements"; const meta: Meta = { @@ -24,7 +24,9 @@ export const CustomLoadingDotsSpinner: StoryObj = { diff --git a/stories/text/collection-doc-elements.tsx b/stories/text/collection-doc-elements.tsx index a23f980e1..1a2c7c984 100644 --- a/stories/text/collection-doc-elements.tsx +++ b/stories/text/collection-doc-elements.tsx @@ -6,7 +6,7 @@ import { V2_TextStyleHelper, V2_TextStyleSetType, } from "../../src/v2_text"; -import { BaseTheme, ThemeSpec } from "../../src"; +import { V2_BaseTheme, V2_ThemeSpec } from "../../src"; export const FontDisplay = () => { return ( @@ -35,7 +35,7 @@ const FontDisplayContainer = styled.div` // ============================================================================= interface FontSizeDisplayProps { textStyles: V2_TextStyleSetType; - theme?: ThemeSpec; + theme?: V2_ThemeSpec; } export const FontSizeDisplay = ({ @@ -120,7 +120,7 @@ export const FontSizeDisplay = ({ return ( - + {renderFontSizes()} diff --git a/tests/error-display/error-display.spec.tsx b/tests/error-display/error-display.spec.tsx index 545309474..12a355cd8 100644 --- a/tests/error-display/error-display.spec.tsx +++ b/tests/error-display/error-display.spec.tsx @@ -1,10 +1,10 @@ import { render, screen } from "@testing-library/react"; import { - BaseTheme, - BookingSGTheme, ErrorDisplay, ErrorDisplayType, + V2_BaseTheme, + V2_BookingSGTheme, } from "../../src"; import { getErrorDisplayData } from "../../src/error-display/error-display-data"; import { ThemeProvider } from "styled-components"; @@ -19,7 +19,7 @@ describe("ErrorDisplay", () => { it("should render the component", () => { render( - + ); @@ -37,7 +37,7 @@ describe("ErrorDisplay", () => { }; render( - + ); @@ -49,7 +49,7 @@ describe("ErrorDisplay", () => { it("should be able to render custom title if specified", () => { render( - + ); @@ -61,7 +61,7 @@ describe("ErrorDisplay", () => { it("should not render any text content if the imageOnly prop is specified", () => { render( - + { describe("description", () => { it("should be able to render custom description", () => { render( - + ); @@ -90,7 +90,7 @@ describe("ErrorDisplay", () => { it("should be able to render JSX.Element", () => { render( - + {CUSTOM_DESCRIPTION}} @@ -130,7 +130,7 @@ describe("ErrorDisplay", () => { "should render %s error correctly", (type: ErrorDisplayType) => { render( - + ); @@ -156,7 +156,7 @@ describe("ErrorDisplay", () => { "should render bookingsg %s error correctly", (type: ErrorDisplayType) => { render( - + ); @@ -183,7 +183,7 @@ describe("ErrorDisplay", () => { test("should use the specified illustration based on the illustrationScheme prop", () => { render( - + ); @@ -214,7 +214,7 @@ describe("ErrorDisplay", () => { const additionalProps = { dateString: "01/01/2023" }; render( - + Date: Thu, 15 Aug 2024 17:06:46 +0800 Subject: [PATCH 0339/1949] [BOOKINGSG-5981][CCW] introduce new text-style-set called Plus Jakarta Sans --- .../base-plus-jakarta-sans-text-style-set.ts | 87 +++++++++++++++++++ src/spec/text-spec/font-spec.ts | 6 ++ src/theme/text-theme-helper.ts | 2 + src/theme/types.ts | 2 +- 4 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts diff --git a/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts b/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts new file mode 100644 index 000000000..a42f4829b --- /dev/null +++ b/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts @@ -0,0 +1,87 @@ +import { FontFamily } from "./font-spec"; +import { TextStyleSetType } from "../../text/types"; + +// In rem unit +export const BasePlusSansJakartaStyleSet: TextStyleSetType = { + D1: { + fontFamily: FontFamily.PlusSansJakarta.Bold, + fontSize: 3, + fontWeight: 700, + lineHeight: 3.5, + }, + D2: { + fontFamily: FontFamily.PlusSansJakarta.Bold, + fontSize: 2.5, + fontWeight: 700, + lineHeight: 3, + }, + D3: { + fontFamily: FontFamily.PlusSansJakarta.Bold, + fontSize: 1.625, + fontWeight: 700, + lineHeight: 2.25, + }, + D4: { + fontFamily: FontFamily.PlusSansJakarta.Bold, + fontSize: 1.375, + fontWeight: 700, + lineHeight: 1.75, + }, + + DBody: { + fontFamily: FontFamily.PlusSansJakarta.Regular, + fontSize: 1.375, + lineHeight: 1.75, + }, + H1: { + fontFamily: FontFamily.PlusSansJakarta.Bold, + fontSize: 2, + fontWeight: 700, + lineHeight: 2.5, + }, + H2: { + fontFamily: FontFamily.PlusSansJakarta.Bold, + fontSize: 1.625, + fontWeight: 700, + lineHeight: 2.25, + }, + H3: { + fontFamily: FontFamily.PlusSansJakarta.Bold, + fontSize: 1.375, + fontWeight: 700, + lineHeight: 1.75, + }, + H4: { + fontFamily: FontFamily.PlusSansJakarta.Bold, + fontSize: 1.125, + fontWeight: 700, + lineHeight: 1.75, + }, + H5: { + fontFamily: FontFamily.PlusSansJakarta.Bold, + fontSize: 1, + fontWeight: 700, + lineHeight: 1.5, + }, + H6: { + fontFamily: FontFamily.PlusSansJakarta.Bold, + fontSize: 0.875, + fontWeight: 700, + lineHeight: 1.625, + }, + Body: { + fontFamily: FontFamily.PlusSansJakarta.Regular, + fontSize: 1.125, + lineHeight: 1.75, + }, + BodySmall: { + fontFamily: FontFamily.PlusSansJakarta.Regular, + fontSize: 1, + lineHeight: 1.5, + }, + XSmall: { + fontFamily: FontFamily.PlusSansJakarta.Regular, + fontSize: 0.75, + lineHeight: 1.2, + }, +}; diff --git a/src/spec/text-spec/font-spec.ts b/src/spec/text-spec/font-spec.ts index e17ed7896..fa3c55df3 100644 --- a/src/spec/text-spec/font-spec.ts +++ b/src/spec/text-spec/font-spec.ts @@ -5,5 +5,11 @@ export const FontFamily = { Bold: "Open Sans Bold", Light: "Open Sans Light", }, + PlusSansJakarta: { + Regular: "Plus Jakarta Sans", + Semibold: "Plus Jakarta Sans Semibold", + Bold: "Plus Jakarta Sans Bold", + Light: "Plus Jakarta Sans Light", + }, MerriWeather: "Merriweather", }; diff --git a/src/theme/text-theme-helper.ts b/src/theme/text-theme-helper.ts index 11e7d01ee..f8922d50e 100644 --- a/src/theme/text-theme-helper.ts +++ b/src/theme/text-theme-helper.ts @@ -1,4 +1,5 @@ import { BaseTextStyleSet } from "../spec/text-spec/base-text-style-set"; +import { BasePlusSansJakartaStyleSet } from "../spec/text-spec/base-plus-jakarta-sans-text-style-set"; import { OneServiceTextStyleSet } from "../spec/text-spec/oneservice-text-style-set"; import { TextStyleSetType } from "../text/types"; import { getCollection, getValue } from "./helper"; @@ -20,6 +21,7 @@ const TextStyleSpec: ThemeCollectionSpec< collections: { base: BaseTextStyleSet, oneservice: OneServiceTextStyleSet, + plusJakartaSans: BasePlusSansJakartaStyleSet, }, defaultValue: "base", }; diff --git a/src/theme/types.ts b/src/theme/types.ts index 89d70426e..038e774c6 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -21,7 +21,7 @@ export type ColorCollectionsMap = { // ============================================================================= // FONT STYLE THEMES // ============================================================================= -export type TextStyleScheme = "base" | "oneservice"; +export type TextStyleScheme = "base" | "oneservice" | "plusJakartaSans"; export type FontStyleCollectionsMap = { [key in TextStyleScheme]: TextStyleSetType; }; From a533245b5d751e3cea29128bd5df97c45a8d1489 Mon Sep 17 00:00:00 2001 From: Choo Chen Wei Date: Thu, 15 Aug 2024 17:20:04 +0800 Subject: [PATCH 0340/1949] [BOOKINGSG-5981][CCW] add story for plus jakarta sans collection --- .../text/e-plus-jakarta-sans-collection.mdx | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 stories/text/e-plus-jakarta-sans-collection.mdx diff --git a/stories/text/e-plus-jakarta-sans-collection.mdx b/stories/text/e-plus-jakarta-sans-collection.mdx new file mode 100644 index 000000000..5ae2fb966 --- /dev/null +++ b/stories/text/e-plus-jakarta-sans-collection.mdx @@ -0,0 +1,36 @@ +import { Meta, Unstyled } from "@storybook/blocks"; +import { Text } from "src/text"; +import { BasePlusSansJakartaStyleSet } from "src/spec/text-spec/base-plus-jakarta-sans-text-style-set"; +import { Secondary, Title } from "../storybook-common"; +import { FontDisplay, FontSizeDisplay } from "./collection-doc-elements"; +import { OneServiceTheme } from "../../src"; + + + +Plus Sans Jakarta Style + +Overview + +This will be the collection used when the `textStyleScheme` is `plusJakartaSans`. + +```tsx +const theme: ThemeSpec = { + textStyleScheme: "plusJakartaSans", + // ...other specifications +}; +``` + +Font Family + +Open Sans + + + + +Text Styles + + + From b2a507128122dfa5b0fd5e59cc1d399ecd04823c Mon Sep 17 00:00:00 2001 From: quoc_tung_nguyen Date: Thu, 15 Aug 2024 17:02:09 +0700 Subject: [PATCH 0341/1949] [MOL-16390][Tung] Update touch area of accordion --- src/accordion/accordion-item.style.tsx | 1 + src/accordion/accordion-item.tsx | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/accordion/accordion-item.style.tsx b/src/accordion/accordion-item.style.tsx index 2b4ea51ea..675bfe649 100644 --- a/src/accordion/accordion-item.style.tsx +++ b/src/accordion/accordion-item.style.tsx @@ -34,6 +34,7 @@ export const TitleContainer = styled.div` flex-direction: row; align-items: center; justify-content: space-between; + cursor: pointer; `; const TITLE_STYLE = (isCollapsed?: boolean) => css` diff --git a/src/accordion/accordion-item.tsx b/src/accordion/accordion-item.tsx index 5eecb457e..349f85fff 100644 --- a/src/accordion/accordion-item.tsx +++ b/src/accordion/accordion-item.tsx @@ -148,12 +148,11 @@ function Component( $isCollapsed={expand} ref={elementRef} > - + {renderTitle()} {collapsible && ( Date: Fri, 16 Aug 2024 01:52:14 +0800 Subject: [PATCH 0342/1949] [CCUBE-1515][MAHI]Fix Pr change - remove package --- package-lock.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 2a9e1a882..f8499d79c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,6 @@ "dependencies": { "@floating-ui/dom": "^1.5.4", "@floating-ui/react": "^0.26.6", - "@lifesg/react-design-system": "^2.7.0-canary.3", "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", From 25ace19ed7253b00540e39b8fed6790dadee051d Mon Sep 17 00:00:00 2001 From: Ashley Teo Date: Fri, 16 Aug 2024 11:00:51 +0800 Subject: [PATCH 0343/1949] [MOL-15934][AT] update stories and add ready prop to props-table --- .../file-list-card/file-list-card.tsx | 6 +- src/file-download/types.ts | 2 +- .../file-download/file-download.stories.tsx | 57 +++++++++++++------ stories/file-download/props-table.tsx | 7 ++- 4 files changed, 51 insertions(+), 21 deletions(-) diff --git a/src/file-download/file-list-card/file-list-card.tsx b/src/file-download/file-list-card/file-list-card.tsx index dce6f17c2..af3761770 100644 --- a/src/file-download/file-list-card/file-list-card.tsx +++ b/src/file-download/file-list-card/file-list-card.tsx @@ -33,7 +33,7 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { errorMessage, thumbnailImageDataUrl, truncateText = true, - isReady = true, + ready = true, } = fileItem; // Local variables @@ -73,7 +73,7 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { }; const handleDownload = async () => { - if (!isReady || isLoading) { + if (!ready || isLoading) { return; } @@ -170,7 +170,7 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { sizeType="small" aria-label={`download ${name}`} > - {isLoading || !isReady ? ( + {isLoading || !ready ? ( = { thumbnailImageDataUrl: "https://picsum.photos/seed/picsum/200/300", }, + { + id: "5", + name: "not-ready.pdf", + mimeType: "application/pdf", + filePath: "", + errorMessage: "This is custom error message!", + ready: false, + }, ]); return ( = { }, }; -export const WithReadyState: StoryObj = { +export const DownloadReadinessControl: StoryObj = { render: () => { const [fileItems, setFileItem] = useState([ { id: "1", - name: "not-ready.txt", - mimeType: "application/txt", + name: "not-ready.pdf", + mimeType: "application/pdf", filePath: "", errorMessage: "This is custom error message!", - isReady: false, + ready: false, }, ]); @@ -136,23 +145,39 @@ export const WithReadyState: StoryObj = { const isReadyFileItem = structuredClone(fileItems); isReadyFileItem[0] = { ...isReadyFileItem[0], - isReady: true, - name: "ready.txt", + ready: true, + name: "ready.pdf", + size: 6000, + filePath: "https://picsum.photos/200", + thumbnailImageDataUrl: + "https://picsum.photos/seed/picsum/200/300", }; setFileItem(isReadyFileItem); - }, 10000); + }, 5000); }, []); return ( - + <> + + The ready prop allows users to manage the + availability of a file. +
    + This can be used in scenarios where an image needs + time to be generated and is not immediately + available. +
    + This demo shows the ready prop change after 5 + seconds + + } + onDownload={handleDemoDownload} + /> + ); }, }; diff --git a/stories/file-download/props-table.tsx b/stories/file-download/props-table.tsx index 7c9f4c66f..61ab3708f 100644 --- a/stories/file-download/props-table.tsx +++ b/stories/file-download/props-table.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { ApiTable } from "../storybook-common/api-table"; import { ApiTableSectionProps } from "../storybook-common/api-table/types"; @@ -102,6 +101,12 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["boolean"], defaultValue: `true`, }, + { + name: "ready", + description: "Indicates if the file is ready for download", + propTypes: ["boolean"], + defaultValue: `true`, + }, ], }, ]; From e5025891183365f4834cc847fbfd4d363f12bd89 Mon Sep 17 00:00:00 2001 From: Ashley Teo Date: Fri, 16 Aug 2024 11:21:55 +0800 Subject: [PATCH 0344/1949] [MOL-15934][AT] update story and mdx --- stories/file-download/file-download.mdx | 7 +++++++ .../file-download/file-download.stories.tsx | 21 +------------------ 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/stories/file-download/file-download.mdx b/stories/file-download/file-download.mdx index 5e44b988c..2a5cb9fc3 100644 --- a/stories/file-download/file-download.mdx +++ b/stories/file-download/file-download.mdx @@ -27,6 +27,13 @@ A custom error message can be specified for each item. +Download Readiness Control + +The `ready` prop allows users to manage the availability of a file.
    +This can be used in scenarios where an image needs time to be generated and is not immediately available. + + + Component API diff --git a/stories/file-download/file-download.stories.tsx b/stories/file-download/file-download.stories.tsx index 04bc8aab1..f4d5dd02d 100644 --- a/stories/file-download/file-download.stories.tsx +++ b/stories/file-download/file-download.stories.tsx @@ -1,6 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useEffect, useState } from "react"; -import { Text } from "../../src"; import { FileDownload, FileItemDownloadProps } from "../../src/file-download"; type Component = typeof FileDownload; @@ -49,14 +48,6 @@ export const Default: StoryObj = { thumbnailImageDataUrl: "https://picsum.photos/seed/picsum/200/300", }, - { - id: "5", - name: "not-ready.pdf", - mimeType: "application/pdf", - filePath: "", - errorMessage: "This is custom error message!", - ready: false, - }, ]); return ( @@ -163,17 +154,7 @@ export const DownloadReadinessControl: StoryObj = { fileItems={fileItems} title={"Download Readiness Control"} description={ - - The ready prop allows users to manage the - availability of a file. -
    - This can be used in scenarios where an image needs - time to be generated and is not immediately - available. -
    - This demo shows the ready prop change after 5 - seconds -
    + "Ready status will be set to true after 5 seconds." } onDownload={handleDemoDownload} /> From 9d7996bf51d483c5f6cff769511655ecad8adb15 Mon Sep 17 00:00:00 2001 From: Ashley Teo Date: Fri, 16 Aug 2024 14:43:05 +0800 Subject: [PATCH 0345/1949] [MOL-15934][AT] use timeout instead of interval as it only require single change in demo --- stories/file-download/file-download.stories.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stories/file-download/file-download.stories.tsx b/stories/file-download/file-download.stories.tsx index f4d5dd02d..3178140a9 100644 --- a/stories/file-download/file-download.stories.tsx +++ b/stories/file-download/file-download.stories.tsx @@ -123,7 +123,7 @@ export const DownloadReadinessControl: StoryObj = { const [fileItems, setFileItem] = useState([ { id: "1", - name: "not-ready.pdf", + name: "Your file is being generate...", mimeType: "application/pdf", filePath: "", errorMessage: "This is custom error message!", @@ -132,7 +132,7 @@ export const DownloadReadinessControl: StoryObj = { ]); useEffect(() => { - setInterval(() => { + setTimeout(() => { const isReadyFileItem = structuredClone(fileItems); isReadyFileItem[0] = { ...isReadyFileItem[0], From 53e429dfee8d2f251dcaf46b0d8ebf1f7c0bd98b Mon Sep 17 00:00:00 2001 From: quoc_tung_nguyen Date: Fri, 16 Aug 2024 16:38:17 +0700 Subject: [PATCH 0346/1949] [MOL-16390][Tung] check style isCollapsed --- src/accordion/accordion-item.style.tsx | 4 ++-- src/accordion/accordion-item.tsx | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/accordion/accordion-item.style.tsx b/src/accordion/accordion-item.style.tsx index 675bfe649..5fc31a5d0 100644 --- a/src/accordion/accordion-item.style.tsx +++ b/src/accordion/accordion-item.style.tsx @@ -29,12 +29,12 @@ export const Container = styled.div` } `; -export const TitleContainer = styled.div` +export const TitleContainer = styled.div` display: flex; flex-direction: row; align-items: center; justify-content: space-between; - cursor: pointer; + cursor: ${(props) => (props.$isCollapsed ? "pointer" : "unset")}; `; const TITLE_STYLE = (isCollapsed?: boolean) => css` diff --git a/src/accordion/accordion-item.tsx b/src/accordion/accordion-item.tsx index 349f85fff..9efbd3ad8 100644 --- a/src/accordion/accordion-item.tsx +++ b/src/accordion/accordion-item.tsx @@ -148,7 +148,10 @@ function Component( $isCollapsed={expand} ref={elementRef} > - + {renderTitle()} {collapsible && ( Date: Fri, 16 Aug 2024 18:30:17 +0800 Subject: [PATCH 0347/1949] [MOL-15934][RL] Update docs --- stories/file-download/file-download.mdx | 7 ++-- .../file-download/file-download.stories.tsx | 33 +++++++++---------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/stories/file-download/file-download.mdx b/stories/file-download/file-download.mdx index 2a5cb9fc3..33b30244b 100644 --- a/stories/file-download/file-download.mdx +++ b/stories/file-download/file-download.mdx @@ -27,12 +27,13 @@ A custom error message can be specified for each item. -Download Readiness Control +Download readiness + +The `ready` prop allows users to manage the availability of a file. -The `ready` prop allows users to manage the availability of a file.
    This can be used in scenarios where an image needs time to be generated and is not immediately available. - + Component API diff --git a/stories/file-download/file-download.stories.tsx b/stories/file-download/file-download.stories.tsx index 3178140a9..dc88051ba 100644 --- a/stories/file-download/file-download.stories.tsx +++ b/stories/file-download/file-download.stories.tsx @@ -118,24 +118,23 @@ export const WithCustomError: StoryObj = { }, }; -export const DownloadReadinessControl: StoryObj = { +export const DownloadReadiness: StoryObj = { render: () => { - const [fileItems, setFileItem] = useState([ + const [fileItems, setFileItems] = useState([ { id: "1", - name: "Your file is being generate...", + name: "Your file is being generated...", mimeType: "application/pdf", filePath: "", - errorMessage: "This is custom error message!", ready: false, }, ]); useEffect(() => { setTimeout(() => { - const isReadyFileItem = structuredClone(fileItems); - isReadyFileItem[0] = { - ...isReadyFileItem[0], + const readyFileItems = structuredClone(fileItems); + readyFileItems[0] = { + ...readyFileItems[0], ready: true, name: "ready.pdf", size: 6000, @@ -144,21 +143,19 @@ export const DownloadReadinessControl: StoryObj = { "https://picsum.photos/seed/picsum/200/300", }; - setFileItem(isReadyFileItem); + setFileItems(readyFileItems); }, 5000); }, []); return ( - <> - - + ); }, }; From f39681c0a21b6f84c75b8a7d8507564fa8950a4f Mon Sep 17 00:00:00 2001 From: roll Date: Fri, 16 Aug 2024 18:32:21 +0800 Subject: [PATCH 0348/1949] [MISC][RL] v2.7.0-canary.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index bbb0e4c07..3fd5adb0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.4", + "version": "2.7.0-canary.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.4", + "version": "2.7.0-canary.5", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index a92b901f6..f394d1238 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.4", + "version": "2.7.0-canary.5", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From d831298128db30f27e4ab70382dd5363831d1316 Mon Sep 17 00:00:00 2001 From: qroll Date: Fri, 16 Aug 2024 18:37:58 +0800 Subject: [PATCH 0349/1949] [V3][RL] Revert package.json change --- package-lock.json | 119 ++++++++++++++++++++++++++++++++-------------- package.json | 1 - 2 files changed, 84 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8499d79c..04377e2b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -122,6 +122,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -146,6 +147,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, "dependencies": { "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" @@ -158,6 +160,7 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -166,6 +169,7 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", @@ -195,6 +199,7 @@ "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, "dependencies": { "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", @@ -209,6 +214,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, "dependencies": { "@babel/types": "^7.24.7" }, @@ -233,6 +239,7 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.25.2", "@babel/helper-validator-option": "^7.24.8", @@ -354,6 +361,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -366,6 +374,7 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.24.7", "@babel/helper-simple-access": "^7.24.7", @@ -395,6 +404,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -437,6 +447,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -474,6 +485,7 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -482,6 +494,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -490,6 +503,7 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -513,6 +527,7 @@ "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, "dependencies": { "@babel/template": "^7.25.0", "@babel/types": "^7.25.0" @@ -525,6 +540,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -539,6 +555,7 @@ "version": "7.25.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, "dependencies": { "@babel/types": "^7.25.2" }, @@ -956,6 +973,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -2346,6 +2364,7 @@ "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/parser": "^7.25.0", @@ -2359,6 +2378,7 @@ "version": "7.25.3", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/generator": "^7.25.0", @@ -2376,6 +2396,7 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", @@ -2473,6 +2494,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "dev": true, "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -2480,17 +2502,20 @@ "node_modules/@emotion/memoize": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "dev": true }, "node_modules/@emotion/stylis": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", + "dev": true }, "node_modules/@emotion/unitless": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "dev": true }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.1", @@ -3911,6 +3936,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3924,6 +3950,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -3932,6 +3959,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -3949,40 +3977,24 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@lifesg/react-design-system": { - "version": "2.7.0-canary.3", - "resolved": "https://registry.npmjs.org/@lifesg/react-design-system/-/react-design-system-2.7.0-canary.3.tgz", - "integrity": "sha512-phKxNVyuB14Zb13JpNAJ0WR8CuyRrkmoB0zEde9E2dhzgTT1SIBpJcMIpGkz0/L9jqaX9pRnZ9v5bFBFW0PLKw==", - "dependencies": { - "@floating-ui/dom": "^1.5.4", - "@floating-ui/react": "^0.26.6", - "fabric": "^5.3.0", - "immer": "^10.0.2", - "react-slider": "^2.0.6", - "react-zoom-pan-pinch": "^3.3.0" - }, - "peerDependencies": { - "@lifesg/react-icons": "^1.5.0", - "react": "^17.0.2 || ^18.0.0", - "react-dom": "^17.0.2 || ^18.0.0", - "styled-components": "^5.3.5" - } - }, "node_modules/@lifesg/react-icons": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@lifesg/react-icons/-/react-icons-1.6.0.tgz", "integrity": "sha512-Kvb5FcUBRsnak+psYGd8WQ06YeTqKpOq7ecNpautktnSXZDU6OziuAKPsvBNIIqO4e6T9CftL4wCfxCzayftvQ==", + "dev": true, "peerDependencies": { "react": "^17.0.2 || ^18.0.0", "react-dom": "^17.0.2 || ^18.0.0", @@ -10479,6 +10491,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -10490,6 +10503,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -10497,7 +10511,8 @@ "node_modules/ansi-styles/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/anymatch": { "version": "3.1.3", @@ -11024,6 +11039,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", + "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", @@ -11292,6 +11308,7 @@ "version": "4.23.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -11466,6 +11483,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11486,6 +11504,7 @@ "version": "1.0.30001649", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz", "integrity": "sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -11557,6 +11576,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -12270,7 +12290,8 @@ "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/cookie": { "version": "0.6.0", @@ -12440,6 +12461,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "dev": true, "engines": { "node": ">=4" } @@ -12522,6 +12544,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dev": true, "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", @@ -12786,6 +12809,7 @@ "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "devOptional": true, "dependencies": { "ms": "2.1.2" }, @@ -13428,7 +13452,8 @@ "node_modules/electron-to-chromium": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==" + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "dev": true }, "node_modules/emittery": { "version": "0.13.1", @@ -13800,6 +13825,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, "engines": { "node": ">=6" } @@ -13814,6 +13840,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -15380,6 +15407,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -15565,6 +15593,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } @@ -15695,6 +15724,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -15877,6 +15907,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dev": true, "dependencies": { "react-is": "^16.7.0" } @@ -15884,7 +15915,8 @@ "node_modules/hoist-non-react-statics/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true }, "node_modules/hosted-git-info": { "version": "2.8.9", @@ -19507,6 +19539,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -19549,6 +19582,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -19921,7 +19955,8 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.camelcase": { "version": "4.3.0", @@ -20389,6 +20424,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -26551,7 +26587,8 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "devOptional": true }, "node_modules/nan": { "version": "2.19.0", @@ -26709,7 +26746,8 @@ "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true }, "node_modules/node-stream-zip": { "version": "1.15.0", @@ -27584,12 +27622,14 @@ "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -28277,7 +28317,8 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -28904,7 +28945,8 @@ "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true }, "node_modules/react-property": { "version": "2.0.0", @@ -31516,6 +31558,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "devOptional": true, "bin": { "semver": "bin/semver.js" } @@ -31673,7 +31716,8 @@ "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "dev": true }, "node_modules/shebang-command": { "version": "2.0.0", @@ -32360,6 +32404,7 @@ "version": "5.3.11", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz", "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==", + "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.0.0", "@babel/traverse": "^7.4.5", @@ -32412,6 +32457,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -32876,6 +32922,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, "engines": { "node": ">=4" } @@ -33615,6 +33662,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -34718,7 +34766,8 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", diff --git a/package.json b/package.json index f5a28ebd8..df82c71ba 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,6 @@ "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", - "@lifesg/react-design-system": "^2.7.0-canary.3", "react-zoom-pan-pinch": "^3.3.0" }, "devDependencies": { From 2c687044dbce3596f95ba94d29582aebf933667d Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Thu, 15 Aug 2024 14:16:38 +0800 Subject: [PATCH 0350/1949] [CCUBE-1524][MAHI]Added Primitive and Sematic tokens for new theme --- .storybook/preview.ts | 26 +-- custom-types/styled.d.ts | 5 +- package-lock.json | 2 +- package.json | 3 +- src/index.ts | 1 + .../specs/bookingsg-color-set.ts | 93 ++++++++ .../color-primitive/specs/ccube-color-set.ts | 94 ++++++++ .../color-primitive/specs/lifesg-color-set.ts | 94 ++++++++ .../specs/mylegacy-color-set.ts | 93 ++++++++ .../color-primitive/specs/rbs-color-set.ts | 94 ++++++++ src/theme/color-primitive/theme-helper.ts | 124 ++++++++++ .../specs/bookingsg-semantic-tokens.ts | 90 ++++++++ .../specs/lifesg-semantic-tokens.ts | 88 ++++++++ src/theme/color-semantic/theme-helper.ts | 144 ++++++++++++ src/theme/helpers.ts | 18 ++ src/theme/index.ts | 7 + src/theme/types.ts | 212 ++++++++++++++++++ tests/theme/test-script.spec.tsx | 57 +++++ 18 files changed, 1228 insertions(+), 17 deletions(-) create mode 100644 src/theme/color-primitive/specs/bookingsg-color-set.ts create mode 100644 src/theme/color-primitive/specs/ccube-color-set.ts create mode 100644 src/theme/color-primitive/specs/lifesg-color-set.ts create mode 100644 src/theme/color-primitive/specs/mylegacy-color-set.ts create mode 100644 src/theme/color-primitive/specs/rbs-color-set.ts create mode 100644 src/theme/color-primitive/theme-helper.ts create mode 100644 src/theme/color-semantic/specs/bookingsg-semantic-tokens.ts create mode 100644 src/theme/color-semantic/specs/lifesg-semantic-tokens.ts create mode 100644 src/theme/color-semantic/theme-helper.ts create mode 100644 src/theme/helpers.ts create mode 100644 src/theme/index.ts create mode 100644 src/theme/types.ts create mode 100644 tests/theme/test-script.spec.tsx diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 5dab465c5..3a861193a 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -3,24 +3,24 @@ import { INITIAL_VIEWPORTS } from "@storybook/addon-viewport"; import type { Preview } from "@storybook/react"; import { ThemeProvider } from "styled-components"; import { - BaseTheme, - BookingSGTheme, - CCubeTheme, - MyLegacyTheme, - OneServiceTheme, - RBSTheme, -} from "../src/theme"; + V2_BaseTheme, + V2_BookingSGTheme, + V2_CCubeTheme, + V2_MyLegacyTheme, + V2_OneServiceTheme, + V2_RBSTheme, +} from "../src/v2_theme"; const preview: Preview = { decorators: [ withThemeFromJSXProvider({ themes: { - LifeSG: BaseTheme, - BookingSG: BookingSGTheme, - CCube: CCubeTheme, - MyLegacy: MyLegacyTheme, - RBS: RBSTheme, - OneService: OneServiceTheme, + LifeSG: V2_BaseTheme, + BookingSG: V2_BookingSGTheme, + CCube: V2_CCubeTheme, + MyLegacy: V2_MyLegacyTheme, + RBS: V2_RBSTheme, + OneService: V2_OneServiceTheme, }, Provider: ThemeProvider, }), diff --git a/custom-types/styled.d.ts b/custom-types/styled.d.ts index 507572516..fcbfeccef 100644 --- a/custom-types/styled.d.ts +++ b/custom-types/styled.d.ts @@ -1,6 +1,7 @@ import "styled-components"; -import { V2_ThemeSpec } from "../src/v2_theme/types"; + +import { ThemeSpec } from "../src/theme/types"; declare module "styled-components" { - export interface DefaultTheme extends V2_ThemeSpec {} + export interface DefaultTheme extends ThemeSpec {} } diff --git a/package-lock.json b/package-lock.json index 04377e2b0..81d8fa739 100644 --- a/package-lock.json +++ b/package-lock.json @@ -75,7 +75,7 @@ "jest-canvas-mock": "^2.3.1", "jest-environment-jsdom": "^29.7.0", "jest-junit": "^16.0.0", - "jest-styled-components": "^7.0.8", + "jest-styled-components": "^7.2.0", "jscodeshift": "^0.16.1", "lint-staged": "^12.3.7", "lodash": "^4.17.21", diff --git a/package.json b/package.json index df82c71ba..e3129d10b 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "dependencies": { "@floating-ui/dom": "^1.5.4", "@floating-ui/react": "^0.26.6", + "@lifesg/react-design-system": "^2.7.0-canary.3", "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", @@ -101,7 +102,7 @@ "jest-canvas-mock": "^2.3.1", "jest-environment-jsdom": "^29.7.0", "jest-junit": "^16.0.0", - "jest-styled-components": "^7.0.8", + "jest-styled-components": "^7.2.0", "jscodeshift": "^0.16.1", "lint-staged": "^12.3.7", "lodash": "^4.17.21", diff --git a/src/index.ts b/src/index.ts index 1a3aab41c..3f27ebaf9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -77,3 +77,4 @@ export * from "./tooltip"; export * from "./transition"; export * from "./uneditable-section"; export * from "./unit-number"; +export * from "./theme"; diff --git a/src/theme/color-primitive/specs/bookingsg-color-set.ts b/src/theme/color-primitive/specs/bookingsg-color-set.ts new file mode 100644 index 000000000..54e659923 --- /dev/null +++ b/src/theme/color-primitive/specs/bookingsg-color-set.ts @@ -0,0 +1,93 @@ +import { ColorSet } from "../../types"; +import { getPrimitiveColor } from "../theme-helper"; + +export const BookingSgColorSet: ColorSet = { + "brand-10": "#2C0C0B", + "brand-20": "#4C1513", + "brand-30": "#6C1D1B", + "brand-40": "#922825", + "brand-50": "#BF3431", + "brand-60": "#F15D5A", + "brand-70": "#F69491", + "brand-80": "#FABAB7", + "brand-90": "#FCD7D2", + "brand-95": "#FFEBE7", + "brand-100": "#FFF6F4", + "primary-10": "#1A122C", + "primary-20": "#2F1F4D", + "primary-30": "#422D6E", + "primary-40": "#5B3D97", + "primary-50": "#7654BC", + "primary-60": "#9A82CD", + "primary-70": "#B7A7D8", + "primary-80": "#CFC5E5", + "primary-90": "#E3DDF0", + "primary-95": "#F0EDF7", + "primary-100": "#F9F8FC", + "secondary-10": "#0E1723", + "secondary-20": "#18293D", + "secondary-30": "#233A57", + "secondary-40": "#305078", + "secondary-50": "#4B6A8F", + "secondary-60": "#7B91A9", + "secondary-70": "#A1B1C3", + "secondary-80": "#C1CBD7", + "secondary-90": "#DBE1E8", + "secondary-95": "#EBEFF2", + "secondary-100": "#F7F8FA", + "neutral-10": "#161616", + "neutral-20": "#282828", + "neutral-30": "#393939", + "neutral-40": "#4E4E4E", + "neutral-50": "#686868", + "neutral-60": "#8E8E8E", + "neutral-70": "#AFAFB0", + "neutral-80": "#C7CACA", + "neutral-90": "#DDE1E2", + "neutral-95": "#EDEFEF", + "neutral-100": "#F9F9F9", + "success-10": "#081A0F", + "success-20": "#0E2D1B", + "success-30": "#154126", + "success-40": "#1C5A34", + "success-50": "#257645", + "success-60": "#44A068", + "success-70": "#64C189", + "success-80": "#80DCA5", + "success-90": "#B4ECCB", + "success-95": "#D5F6E2", + "success-100": "#EFFCF4", + "warning-10": "#221302", + "warning-20": "#3B2204", + "warning-30": "#543106", + "warning-40": "#744408", + "warning-50": "#98590C", + "warning-60": "#D07A13", + "warning-70": "#E4A244", + "warning-80": "#F5C26C", + "warning-90": "#FADBA6", + "warning-95": "#FCECD4", + "warning-100": "#FDF7F0", + "error-10": "#330505", + "error-20": "#550808", + "error-30": "#750C0C", + "error-40": "#9E130F", + "error-50": "#CB2213", + "error-60": "#DE6C6C", + "error-70": "#E89B9B", + "error-80": "#EFBEBE", + "error-90": "#F5D9D9", + "error-95": "#F9ECEC", + "error-100": "#FCF7F7", + "information-10": "#021824", + "information-20": "#032B3F", + "information-30": "#053D59", + "information-40": "#065478", + "information-50": "#176E9B", + "information-60": "#5296BE", + "information-70": "#82B5DA", + "information-80": "#ACCFE7", + "information-90": "#CCE3F1", + "information-95": "#E3F1F8", + "information-100": "#F4FAFD", +}; diff --git a/src/theme/color-primitive/specs/ccube-color-set.ts b/src/theme/color-primitive/specs/ccube-color-set.ts new file mode 100644 index 000000000..a005927c8 --- /dev/null +++ b/src/theme/color-primitive/specs/ccube-color-set.ts @@ -0,0 +1,94 @@ +import { ColorSet } from "../../types"; + +export const CCubeColorSet: ColorSet = { + "brand-10": "#1F1221", + "brand-20": "#371F3B", + "brand-30": "#4E2C53", + "brand-40": "#6B3E73", + "brand-50": "#8D5197", + "brand-60": "#FF3399", + "brand-70": "#FF88C4", + "brand-80": "#FFB3D9", + "brand-90": "#FFD4E9", + "brand-95": "#FFE8F3", + "brand-100": "#FFD6EB", + "primary-10": "#1F1221", + "primary-20": "#371F3B", + "primary-30": "#4E2C53", + "primary-40": "#6B3E73", + "primary-50": "#8D5197", + "primary-60": "#B07DB7", + "primary-70": "#C7A3CC", + "primary-80": "#D9C2DD", + "primary-90": "#E9DBEB", + "primary-95": "#F3ECF4", + "primary-100": "#FAF7FA", + "secondary-10": "#2D091B", + "secondary-20": "#4D0F2E", + "secondary-30": "#6B1540", + "secondary-40": "#931D58", + "secondary-50": "#C02673", + "secondary-60": "#FF409F", + "secondary-70": "#FF88C4", + "secondary-80": "#FFB3D9", + "secondary-90": "#FFD4E9", + "secondary-95": "#FFE8F3", + "secondary-100": "#FFF8FC", + "neutral-10": "#161616", + "neutral-20": "#282828", + "neutral-30": "#393939", + "neutral-40": "#4E4E4E", + "neutral-50": "#686868", + "neutral-60": "#8E8E8E", + "neutral-70": "#AFAFBO", + "neutral-80": "#C7CACA", + "neutral-90": "#DDE1E2", + "neutral-95": "#EDEFEF", + "neutral-100": "#F9F9F9", + "success-10": "#081A0F", + "success-20": "#0E2D1B", + "success-30": "#154126", + "success-40": "#1C5A34", + "success-50": "#257645", + "success-60": "#44A068", + "success-70": "#64C189", + "success-80": "#80DCA5", + "success-90": "#B4ECCB", + "success-95": "#D5F6E2", + "success-100": "#EFFCF4", + "warning-10": "#221302", + "warning-20": "#3B2204", + "warning-30": "#543106", + "warning-40": "#744408", + "warning-50": "#98590C", + "warning-60": "#D07A13", + "warning-70": "#E4A244", + "warning-80": "#F5C26C", + "warning-90": "#FADBA6", + "warning-95": "#FCECD4", + "warning-100": "#FDF7F0", + "error-10": "#330505", + "error-20": "#550808", + "error-30": "#750C0C", + "error-40": "#9E130F", + "error-50": "#CB2213", + "error-60": "#DE6C6C", + "error-70": "#E89B9B", + "error-80": "#EFBEBE", + "error-90": "#F5D9D9", + "error-95": "#F9ECEC", + "error-100": "#FCF7F7", + "information-10": "#021824", + "information-20": "#032B3F", + "information-30": "#053D59", + "information-40": "#065478", + "information-50": "#176E9B", + "information-60": "#5296BE", + "information-70": "#82B5DA", + "information-80": "#ACCFE7", + "information-90": "#CCE3F1", + "information-95": "#E3F1F8", + "information-100": "#F4FAFD", + white: "#FFFFFF", + black: "#000000", +}; diff --git a/src/theme/color-primitive/specs/lifesg-color-set.ts b/src/theme/color-primitive/specs/lifesg-color-set.ts new file mode 100644 index 000000000..1a22ea572 --- /dev/null +++ b/src/theme/color-primitive/specs/lifesg-color-set.ts @@ -0,0 +1,94 @@ +import { ColorSet } from "../../types"; + +export const LifeSgColorSet: ColorSet = { + "brand-10": "#2C0C0B", + "brand-20": "#4C1513", + "brand-30": "#6C1D1B", + "brand-40": "#922825", + "brand-50": "#BF3431", + "brand-60": "#F15D5A", + "brand-70": "#F69491", + "brand-80": "#FABAB7", + "brand-90": "#FCD7D2", + "brand-95": "#FFEBE7", + "brand-100": "#FFF6F4", + "primary-10": "#001731", + "primary-20": "#002752", + "primary-30": "#003874", + "primary-40": "#004D9F", + "primary-50": "#1768BE", + "primary-60": "#3C91EC", + "primary-70": "#6CB4FF", + "primary-80": "#A5CDFF", + "primary-90": "#CFE1FE", + "primary-95": "#E8F0FE", + "primary-100": "#F7F9FF", + "secondary-10": "#131529", + "secondary-20": "#222547", + "secondary-30": "#2F3565", + "secondary-40": "#42498B", + "secondary-50": "#5B62A7", + "secondary-60": "#858CBD", + "secondary-70": "#A8ADCF", + "secondary-80": "#C6C9E0", + "secondary-90": "#DDDFEC", + "secondary-95": "#EDEEF5", + "secondary-100": "#F8F8FB", + "neutral-10": "#161616", + "neutral-20": "#282828", + "neutral-30": "#393939", + "neutral-40": "#4E4E4E", + "neutral-50": "#686868", + "neutral-60": "#8E8E8E", + "neutral-70": "#AFAFBO", + "neutral-80": "#C7CACA", + "neutral-90": "#DDE1E2", + "neutral-95": "#EDEFEF", + "neutral-100": "#F9F9F9", + "success-10": "#081A0F", + "success-20": "#0E2D1B", + "success-30": "#154126", + "success-40": "#1C5A34", + "success-50": "#257645", + "success-60": "#44A068", + "success-70": "#64C189", + "success-80": "#80DCA5", + "success-90": "#B4ECCB", + "success-95": "#D5F6E2", + "success-100": "#EFFCF4", + "warning-10": "#221302", + "warning-20": "#3B2204", + "warning-30": "#543106", + "warning-40": "#744408", + "warning-50": "#98590C", + "warning-60": "#D07A13", + "warning-70": "#E4A244", + "warning-80": "#F5C26C", + "warning-90": "#FADBA6", + "warning-95": "#FCECD4", + "warning-100": "#FDF7F0", + "error-10": "#330505", + "error-20": "#550808", + "error-30": "#750C0C", + "error-40": "#9E130F", + "error-50": "#CB2213", + "error-60": "#DE6C6C", + "error-70": "#E89B9B", + "error-80": "#EFBEBE", + "error-90": "#F5D9D9", + "error-95": "#F9ECEC", + "error-100": "#FCF7F7", + "information-10": "#021824", + "information-20": "#032B3F", + "information-30": "#053D59", + "information-40": "#065478", + "information-50": "#176E9B", + "information-60": "#5296BE", + "information-70": "#82B5DA", + "information-80": "#ACCFE7", + "information-90": "#CCE3F1", + "information-95": "#E3F1F8", + "information-100": "#F4FAFD", +}; + +export type ColorSetOptions = Partial; diff --git a/src/theme/color-primitive/specs/mylegacy-color-set.ts b/src/theme/color-primitive/specs/mylegacy-color-set.ts new file mode 100644 index 000000000..5b0e98fb1 --- /dev/null +++ b/src/theme/color-primitive/specs/mylegacy-color-set.ts @@ -0,0 +1,93 @@ +import { ColorSet } from "../../types"; + +export const MyLegacyColorSet: ColorSet = { + // brand,secondary from lifesg + "brand-10": "#2C0C0B", + "brand-20": "#4C1513", + "brand-30": "#6C1D1B", + "brand-40": "#922825", + "brand-50": "#BF3431", + "brand-60": "#F15D5A", + "brand-70": "#F69491", + "brand-80": "#FABAB7", + "brand-90": "#FCD7D2", + "brand-95": "#FFEBE7", + "brand-100": "#FFF6F4", + "primary-10": "#0011924", + "primary-20": "#032B40", + "primary-30": "#043D5A", + "primary-40": "#05547B", + "primary-50": "#096EA1", + "primary-60": "#2098D3", + "primary-70": "#5CB9E8", + "primary-80": "#8BD3F6", + "primary-90": "#BEE6FA", + "primary-95": "#E2F2FA", + "primary-100": "#F4FAFC", + "secondary-10": "#131529", + "secondary-20": "#222547", + "secondary-30": "#2F3565", + "secondary-40": "#42498B", + "secondary-50": "#5B62A7", + "secondary-60": "#858CBD", + "secondary-70": "#A8ADCF", + "secondary-80": "#C6C9E0", + "secondary-90": "#DDDFEC", + "secondary-95": "#EDEEF5", + "secondary-100": "#F8F8FB", + "neutral-10": "#161616", + "neutral-20": "#282828", + "neutral-30": "#393939", + "neutral-40": "#4E4E4E", + "neutral-50": "#686868", + "neutral-60": "#8E8E8E", + "neutral-70": "#AFAFBO", + "neutral-80": "#C7CACA", + "neutral-90": "#DDE1E2", + "neutral-95": "#EDEFEF", + "neutral-100": "#F9F9F9", + "success-10": "#081A0F", + "success-20": "#0E2D1B", + "success-30": "#154126", + "success-40": "#1C5A34", + "success-50": "#257645", + "success-60": "#44A068", + "success-70": "#64C189", + "success-80": "#80DCA5", + "success-90": "#B4ECCB", + "success-95": "#D5F6E2", + "success-100": "#EFFCF4", + "warning-10": "#221302", + "warning-20": "#3B2204", + "warning-30": "#543106", + "warning-40": "#744408", + "warning-50": "#98590C", + "warning-60": "#D07A13", + "warning-70": "#E4A244", + "warning-80": "#F5C26C", + "warning-90": "#FADBA6", + "warning-95": "#FCECD4", + "warning-100": "#FDF7F0", + "error-10": "#330505", + "error-20": "#550808", + "error-30": "#750C0C", + "error-40": "#9E130F", + "error-50": "#CB2213", + "error-60": "#DE6C6C", + "error-70": "#E89B9B", + "error-80": "#EFBEBE", + "error-90": "#F5D9D9", + "error-95": "#F9ECEC", + "error-100": "#FCF7F7", + "information-10": "#021824", + "information-20": "#032B3F", + "information-30": "#053D59", + "information-40": "#065478", + "information-50": "#176E9B", + "information-60": "#5296BE", + "information-70": "#82B5DA", + "information-80": "#ACCFE7", + "information-90": "#CCE3F1", + "information-95": "#E3F1F8", + "information-100": "#F4FAFD", +}; diff --git a/src/theme/color-primitive/specs/rbs-color-set.ts b/src/theme/color-primitive/specs/rbs-color-set.ts new file mode 100644 index 000000000..cb7f6816c --- /dev/null +++ b/src/theme/color-primitive/specs/rbs-color-set.ts @@ -0,0 +1,94 @@ +import { ColorSet } from "../../types"; + +export const RBSColorSet: ColorSet = { + "brand-10": "#0E123A", + "brand-20": "#191E65", + "brand-30": "#232B90", + "brand-40": "#303BC5", + "brand-50": "#494CFF", + "brand-60": "#AD6EFF", + "brand-70": "#AEA4FF", + "brand-80": "#C5C4FF", + "brand-90": "#DDDCFF", + "brand-95": "#EDECFF", + "brand-100": "#F8F8FF", + "primary-10": "#10152B", + "primary-20": "#1C254B", + "primary-30": "#28356C", + "primary-40": "#38489A", + "primary-50": "#4D5AD7", + "primary-60": "#7487F2", + "primary-70": "#9AAAFC", + "primary-80": "#BDC7FD", + "primary-90": "#DADFFB", + "primary-95": "#ECEEFE", + "primary-100": "#F7F8FF", + "secondary-10": "#19151D", + "secondary-20": "#2B2533", + "secondary-30": "#3E3649", + "secondary-40": "#564A64", + "secondary-50": "#6F637D", + "secondary-60": "#948B9F", + "secondary-70": "#B3ACBB", + "secondary-80": "#CCC8D2", + "secondary-90": "#E1DEE4", + "secondary-95": "#EFEEF1", + "secondary-100": "#F9F8F9", + "neutral-10": "#161616", + "neutral-20": "#282828", + "neutral-30": "#393939", + "neutral-40": "#4E4E4E", + "neutral-50": "#686868", + "neutral-60": "#8E8E8E", + "neutral-70": "#AFAFBO", + "neutral-80": "#C7CACA", + "neutral-90": "#DDE1E2", + "neutral-95": "#EDEFEF", + "neutral-100": "#F9F9F9", + "success-10": "#081A0F", + "success-20": "#0E2D1B", + "success-30": "#154126", + "success-40": "#1C5A34", + "success-50": "#257645", + "success-60": "#44A068", + "success-70": "#64C189", + "success-80": "#80DCA5", + "success-90": "#B4ECCB", + "success-95": "#D5F6E2", + "success-100": "#EFFCF4", + "warning-10": "#221302", + "warning-20": "#3B2204", + "warning-30": "#543106", + "warning-40": "#744408", + "warning-50": "#98590C", + "warning-60": "#D07A13", + "warning-70": "#E4A244", + "warning-80": "#F5C26C", + "warning-90": "#FADBA6", + "warning-95": "#FCECD4", + "warning-100": "#FDF7F0", + "error-10": "#330505", + "error-20": "#550808", + "error-30": "#750C0C", + "error-40": "#9E130F", + "error-50": "#CB2213", + "error-60": "#DE6C6C", + "error-70": "#E89B9B", + "error-80": "#EFBEBE", + "error-90": "#F5D9D9", + "error-95": "#F9ECEC", + "error-100": "#FCF7F7", + "information-10": "#021824", + "information-20": "#032B3F", + "information-30": "#053D59", + "information-40": "#065478", + "information-50": "#176E9B", + "information-60": "#5296BE", + "information-70": "#82B5DA", + "information-80": "#ACCFE7", + "information-90": "#CCE3F1", + "information-95": "#E3F1F8", + "information-100": "#F4FAFD", + white: "#FFFFFF", + black: "#000000", +}; diff --git a/src/theme/color-primitive/theme-helper.ts b/src/theme/color-primitive/theme-helper.ts new file mode 100644 index 000000000..2f6a33998 --- /dev/null +++ b/src/theme/color-primitive/theme-helper.ts @@ -0,0 +1,124 @@ +import { get } from "lodash"; +import { + ColorCollectionsMap, + ColorScheme, + ColorSet, + ThemeCollectionSpec, + ThemeContextKeys, + ThemeSpec, +} from "../types"; +import { BookingSgColorSet } from "./specs/bookingsg-color-set"; +import { CCubeColorSet } from "./specs/ccube-color-set"; +import { LifeSgColorSet } from "./specs/lifesg-color-set"; +import { MyLegacyColorSet } from "./specs/mylegacy-color-set"; +import { RBSColorSet } from "./specs/rbs-color-set"; +import { getCollection, getValue } from "../helpers"; + +const ColorSpec: ThemeCollectionSpec = { + collections: { + lifesg: LifeSgColorSet, + bookingsg: BookingSgColorSet, + rbs: RBSColorSet, + mylegacy: MyLegacyColorSet, + ccube: CCubeColorSet, + }, + defaultValue: "lifesg", +}; + +export const getPrimitiveColor = (key: keyof ColorSet) => { + return (props: any): string => { + const theme = props.theme as ThemeSpec; + const colorSet: ColorSet = getCollection( + ColorSpec, + theme[ThemeContextKeys.colorScheme] + ); + + if (theme.overrides && theme.overrides.color) { + return getValue(colorSet, key, theme.overrides.color) as string; + } else { + return colorSet[key]; + } + }; +}; + +export const PrimitiveColor = { + "primary-10": getPrimitiveColor("primary-10"), + "primary-20": getPrimitiveColor("primary-20"), + "primary-30": getPrimitiveColor("primary-30"), + "primary-40": getPrimitiveColor("primary-40"), + "primary-50": getPrimitiveColor("primary-50"), + "primary-60": getPrimitiveColor("primary-60"), + "primary-70": getPrimitiveColor("primary-70"), + "primary-80": getPrimitiveColor("primary-80"), + "primary-90": getPrimitiveColor("primary-90"), + "primary-95": getPrimitiveColor("primary-95"), + "primary-100": getPrimitiveColor("primary-100"), + "secondary-10": getPrimitiveColor("secondary-10"), + "secondary-20": getPrimitiveColor("secondary-20"), + "secondary-30": getPrimitiveColor("secondary-30"), + "secondary-40": getPrimitiveColor("secondary-40"), + "secondary-50": getPrimitiveColor("secondary-50"), + "secondary-60": getPrimitiveColor("secondary-60"), + "secondary-70": getPrimitiveColor("secondary-70"), + "secondary-80": getPrimitiveColor("secondary-80"), + "secondary-90": getPrimitiveColor("secondary-90"), + "secondary-95": getPrimitiveColor("secondary-95"), + "secondary-100": getPrimitiveColor("secondary-100"), + "neutral-10": getPrimitiveColor("neutral-10"), + "neutral-20": getPrimitiveColor("neutral-20"), + "neutral-30": getPrimitiveColor("neutral-30"), + "neutral-40": getPrimitiveColor("neutral-40"), + "neutral-50": getPrimitiveColor("neutral-50"), + "neutral-60": getPrimitiveColor("neutral-60"), + "neutral-70": getPrimitiveColor("neutral-70"), + "neutral-80": getPrimitiveColor("neutral-80"), + "neutral-90": getPrimitiveColor("neutral-90"), + "neutral-95": getPrimitiveColor("neutral-95"), + "neutral-100": getPrimitiveColor("neutral-100"), + "success-10": getPrimitiveColor("success-10"), + "success-20": getPrimitiveColor("success-20"), + "success-30": getPrimitiveColor("success-30"), + "success-40": getPrimitiveColor("success-40"), + "success-50": getPrimitiveColor("success-50"), + "success-60": getPrimitiveColor("success-60"), + "success-70": getPrimitiveColor("success-70"), + "success-80": getPrimitiveColor("success-80"), + "success-90": getPrimitiveColor("success-90"), + "success-95": getPrimitiveColor("success-95"), + "success-100": getPrimitiveColor("success-100"), + "warning-10": getPrimitiveColor("warning-10"), + "warning-20": getPrimitiveColor("warning-20"), + "warning-30": getPrimitiveColor("warning-30"), + "warning-40": getPrimitiveColor("warning-40"), + "warning-50": getPrimitiveColor("warning-50"), + "warning-60": getPrimitiveColor("warning-60"), + "warning-70": getPrimitiveColor("warning-70"), + "warning-80": getPrimitiveColor("warning-80"), + "warning-90": getPrimitiveColor("warning-90"), + "warning-95": getPrimitiveColor("warning-95"), + "warning-100": getPrimitiveColor("warning-100"), + "error-10": getPrimitiveColor("error-10"), + "error-20": getPrimitiveColor("error-20"), + "error-30": getPrimitiveColor("error-30"), + "error-40": getPrimitiveColor("error-40"), + "error-50": getPrimitiveColor("error-50"), + "error-60": getPrimitiveColor("error-60"), + "error-70": getPrimitiveColor("error-70"), + "error-80": getPrimitiveColor("error-80"), + "error-90": getPrimitiveColor("error-90"), + "error-95": getPrimitiveColor("error-95"), + "error-100": getPrimitiveColor("error-100"), + "information-10": getPrimitiveColor("information-10"), + "information-20": getPrimitiveColor("information-20"), + "information-30": getPrimitiveColor("information-30"), + "information-40": getPrimitiveColor("information-40"), + "information-50": getPrimitiveColor("information-50"), + "information-60": getPrimitiveColor("information-60"), + "information-70": getPrimitiveColor("information-70"), + "information-80": getPrimitiveColor("information-80"), + "information-90": getPrimitiveColor("information-90"), + "information-95": getPrimitiveColor("information-95"), + "information-100": getPrimitiveColor("information-100"), + white: getPrimitiveColor("white"), + black: getPrimitiveColor("black"), +}; diff --git a/src/theme/color-semantic/specs/bookingsg-semantic-tokens.ts b/src/theme/color-semantic/specs/bookingsg-semantic-tokens.ts new file mode 100644 index 000000000..8347b3b8f --- /dev/null +++ b/src/theme/color-semantic/specs/bookingsg-semantic-tokens.ts @@ -0,0 +1,90 @@ +import { getPrimitiveColor } from "../../color-primitive/theme-helper"; +import { SematicColorSet } from "../../types"; + +export const BookingSGColorSet: SematicColorSet = { + text: "neutral-20", + "text-hover": "primary-40", + "text-selected": "primary-50", + "text-disabled": "neutral-50", + "text-success": "success-40", + "text-inverse": "white", + "text-subtle": "neutral-30", + "text-subtler": "neutral-50", + "text-subtlest": "neutral-60", + "text-disabled-subtle": "neutral-60", + "text-disabled-subtlest": "neutral-80", + "text-selected-disabled": "primary-60", + "text-warning": "warning-40", + "text-error": "error-40", + "text-info": "information-40", + + icon: "neutral-50", + "icon-hover": "primary-40", + "icon-selected": "primary-50", + "icon-disabled": "neutral-50", + "icon-success": "success-50", + "icon-inverse": "white", + "icon-subtle": "neutral-60", + "icon-primary": "primary-50", + "icon-primary-subtle": "primary-60", + "icon-primary-subtlest": "primary-70", + "icon-disabled-subtle": "neutral-60", + "icon-selected-disabled": "primary-60", + "icon-warning": "warning-60", + "icon-error": "error-50", + "icon-info": "information-50", + + border: "neutral-90", + "border-hover": "primary-90", + "border-selected": "primary-50", + "border-disabled": "neutral-90", + "border-success": "success-60", + "border-inverse": "neutral-90", + "border-strong": "neutral-70", + "border-primary": "primary-50", + "border-primary-subtle": "primary-60", + "border-hover-strong": "primary-60", + "border-selected-subtle": "primary-70", + "border-selected-subtlest": "primary-90", + "border-focus": "primary-60", + "border-focus-strong": "primary-50", + "border-selected-disabled": "neutral-70", + "border-warning": "warning-60", + "border-error": "error-60", + "border-error-focus": "error-60", + "border-info": "information-60", + + background: "white", + "background-hover": "primary-95", + "background-selected": "primary-95", + "background-disabled": "neutral-95", + "background-success": "success-100", + "background-inverse": "neutral-40", + "background-subtle": "neutral-100", + "background-hover-strong": "primary-90", + "background-hover-subtle": "primary-100", + "background-hover-neutral": "neutral-95", + "background-primary": "primary-50", + "background-primary-hover": "primary-40", + "background-primary-subtle": "primary-60", + "background-primary-subtlest": "primary-100", + "background-primary-subtlest-hover": "primary-90", + "background-primary-subtlest-selected": "primary-90", + "background-selected-strong": "primary-90", + "background-selected-hover": "primary-90", + "background-selected-disabled": "primary-90", + "background-warning": "warning-100", + "background-error": "error-100", + "background-info": "info-100", + + "overlay-strong": "rgba(40, 40, 40, 0.95)", + "overlay-subtle": "rgba(40, 40, 40, 0.20)", + // ? + "overlay-inverse-gradient": "rgba(255, 255, 255, 1)", + + hyperlink: "primary-50", + // ? + "hyperlink-inverse": "primary-50", + "focus-ring": "black", + "focus-ring-inverse": "white", +}; diff --git a/src/theme/color-semantic/specs/lifesg-semantic-tokens.ts b/src/theme/color-semantic/specs/lifesg-semantic-tokens.ts new file mode 100644 index 000000000..28a842e63 --- /dev/null +++ b/src/theme/color-semantic/specs/lifesg-semantic-tokens.ts @@ -0,0 +1,88 @@ +import { getPrimitiveColor } from "../../color-primitive/theme-helper"; +import { SematicColorSet } from "../../types"; + +export const LifeSGColorSet: SematicColorSet = { + text: getPrimitiveColor("neutral-20"), + "text-hover": getPrimitiveColor("primary-40"), + "text-selected": getPrimitiveColor("primary-50"), + "text-disabled": getPrimitiveColor("neutral-50"), + "text-success": getPrimitiveColor("success-40"), + "text-inverse": getPrimitiveColor("white"), + "text-subtle": getPrimitiveColor("neutral-30"), + "text-subtler": getPrimitiveColor("neutral-50"), + "text-subtlest": getPrimitiveColor("neutral-60"), + "text-disabled-subtle": getPrimitiveColor("neutral-60"), + "text-disabled-subtlest": getPrimitiveColor("neutral-80"), + "text-selected-disabled": getPrimitiveColor("primary-60"), + "text-warning": getPrimitiveColor("warning-40"), + "text-error": getPrimitiveColor("error-40"), + "text-info": getPrimitiveColor("information-40"), + + icon: getPrimitiveColor("neutral-50"), + "icon-hover": getPrimitiveColor("primary-40"), + "icon-selected": getPrimitiveColor("primary-50"), + "icon-disabled": getPrimitiveColor("neutral-50"), + "icon-success": getPrimitiveColor("success-50"), + "icon-inverse": getPrimitiveColor("white"), + "icon-subtle": getPrimitiveColor("neutral-60"), + "icon-primary": getPrimitiveColor("primary-50"), + "icon-primary-subtle": getPrimitiveColor("primary-60"), + "icon-primary-subtlest": getPrimitiveColor("primary-70"), + "icon-disabled-subtle": getPrimitiveColor("neutral-60"), + "icon-selected-disabled": getPrimitiveColor("primary-60"), + "icon-warning": getPrimitiveColor("warning-60"), + "icon-error": getPrimitiveColor("error-50"), + "icon-info": getPrimitiveColor("information-50"), + + border: getPrimitiveColor("neutral-90"), + "border-hover": getPrimitiveColor("primary-90"), + "border-selected": getPrimitiveColor("primary-50"), + "border-disabled": getPrimitiveColor("neutral-90"), + "border-success": getPrimitiveColor("success-60"), + "border-inverse": getPrimitiveColor("neutral-90"), + "border-strong": getPrimitiveColor("neutral-70"), + "border-primary": getPrimitiveColor("primary-50"), + "border-primary-subtle": getPrimitiveColor("primary-60"), + "border-hover-strong": getPrimitiveColor("primary-60"), + "border-selected-subtle": getPrimitiveColor("primary-70"), + "border-selected-subtlest": getPrimitiveColor("primary-90"), + "border-focus": getPrimitiveColor("primary-60"), + "border-focus-strong": getPrimitiveColor("primary-50"), + "border-selected-disabled": getPrimitiveColor("neutral-70"), + "border-warning": getPrimitiveColor("warning-60"), + "border-error": getPrimitiveColor("error-60"), + "border-error-focus": getPrimitiveColor("error-60"), + "border-info": getPrimitiveColor("information-60"), + + background: getPrimitiveColor("white"), + "background-hover": getPrimitiveColor("primary-95"), + "background-selected": getPrimitiveColor("primary-95"), + "background-disabled": getPrimitiveColor("neutral-95"), + "background-success": getPrimitiveColor("success-100"), + "background-inverse": getPrimitiveColor("neutral-40"), + "background-subtle": getPrimitiveColor("neutral-100"), + "background-hover-strong": getPrimitiveColor("primary-90"), + "background-hover-subtle": getPrimitiveColor("primary-100"), + "background-hover-neutral": getPrimitiveColor("neutral-95"), + "background-primary": getPrimitiveColor("primary-50"), + "background-primary-hover": getPrimitiveColor("primary-40"), + "background-primary-subtle": getPrimitiveColor("primary-60"), + "background-primary-subtlest": getPrimitiveColor("primary-100"), + "background-primary-subtlest-hover": getPrimitiveColor("primary-90"), + "background-primary-subtlest-selected": getPrimitiveColor("primary-90"), + "background-selected-strong": getPrimitiveColor("primary-90"), + "background-selected-hover": getPrimitiveColor("primary-90"), + "background-selected-disabled": getPrimitiveColor("primary-90"), + "background-warning": getPrimitiveColor("warning-100"), + "background-error": getPrimitiveColor("error-100"), + "background-info": getPrimitiveColor("information-100"), + + "overlay-strong": "rgba(40, 40, 40, 0.95)", + "overlay-subtle": "rgba(40, 40, 40, 0.20)", + "overlay-inverse-gradient": "rgba(255, 255, 255, 1)", + + hyperlink: getPrimitiveColor("primary-50"), + "hyperlink-inverse": "#FFCB6A", + "focus-ring": getPrimitiveColor("black"), + "focus-ring-inverse": getPrimitiveColor("white"), +}; diff --git a/src/theme/color-semantic/theme-helper.ts b/src/theme/color-semantic/theme-helper.ts new file mode 100644 index 000000000..c1b6f1cc8 --- /dev/null +++ b/src/theme/color-semantic/theme-helper.ts @@ -0,0 +1,144 @@ +import { getPrimitiveColor } from "../color-primitive/theme-helper"; +import { getCollection, getValue } from "../helpers"; +import { Color } from "../index"; +import { + ColorScheme, + ColorSet, + SematicColorCollectionMap, + SematicColorSet, + ThemeCollectionSpec, + ThemeContextKeys, + ThemeSpec, +} from "../types"; +import { BookingSGColorSet } from "./specs/bookingsg-semantic-tokens"; +import { LifeSGColorSet } from "./specs/lifesg-semantic-tokens"; + +const ColorSpec: ThemeCollectionSpec = { + collections: { + lifesg: LifeSGColorSet, + bookingsg: LifeSGColorSet, + rbs: LifeSGColorSet, + mylegacy: LifeSGColorSet, + ccube: LifeSGColorSet, + }, + defaultValue: "lifesg", +}; + +export const getSemanticColor = (key: keyof SematicColorSet) => { + return (props: any): string => { + const theme = props.theme as ThemeSpec; + const colorSet: SematicColorSet = getCollection( + ColorSpec, + theme[ThemeContextKeys.colorScheme] + ); + + // check for an override + let colorValue = + theme.overrides && theme.overrides.color + ? getValue(colorSet, key, theme.overrides.color) + : colorSet[key]; + + // If function, resolve with props + if (typeof colorValue === "function") { + return (colorValue as (props: any) => string)(props); + } + + return colorValue as string; + }; +}; + +export const ColorSemantic = { + text: getSemanticColor("text"), + "text-hover": getSemanticColor("text-hover"), + "text-selected": getSemanticColor("text-selected"), + "text-disabled": getSemanticColor("text-disabled"), + "text-success": getSemanticColor("text-success"), + "text-inverse": getSemanticColor("text-inverse"), + "text-subtle": getSemanticColor("text-subtle"), + "text-subtler": getSemanticColor("text-subtler"), + "text-subtlest": getSemanticColor("text-subtlest"), + "text-disabled-subtle": getSemanticColor("text-disabled-subtle"), + "text-disabled-subtlest": getSemanticColor("text-disabled-subtlest"), + "text-selected-disabled": getSemanticColor("text-selected-disabled"), + "text-warning": getSemanticColor("text-warning"), + "text-error": getSemanticColor("text-error"), + "text-info": getSemanticColor("text-info"), + + icon: getSemanticColor("icon"), + "icon-hover": getSemanticColor("icon-hover"), + "icon-selected": getSemanticColor("icon-selected"), + "icon-disabled": getSemanticColor("icon-disabled"), + "icon-success": getSemanticColor("icon-success"), + "icon-inverse": getSemanticColor("icon-inverse"), + "icon-subtle": getSemanticColor("icon-subtle"), + "icon-primary": getSemanticColor("icon-primary"), + "icon-primary-subtle": getSemanticColor("icon-primary-subtle"), + "icon-primary-subtlest": getSemanticColor("icon-primary-subtlest"), + "icon-disabled-subtle": getSemanticColor("icon-disabled-subtle"), + "icon-selected-disabled": getSemanticColor("icon-selected-disabled"), + "icon-warning": getSemanticColor("icon-warning"), + "icon-error": getSemanticColor("icon-error"), + "icon-info": getSemanticColor("icon-info"), + + border: getSemanticColor("border"), + "border-hover": getSemanticColor("border-hover"), + "border-selected": getSemanticColor("border-selected"), + "border-disabled": getSemanticColor("border-disabled"), + "border-success": getSemanticColor("border-success"), + "border-inverse": getSemanticColor("border-inverse"), + "border-strong": getSemanticColor("border-strong"), + "border-primary": getSemanticColor("border-primary"), + "border-primary-subtle": getSemanticColor("border-primary-subtle"), + "border-hover-strong": getSemanticColor("border-hover-strong"), + "border-selected-subtle": getSemanticColor("border-selected-subtle"), + "border-selected-subtlest": getSemanticColor("border-selected-subtlest"), + "border-focus": getSemanticColor("border-focus"), + "border-focus-strong": getSemanticColor("border-focus-strong"), + "border-selected-disabled": getSemanticColor("border-selected-disabled"), + "border-warning": getSemanticColor("border-warning"), + "border-error": getSemanticColor("border-error"), + "border-error-focus": getSemanticColor("border-error-focus"), + "border-info": getSemanticColor("border-info"), + + background: getSemanticColor("background"), + "background-hover": getSemanticColor("background-hover"), + "background-selected": getSemanticColor("background-selected"), + "background-disabled": getSemanticColor("background-disabled"), + "background-success": getSemanticColor("background-success"), + "background-inverse": getSemanticColor("background-inverse"), + "background-subtle": getSemanticColor("background-subtle"), + "background-hover-strong": getSemanticColor("background-hover-strong"), + "background-hover-subtle": getSemanticColor("background-hover-subtle"), + "background-hover-neutral": getSemanticColor("background-hover-neutral"), + "background-primary": getSemanticColor("background-primary"), + "background-primary-hover": getSemanticColor("background-primary-hover"), + "background-primary-subtle": getSemanticColor("background-primary-subtle"), + "background-primary-subtlest": getSemanticColor( + "background-primary-subtlest" + ), + "background-primary-subtlest-hover": getSemanticColor( + "background-primary-subtlest-hover" + ), + "background-primary-subtlest-selected": getSemanticColor( + "background-primary-subtlest-selected" + ), + "background-selected-strong": getSemanticColor( + "background-selected-strong" + ), + "background-selected-hover": getSemanticColor("background-selected-hover"), + "background-selected-disabled": getSemanticColor( + "background-selected-disabled" + ), + "background-warning": getSemanticColor("background-warning"), + "background-error": getSemanticColor("background-error"), + "background-info": getSemanticColor("background-info"), + + "overlay-strong": getSemanticColor("overlay-strong"), + "overlay-subtle": getSemanticColor("overlay-subtle"), + "overlay-inverse-gradient": getSemanticColor("overlay-inverse-gradient"), + + hyperlink: getSemanticColor("hyperlink"), + "hyperlink-inverse": getSemanticColor("hyperlink-inverse"), + "focus-ring": getSemanticColor("focus-ring"), + "focus-ring-inverse": getSemanticColor("focus-ring-inverse"), +}; diff --git a/src/theme/helpers.ts b/src/theme/helpers.ts new file mode 100644 index 000000000..d5513ad6b --- /dev/null +++ b/src/theme/helpers.ts @@ -0,0 +1,18 @@ +import { get } from "lodash"; +import { ThemeCollectionSpec } from "./types"; + +export const getValue = ( + collection: C, + key: K, + customCollection?: T +): T[K & keyof T] | C[K & keyof C] | undefined => { + return get(customCollection, key) || get(collection, key); +}; + +export const getCollection = ( + collectionSpec: ThemeCollectionSpec, + contextValue?: string +): C => { + const themeContextValue = contextValue || collectionSpec.defaultValue; + return get(collectionSpec.collections, themeContextValue as string); +}; diff --git a/src/theme/index.ts b/src/theme/index.ts new file mode 100644 index 000000000..a859424ed --- /dev/null +++ b/src/theme/index.ts @@ -0,0 +1,7 @@ +import { PrimitiveColor } from "./color-primitive/theme-helper"; +import { ColorSemantic } from "./color-semantic/theme-helper"; + +export const Color = { + ...ColorSemantic, + Primitive: PrimitiveColor, +}; diff --git a/src/theme/types.ts b/src/theme/types.ts new file mode 100644 index 000000000..be1015844 --- /dev/null +++ b/src/theme/types.ts @@ -0,0 +1,212 @@ +import get from "lodash/get"; + +// For ColorSet: +export type ColorSet = { + "brand-10": string; + "brand-20": string; + "brand-30": string; + "brand-40": string; + "brand-50": string; + "brand-60": string; + "brand-70": string; + "brand-80": string; + "brand-90": string; + "brand-95": string; + "brand-100": string; + "primary-10": string; + "primary-20": string; + "primary-30": string; + "primary-40": string; + "primary-50": string; + "primary-60": string; + "primary-70": string; + "primary-80": string; + "primary-90": string; + "primary-95": string; + "primary-100": string; + "secondary-10": string; + "secondary-20": string; + "secondary-30": string; + "secondary-40": string; + "secondary-50": string; + "secondary-60": string; + "secondary-70": string; + "secondary-80": string; + "secondary-90": string; + "secondary-95": string; + "secondary-100": string; + "neutral-10": string; + "neutral-20": string; + "neutral-30": string; + "neutral-40": string; + "neutral-50": string; + "neutral-60": string; + "neutral-70": string; + "neutral-80": string; + "neutral-90": string; + "neutral-95": string; + "neutral-100": string; + "success-10": string; + "success-20": string; + "success-30": string; + "success-40": string; + "success-50": string; + "success-60": string; + "success-70": string; + "success-80": string; + "success-90": string; + "success-95": string; + "success-100": string; + "warning-10": string; + "warning-20": string; + "warning-30": string; + "warning-40": string; + "warning-50": string; + "warning-60": string; + "warning-70": string; + "warning-80": string; + "warning-90": string; + "warning-95": string; + "warning-100": string; + "error-10": string; + "error-20": string; + "error-30": string; + "error-40": string; + "error-50": string; + "error-60": string; + "error-70": string; + "error-80": string; + "error-90": string; + "error-95": string; + "error-100": string; + "information-10": string; + "information-20": string; + "information-30": string; + "information-40": string; + "information-50": string; + "information-60": string; + "information-70": string; + "information-80": string; + "information-90": string; + "information-95": string; + "information-100": string; + white?: string | undefined; + black?: string | undefined; +}; + +// For SematicColorSet: +export type SematicColorSet = { + text: string | ((props: any) => string); + "text-hover": string | ((props: any) => string); + "text-selected": string | ((props: any) => string); + "text-disabled": string | ((props: any) => string); + "text-success": string | ((props: any) => string); + "text-inverse": string | ((props: any) => string); + "text-subtle": string | ((props: any) => string); + "text-subtler": string | ((props: any) => string); + "text-subtlest": string | ((props: any) => string); + "text-disabled-subtle": string | ((props: any) => string); + "text-disabled-subtlest": string | ((props: any) => string); + "text-selected-disabled": string | ((props: any) => string); + "text-warning": string | ((props: any) => string); + "text-error": string | ((props: any) => string); + "text-info": string | ((props: any) => string); + + icon: string | ((props: any) => string); + "icon-hover": string | ((props: any) => string); + "icon-selected": string | ((props: any) => string); + "icon-disabled": string | ((props: any) => string); + "icon-success": string | ((props: any) => string); + "icon-inverse": string | ((props: any) => string); + "icon-subtle": string | ((props: any) => string); + "icon-primary": string | ((props: any) => string); + "icon-primary-subtle": string | ((props: any) => string); + "icon-primary-subtlest": string | ((props: any) => string); + "icon-disabled-subtle": string | ((props: any) => string); + "icon-selected-disabled": string | ((props: any) => string); + "icon-warning": string | ((props: any) => string); + "icon-error": string | ((props: any) => string); + "icon-info": string | ((props: any) => string); + + border: string | ((props: any) => string); + "border-hover": string | ((props: any) => string); + "border-selected": string | ((props: any) => string); + "border-disabled": string | ((props: any) => string); + "border-success": string | ((props: any) => string); + "border-inverse": string | ((props: any) => string); + "border-strong": string | ((props: any) => string); + "border-primary": string | ((props: any) => string); + "border-primary-subtle": string | ((props: any) => string); + "border-hover-strong": string | ((props: any) => string); + "border-selected-subtle": string | ((props: any) => string); + "border-selected-subtlest": string | ((props: any) => string); + "border-focus": string | ((props: any) => string); + "border-focus-strong": string | ((props: any) => string); + "border-selected-disabled": string | ((props: any) => string); + "border-warning": string | ((props: any) => string); + "border-error": string | ((props: any) => string); + "border-error-focus": string | ((props: any) => string); + "border-info": string | ((props: any) => string); + + background: string | ((props: any) => string); + "background-hover": string | ((props: any) => string); + "background-selected": string | ((props: any) => string); + "background-disabled": string | ((props: any) => string); + "background-success": string | ((props: any) => string); + "background-inverse": string | ((props: any) => string); + "background-subtle": string | ((props: any) => string); + "background-hover-strong": string | ((props: any) => string); + "background-hover-subtle": string | ((props: any) => string); + "background-hover-neutral": string | ((props: any) => string); + "background-primary": string | ((props: any) => string); + "background-primary-hover": string | ((props: any) => string); + "background-primary-subtle": string | ((props: any) => string); + "background-primary-subtlest": string | ((props: any) => string); + "background-primary-subtlest-hover": string | ((props: any) => string); + "background-primary-subtlest-selected": string | ((props: any) => string); + "background-selected-strong": string | ((props: any) => string); + "background-selected-hover": string | ((props: any) => string); + "background-selected-disabled": string | ((props: any) => string); + "background-warning": string | ((props: any) => string); + "background-error": string | ((props: any) => string); + "background-info": string | ((props: any) => string); + + "overlay-strong": string | ((props: any) => string); + "overlay-subtle": string | ((props: any) => string); + "overlay-inverse-gradient": string | ((props: any) => string); + + hyperlink: string | ((props: any) => string); + "hyperlink-inverse": string | ((props: any) => string); + "focus-ring": string | ((props: any) => string); + "focus-ring-inverse": string | ((props: any) => string); +}; + +export type ColorScheme = "lifesg" | "bookingsg" | "rbs" | "mylegacy" | "ccube"; + +export type ColorCollectionsMap = { + [key in ColorScheme]: ColorSet; +}; + +export type SematicColorCollectionMap = { + [key in ColorScheme]: SematicColorSet; +}; + +export enum ThemeContextKeys { + colorScheme = "colorScheme", +} + +export type ColorSetOptions = Partial | Partial; + +export interface ThemeSpecOptions { + color?: ColorSetOptions | undefined; +} + +export interface ThemeSpec { + [ThemeContextKeys.colorScheme]: ColorScheme; + overrides?: ThemeSpecOptions | undefined; +} + +export interface ThemeCollectionSpec { + collections: T; + defaultValue: V; +} diff --git a/tests/theme/test-script.spec.tsx b/tests/theme/test-script.spec.tsx new file mode 100644 index 000000000..c4555d31d --- /dev/null +++ b/tests/theme/test-script.spec.tsx @@ -0,0 +1,57 @@ +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import styled, { ThemeProvider } from "styled-components"; +import { Color } from "../../src/theme"; +import { ThemeSpec } from "../../src/theme/types"; + +const StyledComponentTest = styled.div` + background-color: ${Color.Primitive["primary-10"]}; + color: ${Color["border-primary"]}; +`; + +describe("StyledComponent", () => { + it("should apply correct styles based on the theme", () => { + const mockTheme: ThemeSpec = { + colorScheme: "lifesg", + }; + + const bgColor = "#001731"; + const textColor = "#1768BE"; + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule( + "background-color", + bgColor + ); + expect(container.firstChild).toHaveStyleRule("color", textColor); + }); + + it("should apply correct styles based on the theme", () => { + const overrideTheme: ThemeSpec = { + colorScheme: "lifesg", + overrides: { + color: { + "primary-10": "#fefefe", + }, + }, + }; + + const bgColor = "#fefefe"; + const textColor = "#1768BE"; + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule( + "background-color", + bgColor + ); + expect(container.firstChild).toHaveStyleRule("color", textColor); + }); +}); From fab3d7edba7c962d3cf4f73672d5844a88073280 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Fri, 16 Aug 2024 01:49:14 +0800 Subject: [PATCH 0351/1949] [CCUBE-1524][MAHI]Changed to naming convention Colour --- .../specs/bookingsg-colour-set.ts | 93 +++++++++++ .../specs/ccube-colour-set.ts | 94 +++++++++++ .../specs/lifesg-colour-set.ts | 94 +++++++++++ .../specs/mylegacy-colour-set.ts | 93 +++++++++++ .../colour-primitive/specs/rbs-colour-set.ts | 94 +++++++++++ src/theme/colour-primitive/theme-helper.ts | 125 +++++++++++++++ .../specs/bookingsg-semantic-tokens.ts | 90 +++++++++++ .../specs/lifesg-semantic-tokens.ts | 88 +++++++++++ src/theme/colour-semantic/theme-helper.ts | 147 ++++++++++++++++++ 9 files changed, 918 insertions(+) create mode 100644 src/theme/colour-primitive/specs/bookingsg-colour-set.ts create mode 100644 src/theme/colour-primitive/specs/ccube-colour-set.ts create mode 100644 src/theme/colour-primitive/specs/lifesg-colour-set.ts create mode 100644 src/theme/colour-primitive/specs/mylegacy-colour-set.ts create mode 100644 src/theme/colour-primitive/specs/rbs-colour-set.ts create mode 100644 src/theme/colour-primitive/theme-helper.ts create mode 100644 src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts create mode 100644 src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts create mode 100644 src/theme/colour-semantic/theme-helper.ts diff --git a/src/theme/colour-primitive/specs/bookingsg-colour-set.ts b/src/theme/colour-primitive/specs/bookingsg-colour-set.ts new file mode 100644 index 000000000..3e61bb84e --- /dev/null +++ b/src/theme/colour-primitive/specs/bookingsg-colour-set.ts @@ -0,0 +1,93 @@ +import { ColourSet } from "../../types"; +import { getPrimitiveColour } from "../theme-helper"; + +export const BookingSgColourSet: ColourSet = { + "brand-10": "#2C0C0B", + "brand-20": "#4C1513", + "brand-30": "#6C1D1B", + "brand-40": "#922825", + "brand-50": "#BF3431", + "brand-60": "#F15D5A", + "brand-70": "#F69491", + "brand-80": "#FABAB7", + "brand-90": "#FCD7D2", + "brand-95": "#FFEBE7", + "brand-100": "#FFF6F4", + "primary-10": "#1A122C", + "primary-20": "#2F1F4D", + "primary-30": "#422D6E", + "primary-40": "#5B3D97", + "primary-50": "#7654BC", + "primary-60": "#9A82CD", + "primary-70": "#B7A7D8", + "primary-80": "#CFC5E5", + "primary-90": "#E3DDF0", + "primary-95": "#F0EDF7", + "primary-100": "#F9F8FC", + "secondary-10": "#0E1723", + "secondary-20": "#18293D", + "secondary-30": "#233A57", + "secondary-40": "#305078", + "secondary-50": "#4B6A8F", + "secondary-60": "#7B91A9", + "secondary-70": "#A1B1C3", + "secondary-80": "#C1CBD7", + "secondary-90": "#DBE1E8", + "secondary-95": "#EBEFF2", + "secondary-100": "#F7F8FA", + "neutral-10": "#161616", + "neutral-20": "#282828", + "neutral-30": "#393939", + "neutral-40": "#4E4E4E", + "neutral-50": "#686868", + "neutral-60": "#8E8E8E", + "neutral-70": "#AFAFB0", + "neutral-80": "#C7CACA", + "neutral-90": "#DDE1E2", + "neutral-95": "#EDEFEF", + "neutral-100": "#F9F9F9", + "success-10": "#081A0F", + "success-20": "#0E2D1B", + "success-30": "#154126", + "success-40": "#1C5A34", + "success-50": "#257645", + "success-60": "#44A068", + "success-70": "#64C189", + "success-80": "#80DCA5", + "success-90": "#B4ECCB", + "success-95": "#D5F6E2", + "success-100": "#EFFCF4", + "warning-10": "#221302", + "warning-20": "#3B2204", + "warning-30": "#543106", + "warning-40": "#744408", + "warning-50": "#98590C", + "warning-60": "#D07A13", + "warning-70": "#E4A244", + "warning-80": "#F5C26C", + "warning-90": "#FADBA6", + "warning-95": "#FCECD4", + "warning-100": "#FDF7F0", + "error-10": "#330505", + "error-20": "#550808", + "error-30": "#750C0C", + "error-40": "#9E130F", + "error-50": "#CB2213", + "error-60": "#DE6C6C", + "error-70": "#E89B9B", + "error-80": "#EFBEBE", + "error-90": "#F5D9D9", + "error-95": "#F9ECEC", + "error-100": "#FCF7F7", + "information-10": "#021824", + "information-20": "#032B3F", + "information-30": "#053D59", + "information-40": "#065478", + "information-50": "#176E9B", + "information-60": "#5296BE", + "information-70": "#82B5DA", + "information-80": "#ACCFE7", + "information-90": "#CCE3F1", + "information-95": "#E3F1F8", + "information-100": "#F4FAFD", +}; diff --git a/src/theme/colour-primitive/specs/ccube-colour-set.ts b/src/theme/colour-primitive/specs/ccube-colour-set.ts new file mode 100644 index 000000000..0f78189b7 --- /dev/null +++ b/src/theme/colour-primitive/specs/ccube-colour-set.ts @@ -0,0 +1,94 @@ +import { ColourSet } from "../../types"; + +export const CCubeColourSet: ColourSet = { + "brand-10": "#1F1221", + "brand-20": "#371F3B", + "brand-30": "#4E2C53", + "brand-40": "#6B3E73", + "brand-50": "#8D5197", + "brand-60": "#FF3399", + "brand-70": "#FF88C4", + "brand-80": "#FFB3D9", + "brand-90": "#FFD4E9", + "brand-95": "#FFE8F3", + "brand-100": "#FFD6EB", + "primary-10": "#1F1221", + "primary-20": "#371F3B", + "primary-30": "#4E2C53", + "primary-40": "#6B3E73", + "primary-50": "#8D5197", + "primary-60": "#B07DB7", + "primary-70": "#C7A3CC", + "primary-80": "#D9C2DD", + "primary-90": "#E9DBEB", + "primary-95": "#F3ECF4", + "primary-100": "#FAF7FA", + "secondary-10": "#2D091B", + "secondary-20": "#4D0F2E", + "secondary-30": "#6B1540", + "secondary-40": "#931D58", + "secondary-50": "#C02673", + "secondary-60": "#FF409F", + "secondary-70": "#FF88C4", + "secondary-80": "#FFB3D9", + "secondary-90": "#FFD4E9", + "secondary-95": "#FFE8F3", + "secondary-100": "#FFF8FC", + "neutral-10": "#161616", + "neutral-20": "#282828", + "neutral-30": "#393939", + "neutral-40": "#4E4E4E", + "neutral-50": "#686868", + "neutral-60": "#8E8E8E", + "neutral-70": "#AFAFBO", + "neutral-80": "#C7CACA", + "neutral-90": "#DDE1E2", + "neutral-95": "#EDEFEF", + "neutral-100": "#F9F9F9", + "success-10": "#081A0F", + "success-20": "#0E2D1B", + "success-30": "#154126", + "success-40": "#1C5A34", + "success-50": "#257645", + "success-60": "#44A068", + "success-70": "#64C189", + "success-80": "#80DCA5", + "success-90": "#B4ECCB", + "success-95": "#D5F6E2", + "success-100": "#EFFCF4", + "warning-10": "#221302", + "warning-20": "#3B2204", + "warning-30": "#543106", + "warning-40": "#744408", + "warning-50": "#98590C", + "warning-60": "#D07A13", + "warning-70": "#E4A244", + "warning-80": "#F5C26C", + "warning-90": "#FADBA6", + "warning-95": "#FCECD4", + "warning-100": "#FDF7F0", + "error-10": "#330505", + "error-20": "#550808", + "error-30": "#750C0C", + "error-40": "#9E130F", + "error-50": "#CB2213", + "error-60": "#DE6C6C", + "error-70": "#E89B9B", + "error-80": "#EFBEBE", + "error-90": "#F5D9D9", + "error-95": "#F9ECEC", + "error-100": "#FCF7F7", + "information-10": "#021824", + "information-20": "#032B3F", + "information-30": "#053D59", + "information-40": "#065478", + "information-50": "#176E9B", + "information-60": "#5296BE", + "information-70": "#82B5DA", + "information-80": "#ACCFE7", + "information-90": "#CCE3F1", + "information-95": "#E3F1F8", + "information-100": "#F4FAFD", + white: "#FFFFFF", + black: "#000000", +}; diff --git a/src/theme/colour-primitive/specs/lifesg-colour-set.ts b/src/theme/colour-primitive/specs/lifesg-colour-set.ts new file mode 100644 index 000000000..fc2c40a0f --- /dev/null +++ b/src/theme/colour-primitive/specs/lifesg-colour-set.ts @@ -0,0 +1,94 @@ +import { ColourSet } from "../../types"; + +export const LifeSgColourSet: ColourSet = { + "brand-10": "#2C0C0B", + "brand-20": "#4C1513", + "brand-30": "#6C1D1B", + "brand-40": "#922825", + "brand-50": "#BF3431", + "brand-60": "#F15D5A", + "brand-70": "#F69491", + "brand-80": "#FABAB7", + "brand-90": "#FCD7D2", + "brand-95": "#FFEBE7", + "brand-100": "#FFF6F4", + "primary-10": "#001731", + "primary-20": "#002752", + "primary-30": "#003874", + "primary-40": "#004D9F", + "primary-50": "#1768BE", + "primary-60": "#3C91EC", + "primary-70": "#6CB4FF", + "primary-80": "#A5CDFF", + "primary-90": "#CFE1FE", + "primary-95": "#E8F0FE", + "primary-100": "#F7F9FF", + "secondary-10": "#131529", + "secondary-20": "#222547", + "secondary-30": "#2F3565", + "secondary-40": "#42498B", + "secondary-50": "#5B62A7", + "secondary-60": "#858CBD", + "secondary-70": "#A8ADCF", + "secondary-80": "#C6C9E0", + "secondary-90": "#DDDFEC", + "secondary-95": "#EDEEF5", + "secondary-100": "#F8F8FB", + "neutral-10": "#161616", + "neutral-20": "#282828", + "neutral-30": "#393939", + "neutral-40": "#4E4E4E", + "neutral-50": "#686868", + "neutral-60": "#8E8E8E", + "neutral-70": "#AFAFBO", + "neutral-80": "#C7CACA", + "neutral-90": "#DDE1E2", + "neutral-95": "#EDEFEF", + "neutral-100": "#F9F9F9", + "success-10": "#081A0F", + "success-20": "#0E2D1B", + "success-30": "#154126", + "success-40": "#1C5A34", + "success-50": "#257645", + "success-60": "#44A068", + "success-70": "#64C189", + "success-80": "#80DCA5", + "success-90": "#B4ECCB", + "success-95": "#D5F6E2", + "success-100": "#EFFCF4", + "warning-10": "#221302", + "warning-20": "#3B2204", + "warning-30": "#543106", + "warning-40": "#744408", + "warning-50": "#98590C", + "warning-60": "#D07A13", + "warning-70": "#E4A244", + "warning-80": "#F5C26C", + "warning-90": "#FADBA6", + "warning-95": "#FCECD4", + "warning-100": "#FDF7F0", + "error-10": "#330505", + "error-20": "#550808", + "error-30": "#750C0C", + "error-40": "#9E130F", + "error-50": "#CB2213", + "error-60": "#DE6C6C", + "error-70": "#E89B9B", + "error-80": "#EFBEBE", + "error-90": "#F5D9D9", + "error-95": "#F9ECEC", + "error-100": "#FCF7F7", + "information-10": "#021824", + "information-20": "#032B3F", + "information-30": "#053D59", + "information-40": "#065478", + "information-50": "#176E9B", + "information-60": "#5296BE", + "information-70": "#82B5DA", + "information-80": "#ACCFE7", + "information-90": "#CCE3F1", + "information-95": "#E3F1F8", + "information-100": "#F4FAFD", +}; + +export type ColorSetOptions = Partial; diff --git a/src/theme/colour-primitive/specs/mylegacy-colour-set.ts b/src/theme/colour-primitive/specs/mylegacy-colour-set.ts new file mode 100644 index 000000000..113c29afa --- /dev/null +++ b/src/theme/colour-primitive/specs/mylegacy-colour-set.ts @@ -0,0 +1,93 @@ +import { ColourSet } from "../../types"; + +export const MyLegacyColourSet: ColourSet = { + // brand,secondary from lifesg + "brand-10": "#2C0C0B", + "brand-20": "#4C1513", + "brand-30": "#6C1D1B", + "brand-40": "#922825", + "brand-50": "#BF3431", + "brand-60": "#F15D5A", + "brand-70": "#F69491", + "brand-80": "#FABAB7", + "brand-90": "#FCD7D2", + "brand-95": "#FFEBE7", + "brand-100": "#FFF6F4", + "primary-10": "#0011924", + "primary-20": "#032B40", + "primary-30": "#043D5A", + "primary-40": "#05547B", + "primary-50": "#096EA1", + "primary-60": "#2098D3", + "primary-70": "#5CB9E8", + "primary-80": "#8BD3F6", + "primary-90": "#BEE6FA", + "primary-95": "#E2F2FA", + "primary-100": "#F4FAFC", + "secondary-10": "#131529", + "secondary-20": "#222547", + "secondary-30": "#2F3565", + "secondary-40": "#42498B", + "secondary-50": "#5B62A7", + "secondary-60": "#858CBD", + "secondary-70": "#A8ADCF", + "secondary-80": "#C6C9E0", + "secondary-90": "#DDDFEC", + "secondary-95": "#EDEEF5", + "secondary-100": "#F8F8FB", + "neutral-10": "#161616", + "neutral-20": "#282828", + "neutral-30": "#393939", + "neutral-40": "#4E4E4E", + "neutral-50": "#686868", + "neutral-60": "#8E8E8E", + "neutral-70": "#AFAFBO", + "neutral-80": "#C7CACA", + "neutral-90": "#DDE1E2", + "neutral-95": "#EDEFEF", + "neutral-100": "#F9F9F9", + "success-10": "#081A0F", + "success-20": "#0E2D1B", + "success-30": "#154126", + "success-40": "#1C5A34", + "success-50": "#257645", + "success-60": "#44A068", + "success-70": "#64C189", + "success-80": "#80DCA5", + "success-90": "#B4ECCB", + "success-95": "#D5F6E2", + "success-100": "#EFFCF4", + "warning-10": "#221302", + "warning-20": "#3B2204", + "warning-30": "#543106", + "warning-40": "#744408", + "warning-50": "#98590C", + "warning-60": "#D07A13", + "warning-70": "#E4A244", + "warning-80": "#F5C26C", + "warning-90": "#FADBA6", + "warning-95": "#FCECD4", + "warning-100": "#FDF7F0", + "error-10": "#330505", + "error-20": "#550808", + "error-30": "#750C0C", + "error-40": "#9E130F", + "error-50": "#CB2213", + "error-60": "#DE6C6C", + "error-70": "#E89B9B", + "error-80": "#EFBEBE", + "error-90": "#F5D9D9", + "error-95": "#F9ECEC", + "error-100": "#FCF7F7", + "information-10": "#021824", + "information-20": "#032B3F", + "information-30": "#053D59", + "information-40": "#065478", + "information-50": "#176E9B", + "information-60": "#5296BE", + "information-70": "#82B5DA", + "information-80": "#ACCFE7", + "information-90": "#CCE3F1", + "information-95": "#E3F1F8", + "information-100": "#F4FAFD", +}; diff --git a/src/theme/colour-primitive/specs/rbs-colour-set.ts b/src/theme/colour-primitive/specs/rbs-colour-set.ts new file mode 100644 index 000000000..c0641da63 --- /dev/null +++ b/src/theme/colour-primitive/specs/rbs-colour-set.ts @@ -0,0 +1,94 @@ +import { ColourSet } from "../../types"; + +export const RBSColourSet: ColourSet = { + "brand-10": "#0E123A", + "brand-20": "#191E65", + "brand-30": "#232B90", + "brand-40": "#303BC5", + "brand-50": "#494CFF", + "brand-60": "#AD6EFF", + "brand-70": "#AEA4FF", + "brand-80": "#C5C4FF", + "brand-90": "#DDDCFF", + "brand-95": "#EDECFF", + "brand-100": "#F8F8FF", + "primary-10": "#10152B", + "primary-20": "#1C254B", + "primary-30": "#28356C", + "primary-40": "#38489A", + "primary-50": "#4D5AD7", + "primary-60": "#7487F2", + "primary-70": "#9AAAFC", + "primary-80": "#BDC7FD", + "primary-90": "#DADFFB", + "primary-95": "#ECEEFE", + "primary-100": "#F7F8FF", + "secondary-10": "#19151D", + "secondary-20": "#2B2533", + "secondary-30": "#3E3649", + "secondary-40": "#564A64", + "secondary-50": "#6F637D", + "secondary-60": "#948B9F", + "secondary-70": "#B3ACBB", + "secondary-80": "#CCC8D2", + "secondary-90": "#E1DEE4", + "secondary-95": "#EFEEF1", + "secondary-100": "#F9F8F9", + "neutral-10": "#161616", + "neutral-20": "#282828", + "neutral-30": "#393939", + "neutral-40": "#4E4E4E", + "neutral-50": "#686868", + "neutral-60": "#8E8E8E", + "neutral-70": "#AFAFBO", + "neutral-80": "#C7CACA", + "neutral-90": "#DDE1E2", + "neutral-95": "#EDEFEF", + "neutral-100": "#F9F9F9", + "success-10": "#081A0F", + "success-20": "#0E2D1B", + "success-30": "#154126", + "success-40": "#1C5A34", + "success-50": "#257645", + "success-60": "#44A068", + "success-70": "#64C189", + "success-80": "#80DCA5", + "success-90": "#B4ECCB", + "success-95": "#D5F6E2", + "success-100": "#EFFCF4", + "warning-10": "#221302", + "warning-20": "#3B2204", + "warning-30": "#543106", + "warning-40": "#744408", + "warning-50": "#98590C", + "warning-60": "#D07A13", + "warning-70": "#E4A244", + "warning-80": "#F5C26C", + "warning-90": "#FADBA6", + "warning-95": "#FCECD4", + "warning-100": "#FDF7F0", + "error-10": "#330505", + "error-20": "#550808", + "error-30": "#750C0C", + "error-40": "#9E130F", + "error-50": "#CB2213", + "error-60": "#DE6C6C", + "error-70": "#E89B9B", + "error-80": "#EFBEBE", + "error-90": "#F5D9D9", + "error-95": "#F9ECEC", + "error-100": "#FCF7F7", + "information-10": "#021824", + "information-20": "#032B3F", + "information-30": "#053D59", + "information-40": "#065478", + "information-50": "#176E9B", + "information-60": "#5296BE", + "information-70": "#82B5DA", + "information-80": "#ACCFE7", + "information-90": "#CCE3F1", + "information-95": "#E3F1F8", + "information-100": "#F4FAFD", + white: "#FFFFFF", + black: "#000000", +}; diff --git a/src/theme/colour-primitive/theme-helper.ts b/src/theme/colour-primitive/theme-helper.ts new file mode 100644 index 000000000..693c62ee8 --- /dev/null +++ b/src/theme/colour-primitive/theme-helper.ts @@ -0,0 +1,125 @@ +import { get } from "lodash"; +import { + ColourCollectionsMap, + ColourScheme, + ColourSet, + ThemeCollectionSpec, + ThemeContextKeys, + ThemeSpec, +} from "../types"; +import { BookingSgColourSet } from "./specs/bookingsg-color-set"; +import { CCubeColourSet } from "./specs/ccube-color-set"; +import { LifeSgColourSet } from "./specs/lifesg-color-set"; +import { MyLegacyColourSet } from "./specs/mylegacy-color-set"; +import { RBSColourSet } from "./specs/rbs-color-set"; +import { getCollection, getValue } from "../helpers"; + +const ColourSpec: ThemeCollectionSpec = { + collections: { + lifesg: LifeSgColourSet, + bookingsg: BookingSgColourSet, + rbs: RBSColourSet, + mylegacy: MyLegacyColourSet, + ccube: CCubeColourSet, + }, + defaultValue: "lifesg", +}; + +export const getPrimitiveColour = (key: keyof ColourSet) => { + return (props: any): string => { + const theme = props.theme as ThemeSpec; + const colorSet: ColourSet = getCollection( + ColourSpec, + theme[ThemeContextKeys.colourScheme] + ); + + if (theme.overrides && theme.overrides.color) { + const a = getValue(colorSet, key, theme.overrides.color); + return a; + } else { + return colorSet[key]; + } + }; +}; + +export const PrimitiveColour = { + "primary-10": getPrimitiveColour("primary-10"), + "primary-20": getPrimitiveColour("primary-20"), + "primary-30": getPrimitiveColour("primary-30"), + "primary-40": getPrimitiveColour("primary-40"), + "primary-50": getPrimitiveColour("primary-50"), + "primary-60": getPrimitiveColour("primary-60"), + "primary-70": getPrimitiveColour("primary-70"), + "primary-80": getPrimitiveColour("primary-80"), + "primary-90": getPrimitiveColour("primary-90"), + "primary-95": getPrimitiveColour("primary-95"), + "primary-100": getPrimitiveColour("primary-100"), + "secondary-10": getPrimitiveColour("secondary-10"), + "secondary-20": getPrimitiveColour("secondary-20"), + "secondary-30": getPrimitiveColour("secondary-30"), + "secondary-40": getPrimitiveColour("secondary-40"), + "secondary-50": getPrimitiveColour("secondary-50"), + "secondary-60": getPrimitiveColour("secondary-60"), + "secondary-70": getPrimitiveColour("secondary-70"), + "secondary-80": getPrimitiveColour("secondary-80"), + "secondary-90": getPrimitiveColour("secondary-90"), + "secondary-95": getPrimitiveColour("secondary-95"), + "secondary-100": getPrimitiveColour("secondary-100"), + "neutral-10": getPrimitiveColour("neutral-10"), + "neutral-20": getPrimitiveColour("neutral-20"), + "neutral-30": getPrimitiveColour("neutral-30"), + "neutral-40": getPrimitiveColour("neutral-40"), + "neutral-50": getPrimitiveColour("neutral-50"), + "neutral-60": getPrimitiveColour("neutral-60"), + "neutral-70": getPrimitiveColour("neutral-70"), + "neutral-80": getPrimitiveColour("neutral-80"), + "neutral-90": getPrimitiveColour("neutral-90"), + "neutral-95": getPrimitiveColour("neutral-95"), + "neutral-100": getPrimitiveColour("neutral-100"), + "success-10": getPrimitiveColour("success-10"), + "success-20": getPrimitiveColour("success-20"), + "success-30": getPrimitiveColour("success-30"), + "success-40": getPrimitiveColour("success-40"), + "success-50": getPrimitiveColour("success-50"), + "success-60": getPrimitiveColour("success-60"), + "success-70": getPrimitiveColour("success-70"), + "success-80": getPrimitiveColour("success-80"), + "success-90": getPrimitiveColour("success-90"), + "success-95": getPrimitiveColour("success-95"), + "success-100": getPrimitiveColour("success-100"), + "warning-10": getPrimitiveColour("warning-10"), + "warning-20": getPrimitiveColour("warning-20"), + "warning-30": getPrimitiveColour("warning-30"), + "warning-40": getPrimitiveColour("warning-40"), + "warning-50": getPrimitiveColour("warning-50"), + "warning-60": getPrimitiveColour("warning-60"), + "warning-70": getPrimitiveColour("warning-70"), + "warning-80": getPrimitiveColour("warning-80"), + "warning-90": getPrimitiveColour("warning-90"), + "warning-95": getPrimitiveColour("warning-95"), + "warning-100": getPrimitiveColour("warning-100"), + "error-10": getPrimitiveColour("error-10"), + "error-20": getPrimitiveColour("error-20"), + "error-30": getPrimitiveColour("error-30"), + "error-40": getPrimitiveColour("error-40"), + "error-50": getPrimitiveColour("error-50"), + "error-60": getPrimitiveColour("error-60"), + "error-70": getPrimitiveColour("error-70"), + "error-80": getPrimitiveColour("error-80"), + "error-90": getPrimitiveColour("error-90"), + "error-95": getPrimitiveColour("error-95"), + "error-100": getPrimitiveColour("error-100"), + "information-10": getPrimitiveColour("information-10"), + "information-20": getPrimitiveColour("information-20"), + "information-30": getPrimitiveColour("information-30"), + "information-40": getPrimitiveColour("information-40"), + "information-50": getPrimitiveColour("information-50"), + "information-60": getPrimitiveColour("information-60"), + "information-70": getPrimitiveColour("information-70"), + "information-80": getPrimitiveColour("information-80"), + "information-90": getPrimitiveColour("information-90"), + "information-95": getPrimitiveColour("information-95"), + "information-100": getPrimitiveColour("information-100"), + white: getPrimitiveColour("white"), + black: getPrimitiveColour("black"), +}; diff --git a/src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts b/src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts new file mode 100644 index 000000000..c0bccc952 --- /dev/null +++ b/src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts @@ -0,0 +1,90 @@ +import { getPrimitiveColour } from "../../colour-primitive/theme-helper"; +import { SematicColourSet } from "../../types"; + +export const BookingSGColourSet: SematicColourSet = { + text: "neutral-20", + "text-hover": "primary-40", + "text-selected": "primary-50", + "text-disabled": "neutral-50", + "text-success": "success-40", + "text-inverse": "white", + "text-subtle": "neutral-30", + "text-subtler": "neutral-50", + "text-subtlest": "neutral-60", + "text-disabled-subtle": "neutral-60", + "text-disabled-subtlest": "neutral-80", + "text-selected-disabled": "primary-60", + "text-warning": "warning-40", + "text-error": "error-40", + "text-info": "information-40", + + icon: "neutral-50", + "icon-hover": "primary-40", + "icon-selected": "primary-50", + "icon-disabled": "neutral-50", + "icon-success": "success-50", + "icon-inverse": "white", + "icon-subtle": "neutral-60", + "icon-primary": "primary-50", + "icon-primary-subtle": "primary-60", + "icon-primary-subtlest": "primary-70", + "icon-disabled-subtle": "neutral-60", + "icon-selected-disabled": "primary-60", + "icon-warning": "warning-60", + "icon-error": "error-50", + "icon-info": "information-50", + + border: "neutral-90", + "border-hover": "primary-90", + "border-selected": "primary-50", + "border-disabled": "neutral-90", + "border-success": "success-60", + "border-inverse": "neutral-90", + "border-strong": "neutral-70", + "border-primary": "primary-50", + "border-primary-subtle": "primary-60", + "border-hover-strong": "primary-60", + "border-selected-subtle": "primary-70", + "border-selected-subtlest": "primary-90", + "border-focus": "primary-60", + "border-focus-strong": "primary-50", + "border-selected-disabled": "neutral-70", + "border-warning": "warning-60", + "border-error": "error-60", + "border-error-focus": "error-60", + "border-info": "information-60", + + background: "white", + "background-hover": "primary-95", + "background-selected": "primary-95", + "background-disabled": "neutral-95", + "background-success": "success-100", + "background-inverse": "neutral-40", + "background-subtle": "neutral-100", + "background-hover-strong": "primary-90", + "background-hover-subtle": "primary-100", + "background-hover-neutral": "neutral-95", + "background-primary": "primary-50", + "background-primary-hover": "primary-40", + "background-primary-subtle": "primary-60", + "background-primary-subtlest": "primary-100", + "background-primary-subtlest-hover": "primary-90", + "background-primary-subtlest-selected": "primary-90", + "background-selected-strong": "primary-90", + "background-selected-hover": "primary-90", + "background-selected-disabled": "primary-90", + "background-warning": "warning-100", + "background-error": "error-100", + "background-info": "info-100", + + "overlay-strong": "rgba(40, 40, 40, 0.95)", + "overlay-subtle": "rgba(40, 40, 40, 0.20)", + // ? + "overlay-inverse-gradient": "rgba(255, 255, 255, 1)", + + hyperlink: "primary-50", + // ? + "hyperlink-inverse": "primary-50", + "focus-ring": "black", + "focus-ring-inverse": "white", +}; diff --git a/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts b/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts new file mode 100644 index 000000000..1b5794024 --- /dev/null +++ b/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts @@ -0,0 +1,88 @@ +import { getPrimitiveColour } from "../../colour-primitive/theme-helper"; +import { SematicColourSet } from "../../types"; + +export const LifeSGColourSet: SematicColourSet = { + text: getPrimitiveColour("neutral-20"), + "text-hover": getPrimitiveColour("primary-40"), + "text-selected": getPrimitiveColour("primary-50"), + "text-disabled": getPrimitiveColour("neutral-50"), + "text-success": getPrimitiveColour("success-40"), + "text-inverse": getPrimitiveColour("white"), + "text-subtle": getPrimitiveColour("neutral-30"), + "text-subtler": getPrimitiveColour("neutral-50"), + "text-subtlest": getPrimitiveColour("neutral-60"), + "text-disabled-subtle": getPrimitiveColour("neutral-60"), + "text-disabled-subtlest": getPrimitiveColour("neutral-80"), + "text-selected-disabled": getPrimitiveColour("primary-60"), + "text-warning": getPrimitiveColour("warning-40"), + "text-error": getPrimitiveColour("error-40"), + "text-info": getPrimitiveColour("information-40"), + + icon: getPrimitiveColour("neutral-50"), + "icon-hover": getPrimitiveColour("primary-40"), + "icon-selected": getPrimitiveColour("primary-50"), + "icon-disabled": getPrimitiveColour("neutral-50"), + "icon-success": getPrimitiveColour("success-50"), + "icon-inverse": getPrimitiveColour("white"), + "icon-subtle": getPrimitiveColour("neutral-60"), + "icon-primary": getPrimitiveColour("primary-50"), + "icon-primary-subtle": getPrimitiveColour("primary-60"), + "icon-primary-subtlest": getPrimitiveColour("primary-70"), + "icon-disabled-subtle": getPrimitiveColour("neutral-60"), + "icon-selected-disabled": getPrimitiveColour("primary-60"), + "icon-warning": getPrimitiveColour("warning-60"), + "icon-error": getPrimitiveColour("error-50"), + "icon-info": getPrimitiveColour("information-50"), + + border: getPrimitiveColour("neutral-90"), + "border-hover": getPrimitiveColour("primary-90"), + "border-selected": getPrimitiveColour("primary-50"), + "border-disabled": getPrimitiveColour("neutral-90"), + "border-success": getPrimitiveColour("success-60"), + "border-inverse": getPrimitiveColour("neutral-90"), + "border-strong": getPrimitiveColour("neutral-70"), + "border-primary": getPrimitiveColour("primary-50"), + "border-primary-subtle": getPrimitiveColour("primary-60"), + "border-hover-strong": getPrimitiveColour("primary-60"), + "border-selected-subtle": getPrimitiveColour("primary-70"), + "border-selected-subtlest": getPrimitiveColour("primary-90"), + "border-focus": getPrimitiveColour("primary-60"), + "border-focus-strong": getPrimitiveColour("primary-50"), + "border-selected-disabled": getPrimitiveColour("neutral-70"), + "border-warning": getPrimitiveColour("warning-60"), + "border-error": getPrimitiveColour("error-60"), + "border-error-focus": getPrimitiveColour("error-60"), + "border-info": getPrimitiveColour("information-60"), + + background: getPrimitiveColour("white"), + "background-hover": getPrimitiveColour("primary-95"), + "background-selected": getPrimitiveColour("primary-95"), + "background-disabled": getPrimitiveColour("neutral-95"), + "background-success": getPrimitiveColour("success-100"), + "background-inverse": getPrimitiveColour("neutral-40"), + "background-subtle": getPrimitiveColour("neutral-100"), + "background-hover-strong": getPrimitiveColour("primary-90"), + "background-hover-subtle": getPrimitiveColour("primary-100"), + "background-hover-neutral": getPrimitiveColour("neutral-95"), + "background-primary": getPrimitiveColour("primary-50"), + "background-primary-hover": getPrimitiveColour("primary-40"), + "background-primary-subtle": getPrimitiveColour("primary-60"), + "background-primary-subtlest": getPrimitiveColour("primary-100"), + "background-primary-subtlest-hover": getPrimitiveColour("primary-90"), + "background-primary-subtlest-selected": getPrimitiveColour("primary-90"), + "background-selected-strong": getPrimitiveColour("primary-90"), + "background-selected-hover": getPrimitiveColour("primary-90"), + "background-selected-disabled": getPrimitiveColour("primary-90"), + "background-warning": getPrimitiveColour("warning-100"), + "background-error": getPrimitiveColour("error-100"), + "background-info": getPrimitiveColour("information-100"), + + "overlay-strong": "rgba(40, 40, 40, 0.95)", + "overlay-subtle": "rgba(40, 40, 40, 0.20)", + "overlay-inverse-gradient": "rgba(255, 255, 255, 1)", + + hyperlink: getPrimitiveColour("primary-50"), + "hyperlink-inverse": "#FFCB6A", + "focus-ring": getPrimitiveColour("black"), + "focus-ring-inverse": getPrimitiveColour("white"), +}; diff --git a/src/theme/colour-semantic/theme-helper.ts b/src/theme/colour-semantic/theme-helper.ts new file mode 100644 index 000000000..d945de529 --- /dev/null +++ b/src/theme/colour-semantic/theme-helper.ts @@ -0,0 +1,147 @@ +import { getPrimitiveColour } from "../colour-primitive/theme-helper"; +import { getCollection, getValue } from "../helpers"; +import { Colour } from "../index"; +import { + ColourScheme, + ColourSet, + SematicColourCollectionMap, + SematicColourSet, + ThemeCollectionSpec, + ThemeContextKeys, + ThemeSpec, +} from "../types"; +import { BookingSGColourSet } from "./specs/bookingsg-semantic-tokens"; +import { LifeSGColourSet } from "./specs/lifesg-semantic-tokens"; + +const ColourSpec: ThemeCollectionSpec< + SematicColourCollectionMap, + ColourScheme +> = { + collections: { + lifesg: LifeSGColourSet, + bookingsg: LifeSGColourSet, + rbs: LifeSGColourSet, + mylegacy: LifeSGColourSet, + ccube: LifeSGColourSet, + }, + defaultValue: "lifesg", +}; + +export const getSemanticColour = (key: keyof SematicColourSet) => { + return (props: any): string => { + const theme = props.theme as ThemeSpec; + const colorSet: SematicColourSet = getCollection( + ColourSpec, + theme[ThemeContextKeys.colourScheme] + ); + + // check for an override + let colorValue = + theme.overrides && theme.overrides.color + ? getValue(colorSet, key, theme.overrides.color) + : colorSet[key]; + + // If function, resolve with props + if (typeof colorValue === "function") { + return (colorValue as (props: any) => string)(props); + } + + return colorValue as string; + }; +}; + +export const ColourSemantic = { + text: getSemanticColour("text"), + "text-hover": getSemanticColour("text-hover"), + "text-selected": getSemanticColour("text-selected"), + "text-disabled": getSemanticColour("text-disabled"), + "text-success": getSemanticColour("text-success"), + "text-inverse": getSemanticColour("text-inverse"), + "text-subtle": getSemanticColour("text-subtle"), + "text-subtler": getSemanticColour("text-subtler"), + "text-subtlest": getSemanticColour("text-subtlest"), + "text-disabled-subtle": getSemanticColour("text-disabled-subtle"), + "text-disabled-subtlest": getSemanticColour("text-disabled-subtlest"), + "text-selected-disabled": getSemanticColour("text-selected-disabled"), + "text-warning": getSemanticColour("text-warning"), + "text-error": getSemanticColour("text-error"), + "text-info": getSemanticColour("text-info"), + + icon: getSemanticColour("icon"), + "icon-hover": getSemanticColour("icon-hover"), + "icon-selected": getSemanticColour("icon-selected"), + "icon-disabled": getSemanticColour("icon-disabled"), + "icon-success": getSemanticColour("icon-success"), + "icon-inverse": getSemanticColour("icon-inverse"), + "icon-subtle": getSemanticColour("icon-subtle"), + "icon-primary": getSemanticColour("icon-primary"), + "icon-primary-subtle": getSemanticColour("icon-primary-subtle"), + "icon-primary-subtlest": getSemanticColour("icon-primary-subtlest"), + "icon-disabled-subtle": getSemanticColour("icon-disabled-subtle"), + "icon-selected-disabled": getSemanticColour("icon-selected-disabled"), + "icon-warning": getSemanticColour("icon-warning"), + "icon-error": getSemanticColour("icon-error"), + "icon-info": getSemanticColour("icon-info"), + + border: getSemanticColour("border"), + "border-hover": getSemanticColour("border-hover"), + "border-selected": getSemanticColour("border-selected"), + "border-disabled": getSemanticColour("border-disabled"), + "border-success": getSemanticColour("border-success"), + "border-inverse": getSemanticColour("border-inverse"), + "border-strong": getSemanticColour("border-strong"), + "border-primary": getSemanticColour("border-primary"), + "border-primary-subtle": getSemanticColour("border-primary-subtle"), + "border-hover-strong": getSemanticColour("border-hover-strong"), + "border-selected-subtle": getSemanticColour("border-selected-subtle"), + "border-selected-subtlest": getSemanticColour("border-selected-subtlest"), + "border-focus": getSemanticColour("border-focus"), + "border-focus-strong": getSemanticColour("border-focus-strong"), + "border-selected-disabled": getSemanticColour("border-selected-disabled"), + "border-warning": getSemanticColour("border-warning"), + "border-error": getSemanticColour("border-error"), + "border-error-focus": getSemanticColour("border-error-focus"), + "border-info": getSemanticColour("border-info"), + + background: getSemanticColour("background"), + "background-hover": getSemanticColour("background-hover"), + "background-selected": getSemanticColour("background-selected"), + "background-disabled": getSemanticColour("background-disabled"), + "background-success": getSemanticColour("background-success"), + "background-inverse": getSemanticColour("background-inverse"), + "background-subtle": getSemanticColour("background-subtle"), + "background-hover-strong": getSemanticColour("background-hover-strong"), + "background-hover-subtle": getSemanticColour("background-hover-subtle"), + "background-hover-neutral": getSemanticColour("background-hover-neutral"), + "background-primary": getSemanticColour("background-primary"), + "background-primary-hover": getSemanticColour("background-primary-hover"), + "background-primary-subtle": getSemanticColour("background-primary-subtle"), + "background-primary-subtlest": getSemanticColour( + "background-primary-subtlest" + ), + "background-primary-subtlest-hover": getSemanticColour( + "background-primary-subtlest-hover" + ), + "background-primary-subtlest-selected": getSemanticColour( + "background-primary-subtlest-selected" + ), + "background-selected-strong": getSemanticColour( + "background-selected-strong" + ), + "background-selected-hover": getSemanticColour("background-selected-hover"), + "background-selected-disabled": getSemanticColour( + "background-selected-disabled" + ), + "background-warning": getSemanticColour("background-warning"), + "background-error": getSemanticColour("background-error"), + "background-info": getSemanticColour("background-info"), + + "overlay-strong": getSemanticColour("overlay-strong"), + "overlay-subtle": getSemanticColour("overlay-subtle"), + "overlay-inverse-gradient": getSemanticColour("overlay-inverse-gradient"), + + hyperlink: getSemanticColour("hyperlink"), + "hyperlink-inverse": getSemanticColour("hyperlink-inverse"), + "focus-ring": getSemanticColour("focus-ring"), + "focus-ring-inverse": getSemanticColour("focus-ring-inverse"), +}; From 9e629973705c031aec19afeeb5b48fcf86fb2258 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Fri, 16 Aug 2024 11:08:01 +0800 Subject: [PATCH 0352/1949] [CCUBE-1524][MAHI]Updated change to naming convention to Colour --- src/theme/index.ts | 10 +++++----- src/theme/types.ts | 28 +++++++++++++++++----------- tests/theme/test-script.spec.tsx | 12 +++++++----- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/theme/index.ts b/src/theme/index.ts index a859424ed..735d04154 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,7 +1,7 @@ -import { PrimitiveColor } from "./color-primitive/theme-helper"; -import { ColorSemantic } from "./color-semantic/theme-helper"; +import { PrimitiveColour } from "./colour-primitive/theme-helper"; +import { ColourSemantic } from "./colour-semantic/theme-helper"; -export const Color = { - ...ColorSemantic, - Primitive: PrimitiveColor, +export const Colour = { + ...ColourSemantic, + Primitive: PrimitiveColour, }; diff --git a/src/theme/types.ts b/src/theme/types.ts index be1015844..dbef925ed 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -1,7 +1,8 @@ import get from "lodash/get"; +import { CSSProp } from "styled-components"; // For ColorSet: -export type ColorSet = { +export type ColourSet = { "brand-10": string; "brand-20": string; "brand-30": string; @@ -95,7 +96,7 @@ export type ColorSet = { }; // For SematicColorSet: -export type SematicColorSet = { +export type SematicColourSet = { text: string | ((props: any) => string); "text-hover": string | ((props: any) => string); "text-selected": string | ((props: any) => string); @@ -181,28 +182,33 @@ export type SematicColorSet = { "focus-ring-inverse": string | ((props: any) => string); }; -export type ColorScheme = "lifesg" | "bookingsg" | "rbs" | "mylegacy" | "ccube"; +export type ColourScheme = + | "lifesg" + | "bookingsg" + | "rbs" + | "mylegacy" + | "ccube"; -export type ColorCollectionsMap = { - [key in ColorScheme]: ColorSet; +export type ColourCollectionsMap = { + [key in ColourScheme]: ColourSet; }; -export type SematicColorCollectionMap = { - [key in ColorScheme]: SematicColorSet; +export type SematicColourCollectionMap = { + [key in ColourScheme]: SematicColourSet; }; export enum ThemeContextKeys { - colorScheme = "colorScheme", + colourScheme = "colourScheme", } -export type ColorSetOptions = Partial | Partial; +export type ColourSetOptions = Partial | Partial; export interface ThemeSpecOptions { - color?: ColorSetOptions | undefined; + color?: ColourSetOptions | undefined; } export interface ThemeSpec { - [ThemeContextKeys.colorScheme]: ColorScheme; + [ThemeContextKeys.colourScheme]?: ColourScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/tests/theme/test-script.spec.tsx b/tests/theme/test-script.spec.tsx index c4555d31d..78d7e6eef 100644 --- a/tests/theme/test-script.spec.tsx +++ b/tests/theme/test-script.spec.tsx @@ -1,22 +1,23 @@ import { render } from "@testing-library/react"; import "jest-styled-components"; import styled, { ThemeProvider } from "styled-components"; -import { Color } from "../../src/theme"; +import { Colour } from "../../src/theme"; import { ThemeSpec } from "../../src/theme/types"; const StyledComponentTest = styled.div` - background-color: ${Color.Primitive["primary-10"]}; - color: ${Color["border-primary"]}; + background-color: ${Colour.Primitive["primary-10"]}; + color: ${Colour["border-primary"]}; `; describe("StyledComponent", () => { it("should apply correct styles based on the theme", () => { const mockTheme: ThemeSpec = { - colorScheme: "lifesg", + colourScheme: "lifesg", }; const bgColor = "#001731"; const textColor = "#1768BE"; + const { container } = render( @@ -32,7 +33,7 @@ describe("StyledComponent", () => { it("should apply correct styles based on the theme", () => { const overrideTheme: ThemeSpec = { - colorScheme: "lifesg", + colourScheme: "lifesg", overrides: { color: { "primary-10": "#fefefe", @@ -42,6 +43,7 @@ describe("StyledComponent", () => { const bgColor = "#fefefe"; const textColor = "#1768BE"; + const { container } = render( From 2b686110bd23a4bdebd5699170e51f556114843c Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Mon, 19 Aug 2024 09:28:38 +0800 Subject: [PATCH 0353/1949] [CCUBE-1524][MAHI]Added missed operations for renamed operations --- .../specs/bookingsg-color-set.ts | 93 ----------- .../color-primitive/specs/ccube-color-set.ts | 94 ------------ .../color-primitive/specs/lifesg-color-set.ts | 94 ------------ .../specs/mylegacy-color-set.ts | 93 ----------- .../color-primitive/specs/rbs-color-set.ts | 94 ------------ src/theme/color-primitive/theme-helper.ts | 124 --------------- .../specs/bookingsg-semantic-tokens.ts | 90 ----------- .../specs/lifesg-semantic-tokens.ts | 88 ----------- src/theme/color-semantic/theme-helper.ts | 144 ------------------ 9 files changed, 914 deletions(-) delete mode 100644 src/theme/color-primitive/specs/bookingsg-color-set.ts delete mode 100644 src/theme/color-primitive/specs/ccube-color-set.ts delete mode 100644 src/theme/color-primitive/specs/lifesg-color-set.ts delete mode 100644 src/theme/color-primitive/specs/mylegacy-color-set.ts delete mode 100644 src/theme/color-primitive/specs/rbs-color-set.ts delete mode 100644 src/theme/color-primitive/theme-helper.ts delete mode 100644 src/theme/color-semantic/specs/bookingsg-semantic-tokens.ts delete mode 100644 src/theme/color-semantic/specs/lifesg-semantic-tokens.ts delete mode 100644 src/theme/color-semantic/theme-helper.ts diff --git a/src/theme/color-primitive/specs/bookingsg-color-set.ts b/src/theme/color-primitive/specs/bookingsg-color-set.ts deleted file mode 100644 index 54e659923..000000000 --- a/src/theme/color-primitive/specs/bookingsg-color-set.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { ColorSet } from "../../types"; -import { getPrimitiveColor } from "../theme-helper"; - -export const BookingSgColorSet: ColorSet = { - "brand-10": "#2C0C0B", - "brand-20": "#4C1513", - "brand-30": "#6C1D1B", - "brand-40": "#922825", - "brand-50": "#BF3431", - "brand-60": "#F15D5A", - "brand-70": "#F69491", - "brand-80": "#FABAB7", - "brand-90": "#FCD7D2", - "brand-95": "#FFEBE7", - "brand-100": "#FFF6F4", - "primary-10": "#1A122C", - "primary-20": "#2F1F4D", - "primary-30": "#422D6E", - "primary-40": "#5B3D97", - "primary-50": "#7654BC", - "primary-60": "#9A82CD", - "primary-70": "#B7A7D8", - "primary-80": "#CFC5E5", - "primary-90": "#E3DDF0", - "primary-95": "#F0EDF7", - "primary-100": "#F9F8FC", - "secondary-10": "#0E1723", - "secondary-20": "#18293D", - "secondary-30": "#233A57", - "secondary-40": "#305078", - "secondary-50": "#4B6A8F", - "secondary-60": "#7B91A9", - "secondary-70": "#A1B1C3", - "secondary-80": "#C1CBD7", - "secondary-90": "#DBE1E8", - "secondary-95": "#EBEFF2", - "secondary-100": "#F7F8FA", - "neutral-10": "#161616", - "neutral-20": "#282828", - "neutral-30": "#393939", - "neutral-40": "#4E4E4E", - "neutral-50": "#686868", - "neutral-60": "#8E8E8E", - "neutral-70": "#AFAFB0", - "neutral-80": "#C7CACA", - "neutral-90": "#DDE1E2", - "neutral-95": "#EDEFEF", - "neutral-100": "#F9F9F9", - "success-10": "#081A0F", - "success-20": "#0E2D1B", - "success-30": "#154126", - "success-40": "#1C5A34", - "success-50": "#257645", - "success-60": "#44A068", - "success-70": "#64C189", - "success-80": "#80DCA5", - "success-90": "#B4ECCB", - "success-95": "#D5F6E2", - "success-100": "#EFFCF4", - "warning-10": "#221302", - "warning-20": "#3B2204", - "warning-30": "#543106", - "warning-40": "#744408", - "warning-50": "#98590C", - "warning-60": "#D07A13", - "warning-70": "#E4A244", - "warning-80": "#F5C26C", - "warning-90": "#FADBA6", - "warning-95": "#FCECD4", - "warning-100": "#FDF7F0", - "error-10": "#330505", - "error-20": "#550808", - "error-30": "#750C0C", - "error-40": "#9E130F", - "error-50": "#CB2213", - "error-60": "#DE6C6C", - "error-70": "#E89B9B", - "error-80": "#EFBEBE", - "error-90": "#F5D9D9", - "error-95": "#F9ECEC", - "error-100": "#FCF7F7", - "information-10": "#021824", - "information-20": "#032B3F", - "information-30": "#053D59", - "information-40": "#065478", - "information-50": "#176E9B", - "information-60": "#5296BE", - "information-70": "#82B5DA", - "information-80": "#ACCFE7", - "information-90": "#CCE3F1", - "information-95": "#E3F1F8", - "information-100": "#F4FAFD", -}; diff --git a/src/theme/color-primitive/specs/ccube-color-set.ts b/src/theme/color-primitive/specs/ccube-color-set.ts deleted file mode 100644 index a005927c8..000000000 --- a/src/theme/color-primitive/specs/ccube-color-set.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { ColorSet } from "../../types"; - -export const CCubeColorSet: ColorSet = { - "brand-10": "#1F1221", - "brand-20": "#371F3B", - "brand-30": "#4E2C53", - "brand-40": "#6B3E73", - "brand-50": "#8D5197", - "brand-60": "#FF3399", - "brand-70": "#FF88C4", - "brand-80": "#FFB3D9", - "brand-90": "#FFD4E9", - "brand-95": "#FFE8F3", - "brand-100": "#FFD6EB", - "primary-10": "#1F1221", - "primary-20": "#371F3B", - "primary-30": "#4E2C53", - "primary-40": "#6B3E73", - "primary-50": "#8D5197", - "primary-60": "#B07DB7", - "primary-70": "#C7A3CC", - "primary-80": "#D9C2DD", - "primary-90": "#E9DBEB", - "primary-95": "#F3ECF4", - "primary-100": "#FAF7FA", - "secondary-10": "#2D091B", - "secondary-20": "#4D0F2E", - "secondary-30": "#6B1540", - "secondary-40": "#931D58", - "secondary-50": "#C02673", - "secondary-60": "#FF409F", - "secondary-70": "#FF88C4", - "secondary-80": "#FFB3D9", - "secondary-90": "#FFD4E9", - "secondary-95": "#FFE8F3", - "secondary-100": "#FFF8FC", - "neutral-10": "#161616", - "neutral-20": "#282828", - "neutral-30": "#393939", - "neutral-40": "#4E4E4E", - "neutral-50": "#686868", - "neutral-60": "#8E8E8E", - "neutral-70": "#AFAFBO", - "neutral-80": "#C7CACA", - "neutral-90": "#DDE1E2", - "neutral-95": "#EDEFEF", - "neutral-100": "#F9F9F9", - "success-10": "#081A0F", - "success-20": "#0E2D1B", - "success-30": "#154126", - "success-40": "#1C5A34", - "success-50": "#257645", - "success-60": "#44A068", - "success-70": "#64C189", - "success-80": "#80DCA5", - "success-90": "#B4ECCB", - "success-95": "#D5F6E2", - "success-100": "#EFFCF4", - "warning-10": "#221302", - "warning-20": "#3B2204", - "warning-30": "#543106", - "warning-40": "#744408", - "warning-50": "#98590C", - "warning-60": "#D07A13", - "warning-70": "#E4A244", - "warning-80": "#F5C26C", - "warning-90": "#FADBA6", - "warning-95": "#FCECD4", - "warning-100": "#FDF7F0", - "error-10": "#330505", - "error-20": "#550808", - "error-30": "#750C0C", - "error-40": "#9E130F", - "error-50": "#CB2213", - "error-60": "#DE6C6C", - "error-70": "#E89B9B", - "error-80": "#EFBEBE", - "error-90": "#F5D9D9", - "error-95": "#F9ECEC", - "error-100": "#FCF7F7", - "information-10": "#021824", - "information-20": "#032B3F", - "information-30": "#053D59", - "information-40": "#065478", - "information-50": "#176E9B", - "information-60": "#5296BE", - "information-70": "#82B5DA", - "information-80": "#ACCFE7", - "information-90": "#CCE3F1", - "information-95": "#E3F1F8", - "information-100": "#F4FAFD", - white: "#FFFFFF", - black: "#000000", -}; diff --git a/src/theme/color-primitive/specs/lifesg-color-set.ts b/src/theme/color-primitive/specs/lifesg-color-set.ts deleted file mode 100644 index 1a22ea572..000000000 --- a/src/theme/color-primitive/specs/lifesg-color-set.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { ColorSet } from "../../types"; - -export const LifeSgColorSet: ColorSet = { - "brand-10": "#2C0C0B", - "brand-20": "#4C1513", - "brand-30": "#6C1D1B", - "brand-40": "#922825", - "brand-50": "#BF3431", - "brand-60": "#F15D5A", - "brand-70": "#F69491", - "brand-80": "#FABAB7", - "brand-90": "#FCD7D2", - "brand-95": "#FFEBE7", - "brand-100": "#FFF6F4", - "primary-10": "#001731", - "primary-20": "#002752", - "primary-30": "#003874", - "primary-40": "#004D9F", - "primary-50": "#1768BE", - "primary-60": "#3C91EC", - "primary-70": "#6CB4FF", - "primary-80": "#A5CDFF", - "primary-90": "#CFE1FE", - "primary-95": "#E8F0FE", - "primary-100": "#F7F9FF", - "secondary-10": "#131529", - "secondary-20": "#222547", - "secondary-30": "#2F3565", - "secondary-40": "#42498B", - "secondary-50": "#5B62A7", - "secondary-60": "#858CBD", - "secondary-70": "#A8ADCF", - "secondary-80": "#C6C9E0", - "secondary-90": "#DDDFEC", - "secondary-95": "#EDEEF5", - "secondary-100": "#F8F8FB", - "neutral-10": "#161616", - "neutral-20": "#282828", - "neutral-30": "#393939", - "neutral-40": "#4E4E4E", - "neutral-50": "#686868", - "neutral-60": "#8E8E8E", - "neutral-70": "#AFAFBO", - "neutral-80": "#C7CACA", - "neutral-90": "#DDE1E2", - "neutral-95": "#EDEFEF", - "neutral-100": "#F9F9F9", - "success-10": "#081A0F", - "success-20": "#0E2D1B", - "success-30": "#154126", - "success-40": "#1C5A34", - "success-50": "#257645", - "success-60": "#44A068", - "success-70": "#64C189", - "success-80": "#80DCA5", - "success-90": "#B4ECCB", - "success-95": "#D5F6E2", - "success-100": "#EFFCF4", - "warning-10": "#221302", - "warning-20": "#3B2204", - "warning-30": "#543106", - "warning-40": "#744408", - "warning-50": "#98590C", - "warning-60": "#D07A13", - "warning-70": "#E4A244", - "warning-80": "#F5C26C", - "warning-90": "#FADBA6", - "warning-95": "#FCECD4", - "warning-100": "#FDF7F0", - "error-10": "#330505", - "error-20": "#550808", - "error-30": "#750C0C", - "error-40": "#9E130F", - "error-50": "#CB2213", - "error-60": "#DE6C6C", - "error-70": "#E89B9B", - "error-80": "#EFBEBE", - "error-90": "#F5D9D9", - "error-95": "#F9ECEC", - "error-100": "#FCF7F7", - "information-10": "#021824", - "information-20": "#032B3F", - "information-30": "#053D59", - "information-40": "#065478", - "information-50": "#176E9B", - "information-60": "#5296BE", - "information-70": "#82B5DA", - "information-80": "#ACCFE7", - "information-90": "#CCE3F1", - "information-95": "#E3F1F8", - "information-100": "#F4FAFD", -}; - -export type ColorSetOptions = Partial; diff --git a/src/theme/color-primitive/specs/mylegacy-color-set.ts b/src/theme/color-primitive/specs/mylegacy-color-set.ts deleted file mode 100644 index 5b0e98fb1..000000000 --- a/src/theme/color-primitive/specs/mylegacy-color-set.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { ColorSet } from "../../types"; - -export const MyLegacyColorSet: ColorSet = { - // brand,secondary from lifesg - "brand-10": "#2C0C0B", - "brand-20": "#4C1513", - "brand-30": "#6C1D1B", - "brand-40": "#922825", - "brand-50": "#BF3431", - "brand-60": "#F15D5A", - "brand-70": "#F69491", - "brand-80": "#FABAB7", - "brand-90": "#FCD7D2", - "brand-95": "#FFEBE7", - "brand-100": "#FFF6F4", - "primary-10": "#0011924", - "primary-20": "#032B40", - "primary-30": "#043D5A", - "primary-40": "#05547B", - "primary-50": "#096EA1", - "primary-60": "#2098D3", - "primary-70": "#5CB9E8", - "primary-80": "#8BD3F6", - "primary-90": "#BEE6FA", - "primary-95": "#E2F2FA", - "primary-100": "#F4FAFC", - "secondary-10": "#131529", - "secondary-20": "#222547", - "secondary-30": "#2F3565", - "secondary-40": "#42498B", - "secondary-50": "#5B62A7", - "secondary-60": "#858CBD", - "secondary-70": "#A8ADCF", - "secondary-80": "#C6C9E0", - "secondary-90": "#DDDFEC", - "secondary-95": "#EDEEF5", - "secondary-100": "#F8F8FB", - "neutral-10": "#161616", - "neutral-20": "#282828", - "neutral-30": "#393939", - "neutral-40": "#4E4E4E", - "neutral-50": "#686868", - "neutral-60": "#8E8E8E", - "neutral-70": "#AFAFBO", - "neutral-80": "#C7CACA", - "neutral-90": "#DDE1E2", - "neutral-95": "#EDEFEF", - "neutral-100": "#F9F9F9", - "success-10": "#081A0F", - "success-20": "#0E2D1B", - "success-30": "#154126", - "success-40": "#1C5A34", - "success-50": "#257645", - "success-60": "#44A068", - "success-70": "#64C189", - "success-80": "#80DCA5", - "success-90": "#B4ECCB", - "success-95": "#D5F6E2", - "success-100": "#EFFCF4", - "warning-10": "#221302", - "warning-20": "#3B2204", - "warning-30": "#543106", - "warning-40": "#744408", - "warning-50": "#98590C", - "warning-60": "#D07A13", - "warning-70": "#E4A244", - "warning-80": "#F5C26C", - "warning-90": "#FADBA6", - "warning-95": "#FCECD4", - "warning-100": "#FDF7F0", - "error-10": "#330505", - "error-20": "#550808", - "error-30": "#750C0C", - "error-40": "#9E130F", - "error-50": "#CB2213", - "error-60": "#DE6C6C", - "error-70": "#E89B9B", - "error-80": "#EFBEBE", - "error-90": "#F5D9D9", - "error-95": "#F9ECEC", - "error-100": "#FCF7F7", - "information-10": "#021824", - "information-20": "#032B3F", - "information-30": "#053D59", - "information-40": "#065478", - "information-50": "#176E9B", - "information-60": "#5296BE", - "information-70": "#82B5DA", - "information-80": "#ACCFE7", - "information-90": "#CCE3F1", - "information-95": "#E3F1F8", - "information-100": "#F4FAFD", -}; diff --git a/src/theme/color-primitive/specs/rbs-color-set.ts b/src/theme/color-primitive/specs/rbs-color-set.ts deleted file mode 100644 index cb7f6816c..000000000 --- a/src/theme/color-primitive/specs/rbs-color-set.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { ColorSet } from "../../types"; - -export const RBSColorSet: ColorSet = { - "brand-10": "#0E123A", - "brand-20": "#191E65", - "brand-30": "#232B90", - "brand-40": "#303BC5", - "brand-50": "#494CFF", - "brand-60": "#AD6EFF", - "brand-70": "#AEA4FF", - "brand-80": "#C5C4FF", - "brand-90": "#DDDCFF", - "brand-95": "#EDECFF", - "brand-100": "#F8F8FF", - "primary-10": "#10152B", - "primary-20": "#1C254B", - "primary-30": "#28356C", - "primary-40": "#38489A", - "primary-50": "#4D5AD7", - "primary-60": "#7487F2", - "primary-70": "#9AAAFC", - "primary-80": "#BDC7FD", - "primary-90": "#DADFFB", - "primary-95": "#ECEEFE", - "primary-100": "#F7F8FF", - "secondary-10": "#19151D", - "secondary-20": "#2B2533", - "secondary-30": "#3E3649", - "secondary-40": "#564A64", - "secondary-50": "#6F637D", - "secondary-60": "#948B9F", - "secondary-70": "#B3ACBB", - "secondary-80": "#CCC8D2", - "secondary-90": "#E1DEE4", - "secondary-95": "#EFEEF1", - "secondary-100": "#F9F8F9", - "neutral-10": "#161616", - "neutral-20": "#282828", - "neutral-30": "#393939", - "neutral-40": "#4E4E4E", - "neutral-50": "#686868", - "neutral-60": "#8E8E8E", - "neutral-70": "#AFAFBO", - "neutral-80": "#C7CACA", - "neutral-90": "#DDE1E2", - "neutral-95": "#EDEFEF", - "neutral-100": "#F9F9F9", - "success-10": "#081A0F", - "success-20": "#0E2D1B", - "success-30": "#154126", - "success-40": "#1C5A34", - "success-50": "#257645", - "success-60": "#44A068", - "success-70": "#64C189", - "success-80": "#80DCA5", - "success-90": "#B4ECCB", - "success-95": "#D5F6E2", - "success-100": "#EFFCF4", - "warning-10": "#221302", - "warning-20": "#3B2204", - "warning-30": "#543106", - "warning-40": "#744408", - "warning-50": "#98590C", - "warning-60": "#D07A13", - "warning-70": "#E4A244", - "warning-80": "#F5C26C", - "warning-90": "#FADBA6", - "warning-95": "#FCECD4", - "warning-100": "#FDF7F0", - "error-10": "#330505", - "error-20": "#550808", - "error-30": "#750C0C", - "error-40": "#9E130F", - "error-50": "#CB2213", - "error-60": "#DE6C6C", - "error-70": "#E89B9B", - "error-80": "#EFBEBE", - "error-90": "#F5D9D9", - "error-95": "#F9ECEC", - "error-100": "#FCF7F7", - "information-10": "#021824", - "information-20": "#032B3F", - "information-30": "#053D59", - "information-40": "#065478", - "information-50": "#176E9B", - "information-60": "#5296BE", - "information-70": "#82B5DA", - "information-80": "#ACCFE7", - "information-90": "#CCE3F1", - "information-95": "#E3F1F8", - "information-100": "#F4FAFD", - white: "#FFFFFF", - black: "#000000", -}; diff --git a/src/theme/color-primitive/theme-helper.ts b/src/theme/color-primitive/theme-helper.ts deleted file mode 100644 index 2f6a33998..000000000 --- a/src/theme/color-primitive/theme-helper.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { get } from "lodash"; -import { - ColorCollectionsMap, - ColorScheme, - ColorSet, - ThemeCollectionSpec, - ThemeContextKeys, - ThemeSpec, -} from "../types"; -import { BookingSgColorSet } from "./specs/bookingsg-color-set"; -import { CCubeColorSet } from "./specs/ccube-color-set"; -import { LifeSgColorSet } from "./specs/lifesg-color-set"; -import { MyLegacyColorSet } from "./specs/mylegacy-color-set"; -import { RBSColorSet } from "./specs/rbs-color-set"; -import { getCollection, getValue } from "../helpers"; - -const ColorSpec: ThemeCollectionSpec = { - collections: { - lifesg: LifeSgColorSet, - bookingsg: BookingSgColorSet, - rbs: RBSColorSet, - mylegacy: MyLegacyColorSet, - ccube: CCubeColorSet, - }, - defaultValue: "lifesg", -}; - -export const getPrimitiveColor = (key: keyof ColorSet) => { - return (props: any): string => { - const theme = props.theme as ThemeSpec; - const colorSet: ColorSet = getCollection( - ColorSpec, - theme[ThemeContextKeys.colorScheme] - ); - - if (theme.overrides && theme.overrides.color) { - return getValue(colorSet, key, theme.overrides.color) as string; - } else { - return colorSet[key]; - } - }; -}; - -export const PrimitiveColor = { - "primary-10": getPrimitiveColor("primary-10"), - "primary-20": getPrimitiveColor("primary-20"), - "primary-30": getPrimitiveColor("primary-30"), - "primary-40": getPrimitiveColor("primary-40"), - "primary-50": getPrimitiveColor("primary-50"), - "primary-60": getPrimitiveColor("primary-60"), - "primary-70": getPrimitiveColor("primary-70"), - "primary-80": getPrimitiveColor("primary-80"), - "primary-90": getPrimitiveColor("primary-90"), - "primary-95": getPrimitiveColor("primary-95"), - "primary-100": getPrimitiveColor("primary-100"), - "secondary-10": getPrimitiveColor("secondary-10"), - "secondary-20": getPrimitiveColor("secondary-20"), - "secondary-30": getPrimitiveColor("secondary-30"), - "secondary-40": getPrimitiveColor("secondary-40"), - "secondary-50": getPrimitiveColor("secondary-50"), - "secondary-60": getPrimitiveColor("secondary-60"), - "secondary-70": getPrimitiveColor("secondary-70"), - "secondary-80": getPrimitiveColor("secondary-80"), - "secondary-90": getPrimitiveColor("secondary-90"), - "secondary-95": getPrimitiveColor("secondary-95"), - "secondary-100": getPrimitiveColor("secondary-100"), - "neutral-10": getPrimitiveColor("neutral-10"), - "neutral-20": getPrimitiveColor("neutral-20"), - "neutral-30": getPrimitiveColor("neutral-30"), - "neutral-40": getPrimitiveColor("neutral-40"), - "neutral-50": getPrimitiveColor("neutral-50"), - "neutral-60": getPrimitiveColor("neutral-60"), - "neutral-70": getPrimitiveColor("neutral-70"), - "neutral-80": getPrimitiveColor("neutral-80"), - "neutral-90": getPrimitiveColor("neutral-90"), - "neutral-95": getPrimitiveColor("neutral-95"), - "neutral-100": getPrimitiveColor("neutral-100"), - "success-10": getPrimitiveColor("success-10"), - "success-20": getPrimitiveColor("success-20"), - "success-30": getPrimitiveColor("success-30"), - "success-40": getPrimitiveColor("success-40"), - "success-50": getPrimitiveColor("success-50"), - "success-60": getPrimitiveColor("success-60"), - "success-70": getPrimitiveColor("success-70"), - "success-80": getPrimitiveColor("success-80"), - "success-90": getPrimitiveColor("success-90"), - "success-95": getPrimitiveColor("success-95"), - "success-100": getPrimitiveColor("success-100"), - "warning-10": getPrimitiveColor("warning-10"), - "warning-20": getPrimitiveColor("warning-20"), - "warning-30": getPrimitiveColor("warning-30"), - "warning-40": getPrimitiveColor("warning-40"), - "warning-50": getPrimitiveColor("warning-50"), - "warning-60": getPrimitiveColor("warning-60"), - "warning-70": getPrimitiveColor("warning-70"), - "warning-80": getPrimitiveColor("warning-80"), - "warning-90": getPrimitiveColor("warning-90"), - "warning-95": getPrimitiveColor("warning-95"), - "warning-100": getPrimitiveColor("warning-100"), - "error-10": getPrimitiveColor("error-10"), - "error-20": getPrimitiveColor("error-20"), - "error-30": getPrimitiveColor("error-30"), - "error-40": getPrimitiveColor("error-40"), - "error-50": getPrimitiveColor("error-50"), - "error-60": getPrimitiveColor("error-60"), - "error-70": getPrimitiveColor("error-70"), - "error-80": getPrimitiveColor("error-80"), - "error-90": getPrimitiveColor("error-90"), - "error-95": getPrimitiveColor("error-95"), - "error-100": getPrimitiveColor("error-100"), - "information-10": getPrimitiveColor("information-10"), - "information-20": getPrimitiveColor("information-20"), - "information-30": getPrimitiveColor("information-30"), - "information-40": getPrimitiveColor("information-40"), - "information-50": getPrimitiveColor("information-50"), - "information-60": getPrimitiveColor("information-60"), - "information-70": getPrimitiveColor("information-70"), - "information-80": getPrimitiveColor("information-80"), - "information-90": getPrimitiveColor("information-90"), - "information-95": getPrimitiveColor("information-95"), - "information-100": getPrimitiveColor("information-100"), - white: getPrimitiveColor("white"), - black: getPrimitiveColor("black"), -}; diff --git a/src/theme/color-semantic/specs/bookingsg-semantic-tokens.ts b/src/theme/color-semantic/specs/bookingsg-semantic-tokens.ts deleted file mode 100644 index 8347b3b8f..000000000 --- a/src/theme/color-semantic/specs/bookingsg-semantic-tokens.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { getPrimitiveColor } from "../../color-primitive/theme-helper"; -import { SematicColorSet } from "../../types"; - -export const BookingSGColorSet: SematicColorSet = { - text: "neutral-20", - "text-hover": "primary-40", - "text-selected": "primary-50", - "text-disabled": "neutral-50", - "text-success": "success-40", - "text-inverse": "white", - "text-subtle": "neutral-30", - "text-subtler": "neutral-50", - "text-subtlest": "neutral-60", - "text-disabled-subtle": "neutral-60", - "text-disabled-subtlest": "neutral-80", - "text-selected-disabled": "primary-60", - "text-warning": "warning-40", - "text-error": "error-40", - "text-info": "information-40", - - icon: "neutral-50", - "icon-hover": "primary-40", - "icon-selected": "primary-50", - "icon-disabled": "neutral-50", - "icon-success": "success-50", - "icon-inverse": "white", - "icon-subtle": "neutral-60", - "icon-primary": "primary-50", - "icon-primary-subtle": "primary-60", - "icon-primary-subtlest": "primary-70", - "icon-disabled-subtle": "neutral-60", - "icon-selected-disabled": "primary-60", - "icon-warning": "warning-60", - "icon-error": "error-50", - "icon-info": "information-50", - - border: "neutral-90", - "border-hover": "primary-90", - "border-selected": "primary-50", - "border-disabled": "neutral-90", - "border-success": "success-60", - "border-inverse": "neutral-90", - "border-strong": "neutral-70", - "border-primary": "primary-50", - "border-primary-subtle": "primary-60", - "border-hover-strong": "primary-60", - "border-selected-subtle": "primary-70", - "border-selected-subtlest": "primary-90", - "border-focus": "primary-60", - "border-focus-strong": "primary-50", - "border-selected-disabled": "neutral-70", - "border-warning": "warning-60", - "border-error": "error-60", - "border-error-focus": "error-60", - "border-info": "information-60", - - background: "white", - "background-hover": "primary-95", - "background-selected": "primary-95", - "background-disabled": "neutral-95", - "background-success": "success-100", - "background-inverse": "neutral-40", - "background-subtle": "neutral-100", - "background-hover-strong": "primary-90", - "background-hover-subtle": "primary-100", - "background-hover-neutral": "neutral-95", - "background-primary": "primary-50", - "background-primary-hover": "primary-40", - "background-primary-subtle": "primary-60", - "background-primary-subtlest": "primary-100", - "background-primary-subtlest-hover": "primary-90", - "background-primary-subtlest-selected": "primary-90", - "background-selected-strong": "primary-90", - "background-selected-hover": "primary-90", - "background-selected-disabled": "primary-90", - "background-warning": "warning-100", - "background-error": "error-100", - "background-info": "info-100", - - "overlay-strong": "rgba(40, 40, 40, 0.95)", - "overlay-subtle": "rgba(40, 40, 40, 0.20)", - // ? - "overlay-inverse-gradient": "rgba(255, 255, 255, 1)", - - hyperlink: "primary-50", - // ? - "hyperlink-inverse": "primary-50", - "focus-ring": "black", - "focus-ring-inverse": "white", -}; diff --git a/src/theme/color-semantic/specs/lifesg-semantic-tokens.ts b/src/theme/color-semantic/specs/lifesg-semantic-tokens.ts deleted file mode 100644 index 28a842e63..000000000 --- a/src/theme/color-semantic/specs/lifesg-semantic-tokens.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { getPrimitiveColor } from "../../color-primitive/theme-helper"; -import { SematicColorSet } from "../../types"; - -export const LifeSGColorSet: SematicColorSet = { - text: getPrimitiveColor("neutral-20"), - "text-hover": getPrimitiveColor("primary-40"), - "text-selected": getPrimitiveColor("primary-50"), - "text-disabled": getPrimitiveColor("neutral-50"), - "text-success": getPrimitiveColor("success-40"), - "text-inverse": getPrimitiveColor("white"), - "text-subtle": getPrimitiveColor("neutral-30"), - "text-subtler": getPrimitiveColor("neutral-50"), - "text-subtlest": getPrimitiveColor("neutral-60"), - "text-disabled-subtle": getPrimitiveColor("neutral-60"), - "text-disabled-subtlest": getPrimitiveColor("neutral-80"), - "text-selected-disabled": getPrimitiveColor("primary-60"), - "text-warning": getPrimitiveColor("warning-40"), - "text-error": getPrimitiveColor("error-40"), - "text-info": getPrimitiveColor("information-40"), - - icon: getPrimitiveColor("neutral-50"), - "icon-hover": getPrimitiveColor("primary-40"), - "icon-selected": getPrimitiveColor("primary-50"), - "icon-disabled": getPrimitiveColor("neutral-50"), - "icon-success": getPrimitiveColor("success-50"), - "icon-inverse": getPrimitiveColor("white"), - "icon-subtle": getPrimitiveColor("neutral-60"), - "icon-primary": getPrimitiveColor("primary-50"), - "icon-primary-subtle": getPrimitiveColor("primary-60"), - "icon-primary-subtlest": getPrimitiveColor("primary-70"), - "icon-disabled-subtle": getPrimitiveColor("neutral-60"), - "icon-selected-disabled": getPrimitiveColor("primary-60"), - "icon-warning": getPrimitiveColor("warning-60"), - "icon-error": getPrimitiveColor("error-50"), - "icon-info": getPrimitiveColor("information-50"), - - border: getPrimitiveColor("neutral-90"), - "border-hover": getPrimitiveColor("primary-90"), - "border-selected": getPrimitiveColor("primary-50"), - "border-disabled": getPrimitiveColor("neutral-90"), - "border-success": getPrimitiveColor("success-60"), - "border-inverse": getPrimitiveColor("neutral-90"), - "border-strong": getPrimitiveColor("neutral-70"), - "border-primary": getPrimitiveColor("primary-50"), - "border-primary-subtle": getPrimitiveColor("primary-60"), - "border-hover-strong": getPrimitiveColor("primary-60"), - "border-selected-subtle": getPrimitiveColor("primary-70"), - "border-selected-subtlest": getPrimitiveColor("primary-90"), - "border-focus": getPrimitiveColor("primary-60"), - "border-focus-strong": getPrimitiveColor("primary-50"), - "border-selected-disabled": getPrimitiveColor("neutral-70"), - "border-warning": getPrimitiveColor("warning-60"), - "border-error": getPrimitiveColor("error-60"), - "border-error-focus": getPrimitiveColor("error-60"), - "border-info": getPrimitiveColor("information-60"), - - background: getPrimitiveColor("white"), - "background-hover": getPrimitiveColor("primary-95"), - "background-selected": getPrimitiveColor("primary-95"), - "background-disabled": getPrimitiveColor("neutral-95"), - "background-success": getPrimitiveColor("success-100"), - "background-inverse": getPrimitiveColor("neutral-40"), - "background-subtle": getPrimitiveColor("neutral-100"), - "background-hover-strong": getPrimitiveColor("primary-90"), - "background-hover-subtle": getPrimitiveColor("primary-100"), - "background-hover-neutral": getPrimitiveColor("neutral-95"), - "background-primary": getPrimitiveColor("primary-50"), - "background-primary-hover": getPrimitiveColor("primary-40"), - "background-primary-subtle": getPrimitiveColor("primary-60"), - "background-primary-subtlest": getPrimitiveColor("primary-100"), - "background-primary-subtlest-hover": getPrimitiveColor("primary-90"), - "background-primary-subtlest-selected": getPrimitiveColor("primary-90"), - "background-selected-strong": getPrimitiveColor("primary-90"), - "background-selected-hover": getPrimitiveColor("primary-90"), - "background-selected-disabled": getPrimitiveColor("primary-90"), - "background-warning": getPrimitiveColor("warning-100"), - "background-error": getPrimitiveColor("error-100"), - "background-info": getPrimitiveColor("information-100"), - - "overlay-strong": "rgba(40, 40, 40, 0.95)", - "overlay-subtle": "rgba(40, 40, 40, 0.20)", - "overlay-inverse-gradient": "rgba(255, 255, 255, 1)", - - hyperlink: getPrimitiveColor("primary-50"), - "hyperlink-inverse": "#FFCB6A", - "focus-ring": getPrimitiveColor("black"), - "focus-ring-inverse": getPrimitiveColor("white"), -}; diff --git a/src/theme/color-semantic/theme-helper.ts b/src/theme/color-semantic/theme-helper.ts deleted file mode 100644 index c1b6f1cc8..000000000 --- a/src/theme/color-semantic/theme-helper.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { getPrimitiveColor } from "../color-primitive/theme-helper"; -import { getCollection, getValue } from "../helpers"; -import { Color } from "../index"; -import { - ColorScheme, - ColorSet, - SematicColorCollectionMap, - SematicColorSet, - ThemeCollectionSpec, - ThemeContextKeys, - ThemeSpec, -} from "../types"; -import { BookingSGColorSet } from "./specs/bookingsg-semantic-tokens"; -import { LifeSGColorSet } from "./specs/lifesg-semantic-tokens"; - -const ColorSpec: ThemeCollectionSpec = { - collections: { - lifesg: LifeSGColorSet, - bookingsg: LifeSGColorSet, - rbs: LifeSGColorSet, - mylegacy: LifeSGColorSet, - ccube: LifeSGColorSet, - }, - defaultValue: "lifesg", -}; - -export const getSemanticColor = (key: keyof SematicColorSet) => { - return (props: any): string => { - const theme = props.theme as ThemeSpec; - const colorSet: SematicColorSet = getCollection( - ColorSpec, - theme[ThemeContextKeys.colorScheme] - ); - - // check for an override - let colorValue = - theme.overrides && theme.overrides.color - ? getValue(colorSet, key, theme.overrides.color) - : colorSet[key]; - - // If function, resolve with props - if (typeof colorValue === "function") { - return (colorValue as (props: any) => string)(props); - } - - return colorValue as string; - }; -}; - -export const ColorSemantic = { - text: getSemanticColor("text"), - "text-hover": getSemanticColor("text-hover"), - "text-selected": getSemanticColor("text-selected"), - "text-disabled": getSemanticColor("text-disabled"), - "text-success": getSemanticColor("text-success"), - "text-inverse": getSemanticColor("text-inverse"), - "text-subtle": getSemanticColor("text-subtle"), - "text-subtler": getSemanticColor("text-subtler"), - "text-subtlest": getSemanticColor("text-subtlest"), - "text-disabled-subtle": getSemanticColor("text-disabled-subtle"), - "text-disabled-subtlest": getSemanticColor("text-disabled-subtlest"), - "text-selected-disabled": getSemanticColor("text-selected-disabled"), - "text-warning": getSemanticColor("text-warning"), - "text-error": getSemanticColor("text-error"), - "text-info": getSemanticColor("text-info"), - - icon: getSemanticColor("icon"), - "icon-hover": getSemanticColor("icon-hover"), - "icon-selected": getSemanticColor("icon-selected"), - "icon-disabled": getSemanticColor("icon-disabled"), - "icon-success": getSemanticColor("icon-success"), - "icon-inverse": getSemanticColor("icon-inverse"), - "icon-subtle": getSemanticColor("icon-subtle"), - "icon-primary": getSemanticColor("icon-primary"), - "icon-primary-subtle": getSemanticColor("icon-primary-subtle"), - "icon-primary-subtlest": getSemanticColor("icon-primary-subtlest"), - "icon-disabled-subtle": getSemanticColor("icon-disabled-subtle"), - "icon-selected-disabled": getSemanticColor("icon-selected-disabled"), - "icon-warning": getSemanticColor("icon-warning"), - "icon-error": getSemanticColor("icon-error"), - "icon-info": getSemanticColor("icon-info"), - - border: getSemanticColor("border"), - "border-hover": getSemanticColor("border-hover"), - "border-selected": getSemanticColor("border-selected"), - "border-disabled": getSemanticColor("border-disabled"), - "border-success": getSemanticColor("border-success"), - "border-inverse": getSemanticColor("border-inverse"), - "border-strong": getSemanticColor("border-strong"), - "border-primary": getSemanticColor("border-primary"), - "border-primary-subtle": getSemanticColor("border-primary-subtle"), - "border-hover-strong": getSemanticColor("border-hover-strong"), - "border-selected-subtle": getSemanticColor("border-selected-subtle"), - "border-selected-subtlest": getSemanticColor("border-selected-subtlest"), - "border-focus": getSemanticColor("border-focus"), - "border-focus-strong": getSemanticColor("border-focus-strong"), - "border-selected-disabled": getSemanticColor("border-selected-disabled"), - "border-warning": getSemanticColor("border-warning"), - "border-error": getSemanticColor("border-error"), - "border-error-focus": getSemanticColor("border-error-focus"), - "border-info": getSemanticColor("border-info"), - - background: getSemanticColor("background"), - "background-hover": getSemanticColor("background-hover"), - "background-selected": getSemanticColor("background-selected"), - "background-disabled": getSemanticColor("background-disabled"), - "background-success": getSemanticColor("background-success"), - "background-inverse": getSemanticColor("background-inverse"), - "background-subtle": getSemanticColor("background-subtle"), - "background-hover-strong": getSemanticColor("background-hover-strong"), - "background-hover-subtle": getSemanticColor("background-hover-subtle"), - "background-hover-neutral": getSemanticColor("background-hover-neutral"), - "background-primary": getSemanticColor("background-primary"), - "background-primary-hover": getSemanticColor("background-primary-hover"), - "background-primary-subtle": getSemanticColor("background-primary-subtle"), - "background-primary-subtlest": getSemanticColor( - "background-primary-subtlest" - ), - "background-primary-subtlest-hover": getSemanticColor( - "background-primary-subtlest-hover" - ), - "background-primary-subtlest-selected": getSemanticColor( - "background-primary-subtlest-selected" - ), - "background-selected-strong": getSemanticColor( - "background-selected-strong" - ), - "background-selected-hover": getSemanticColor("background-selected-hover"), - "background-selected-disabled": getSemanticColor( - "background-selected-disabled" - ), - "background-warning": getSemanticColor("background-warning"), - "background-error": getSemanticColor("background-error"), - "background-info": getSemanticColor("background-info"), - - "overlay-strong": getSemanticColor("overlay-strong"), - "overlay-subtle": getSemanticColor("overlay-subtle"), - "overlay-inverse-gradient": getSemanticColor("overlay-inverse-gradient"), - - hyperlink: getSemanticColor("hyperlink"), - "hyperlink-inverse": getSemanticColor("hyperlink-inverse"), - "focus-ring": getSemanticColor("focus-ring"), - "focus-ring-inverse": getSemanticColor("focus-ring-inverse"), -}; From d7e2f2c70fe460828180a7873d21ebd8981824a9 Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 19 Aug 2024 09:38:58 +0800 Subject: [PATCH 0354/1949] [V3][RL] Resolve linter issues from deprecated theme usage --- src/error-display/error-display.tsx | 2 +- src/theme/colour-primitive/theme-helper.ts | 10 +++++----- stories/text/collection-doc-elements.tsx | 2 +- tests/error-display/error-display.spec.tsx | 20 ++++++++++---------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/error-display/error-display.tsx b/src/error-display/error-display.tsx index 8104aac88..08f51e124 100644 --- a/src/error-display/error-display.tsx +++ b/src/error-display/error-display.tsx @@ -33,7 +33,7 @@ export const ErrorDisplay = ({ const theme = useTheme(); const defaultAssets = getErrorDisplayData( type, - illustrationScheme || (theme || V2_BaseTheme).resourceScheme + illustrationScheme || ((theme || V2_BaseTheme) as any).resourceScheme ); const testId = otherProps["data-testid"] || "error-display"; diff --git a/src/theme/colour-primitive/theme-helper.ts b/src/theme/colour-primitive/theme-helper.ts index 693c62ee8..f61afd04b 100644 --- a/src/theme/colour-primitive/theme-helper.ts +++ b/src/theme/colour-primitive/theme-helper.ts @@ -7,11 +7,11 @@ import { ThemeContextKeys, ThemeSpec, } from "../types"; -import { BookingSgColourSet } from "./specs/bookingsg-color-set"; -import { CCubeColourSet } from "./specs/ccube-color-set"; -import { LifeSgColourSet } from "./specs/lifesg-color-set"; -import { MyLegacyColourSet } from "./specs/mylegacy-color-set"; -import { RBSColourSet } from "./specs/rbs-color-set"; +import { BookingSgColourSet } from "./specs/bookingsg-colour-set"; +import { CCubeColourSet } from "./specs/ccube-colour-set"; +import { LifeSgColourSet } from "./specs/lifesg-colour-set"; +import { MyLegacyColourSet } from "./specs/mylegacy-colour-set"; +import { RBSColourSet } from "./specs/rbs-colour-set"; import { getCollection, getValue } from "../helpers"; const ColourSpec: ThemeCollectionSpec = { diff --git a/stories/text/collection-doc-elements.tsx b/stories/text/collection-doc-elements.tsx index 1a2c7c984..25f957c25 100644 --- a/stories/text/collection-doc-elements.tsx +++ b/stories/text/collection-doc-elements.tsx @@ -120,7 +120,7 @@ export const FontSizeDisplay = ({ return ( - + {renderFontSizes()} diff --git a/tests/error-display/error-display.spec.tsx b/tests/error-display/error-display.spec.tsx index 12a355cd8..bd4490b82 100644 --- a/tests/error-display/error-display.spec.tsx +++ b/tests/error-display/error-display.spec.tsx @@ -19,7 +19,7 @@ describe("ErrorDisplay", () => { it("should render the component", () => { render( - + ); @@ -37,7 +37,7 @@ describe("ErrorDisplay", () => { }; render( - + ); @@ -49,7 +49,7 @@ describe("ErrorDisplay", () => { it("should be able to render custom title if specified", () => { render( - + ); @@ -61,7 +61,7 @@ describe("ErrorDisplay", () => { it("should not render any text content if the imageOnly prop is specified", () => { render( - + { describe("description", () => { it("should be able to render custom description", () => { render( - + ); @@ -90,7 +90,7 @@ describe("ErrorDisplay", () => { it("should be able to render JSX.Element", () => { render( - + {CUSTOM_DESCRIPTION}} @@ -130,7 +130,7 @@ describe("ErrorDisplay", () => { "should render %s error correctly", (type: ErrorDisplayType) => { render( - + ); @@ -156,7 +156,7 @@ describe("ErrorDisplay", () => { "should render bookingsg %s error correctly", (type: ErrorDisplayType) => { render( - + ); @@ -183,7 +183,7 @@ describe("ErrorDisplay", () => { test("should use the specified illustration based on the illustrationScheme prop", () => { render( - + ); @@ -214,7 +214,7 @@ describe("ErrorDisplay", () => { const additionalProps = { dateString: "01/01/2023" }; render( - + Date: Mon, 19 Aug 2024 12:02:40 +0800 Subject: [PATCH 0355/1949] [CCUBE-1524][MAHI]Fixed PR changes --- src/index.ts | 14 +- .../specs/bookingsg-colour-set.ts | 29 +-- .../specs/ccube-colour-set.ts | 28 +-- .../specs/lifesg-colour-set.ts | 32 +-- .../specs/mylegacy-colour-set.ts | 30 +-- .../colour-primitive/specs/rbs-colour-set.ts | 28 +-- src/theme/colour-primitive/theme-helper.ts | 40 ++-- .../specs/bookingsg-semantic-tokens.ts | 161 +++++++------- .../specs/lifesg-semantic-tokens.ts | 21 +- src/theme/colour-semantic/theme-helper.ts | 32 +-- src/theme/helpers.ts | 6 +- src/theme/index.ts | 22 ++ src/theme/types.ts | 210 +++++++++--------- ...pt.spec.tsx => theme-colour-test.spec.tsx} | 30 ++- 14 files changed, 375 insertions(+), 308 deletions(-) rename tests/theme/{test-script.spec.tsx => theme-colour-test.spec.tsx} (67%) diff --git a/src/index.ts b/src/index.ts index 3f27ebaf9..323bb3b75 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,12 +9,10 @@ export * from "./button-with-icon"; export * from "./calendar"; export * from "./card"; export * from "./checkbox"; -export * from "./v2_color"; export * from "./countdown-timer"; export * from "./data-table"; export * from "./date-input"; export * from "./date-range-input"; -export * from "./v2_design-token"; export * from "./divider"; export * from "./drawer"; export * from "./e-signature"; @@ -38,13 +36,11 @@ export * from "./input-range-slider"; export * from "./input-select"; export * from "./input-slider"; export * from "./input-textarea"; -export * from "./v2_layout"; export * from "./link-list"; export * from "./markup"; export * from "./masked-input"; export * from "./masonry"; export * from "./masthead"; -export * from "./v2_media"; export * from "./modal"; export * from "./navbar"; export * from "./notification-banner"; @@ -62,9 +58,8 @@ export * from "./sidenav"; export * from "./smart-app-banner"; export * from "./tab"; export * from "./tag"; -export * from "./v2_text"; export * from "./text-list"; -export * from "./v2_theme"; +export * from "./theme"; export * from "./time-range-picker"; export * from "./time-slot-bar"; export * from "./time-slot-bar-week"; @@ -77,4 +72,9 @@ export * from "./tooltip"; export * from "./transition"; export * from "./uneditable-section"; export * from "./unit-number"; -export * from "./theme"; +export * from "./v2_color"; +export * from "./v2_design-token"; +export * from "./v2_layout"; +export * from "./v2_media"; +export * from "./v2_text"; +export * from "./v2_theme"; diff --git a/src/theme/colour-primitive/specs/bookingsg-colour-set.ts b/src/theme/colour-primitive/specs/bookingsg-colour-set.ts index 3e61bb84e..72aaf8ff2 100644 --- a/src/theme/colour-primitive/specs/bookingsg-colour-set.ts +++ b/src/theme/colour-primitive/specs/bookingsg-colour-set.ts @@ -1,7 +1,6 @@ -import { ColourSet } from "../../types"; -import { getPrimitiveColour } from "../theme-helper"; +import { PrimitiveColourSet } from "../../types"; -export const BookingSgColourSet: ColourSet = { +export const BookingSgColourSet: PrimitiveColourSet = { "brand-10": "#2C0C0B", "brand-20": "#4C1513", "brand-30": "#6C1D1B", @@ -79,15 +78,17 @@ export const BookingSgColourSet: ColourSet = { "error-90": "#F5D9D9", "error-95": "#F9ECEC", "error-100": "#FCF7F7", - "information-10": "#021824", - "information-20": "#032B3F", - "information-30": "#053D59", - "information-40": "#065478", - "information-50": "#176E9B", - "information-60": "#5296BE", - "information-70": "#82B5DA", - "information-80": "#ACCFE7", - "information-90": "#CCE3F1", - "information-95": "#E3F1F8", - "information-100": "#F4FAFD", + "info-10": "#021824", + "info-20": "#032B3F", + "info-30": "#053D59", + "info-40": "#065478", + "info-50": "#176E9B", + "info-60": "#5296BE", + "info-70": "#82B5DA", + "info-80": "#ACCFE7", + "info-90": "#CCE3F1", + "info-95": "#E3F1F8", + "info-100": "#F4FAFD", + white: "#FFFFFF", + black: "#000000", }; diff --git a/src/theme/colour-primitive/specs/ccube-colour-set.ts b/src/theme/colour-primitive/specs/ccube-colour-set.ts index 0f78189b7..c30c82e5d 100644 --- a/src/theme/colour-primitive/specs/ccube-colour-set.ts +++ b/src/theme/colour-primitive/specs/ccube-colour-set.ts @@ -1,6 +1,6 @@ -import { ColourSet } from "../../types"; +import { PrimitiveColourSet } from "../../types"; -export const CCubeColourSet: ColourSet = { +export const CCubeColourSet: PrimitiveColourSet = { "brand-10": "#1F1221", "brand-20": "#371F3B", "brand-30": "#4E2C53", @@ -40,7 +40,7 @@ export const CCubeColourSet: ColourSet = { "neutral-40": "#4E4E4E", "neutral-50": "#686868", "neutral-60": "#8E8E8E", - "neutral-70": "#AFAFBO", + "neutral-70": "#AFAFB0", "neutral-80": "#C7CACA", "neutral-90": "#DDE1E2", "neutral-95": "#EDEFEF", @@ -78,17 +78,17 @@ export const CCubeColourSet: ColourSet = { "error-90": "#F5D9D9", "error-95": "#F9ECEC", "error-100": "#FCF7F7", - "information-10": "#021824", - "information-20": "#032B3F", - "information-30": "#053D59", - "information-40": "#065478", - "information-50": "#176E9B", - "information-60": "#5296BE", - "information-70": "#82B5DA", - "information-80": "#ACCFE7", - "information-90": "#CCE3F1", - "information-95": "#E3F1F8", - "information-100": "#F4FAFD", + "info-10": "#021824", + "info-20": "#032B3F", + "info-30": "#053D59", + "info-40": "#065478", + "info-50": "#176E9B", + "info-60": "#5296BE", + "info-70": "#82B5DA", + "info-80": "#ACCFE7", + "info-90": "#CCE3F1", + "info-95": "#E3F1F8", + "info-100": "#F4FAFD", white: "#FFFFFF", black: "#000000", }; diff --git a/src/theme/colour-primitive/specs/lifesg-colour-set.ts b/src/theme/colour-primitive/specs/lifesg-colour-set.ts index fc2c40a0f..ecc3c6b7f 100644 --- a/src/theme/colour-primitive/specs/lifesg-colour-set.ts +++ b/src/theme/colour-primitive/specs/lifesg-colour-set.ts @@ -1,6 +1,6 @@ -import { ColourSet } from "../../types"; +import { PrimitiveColourSet } from "../../types"; -export const LifeSgColourSet: ColourSet = { +export const LifeSgColourSet: PrimitiveColourSet = { "brand-10": "#2C0C0B", "brand-20": "#4C1513", "brand-30": "#6C1D1B", @@ -40,7 +40,7 @@ export const LifeSgColourSet: ColourSet = { "neutral-40": "#4E4E4E", "neutral-50": "#686868", "neutral-60": "#8E8E8E", - "neutral-70": "#AFAFBO", + "neutral-70": "#AFAFB0", "neutral-80": "#C7CACA", "neutral-90": "#DDE1E2", "neutral-95": "#EDEFEF", @@ -78,17 +78,17 @@ export const LifeSgColourSet: ColourSet = { "error-90": "#F5D9D9", "error-95": "#F9ECEC", "error-100": "#FCF7F7", - "information-10": "#021824", - "information-20": "#032B3F", - "information-30": "#053D59", - "information-40": "#065478", - "information-50": "#176E9B", - "information-60": "#5296BE", - "information-70": "#82B5DA", - "information-80": "#ACCFE7", - "information-90": "#CCE3F1", - "information-95": "#E3F1F8", - "information-100": "#F4FAFD", + "info-10": "#021824", + "info-20": "#032B3F", + "info-30": "#053D59", + "info-40": "#065478", + "info-50": "#176E9B", + "info-60": "#5296BE", + "info-70": "#82B5DA", + "info-80": "#ACCFE7", + "info-90": "#CCE3F1", + "info-95": "#E3F1F8", + "info-100": "#F4FAFD", + white: "#FFFFFF", + black: "#000000", }; - -export type ColorSetOptions = Partial; diff --git a/src/theme/colour-primitive/specs/mylegacy-colour-set.ts b/src/theme/colour-primitive/specs/mylegacy-colour-set.ts index 113c29afa..d2a298be3 100644 --- a/src/theme/colour-primitive/specs/mylegacy-colour-set.ts +++ b/src/theme/colour-primitive/specs/mylegacy-colour-set.ts @@ -1,6 +1,6 @@ -import { ColourSet } from "../../types"; +import { PrimitiveColourSet } from "../../types"; -export const MyLegacyColourSet: ColourSet = { +export const MyLegacyColourSet: PrimitiveColourSet = { // brand,secondary from lifesg "brand-10": "#2C0C0B", "brand-20": "#4C1513", @@ -41,7 +41,7 @@ export const MyLegacyColourSet: ColourSet = { "neutral-40": "#4E4E4E", "neutral-50": "#686868", "neutral-60": "#8E8E8E", - "neutral-70": "#AFAFBO", + "neutral-70": "#AFAFB0", "neutral-80": "#C7CACA", "neutral-90": "#DDE1E2", "neutral-95": "#EDEFEF", @@ -79,15 +79,17 @@ export const MyLegacyColourSet: ColourSet = { "error-90": "#F5D9D9", "error-95": "#F9ECEC", "error-100": "#FCF7F7", - "information-10": "#021824", - "information-20": "#032B3F", - "information-30": "#053D59", - "information-40": "#065478", - "information-50": "#176E9B", - "information-60": "#5296BE", - "information-70": "#82B5DA", - "information-80": "#ACCFE7", - "information-90": "#CCE3F1", - "information-95": "#E3F1F8", - "information-100": "#F4FAFD", + "info-10": "#021824", + "info-20": "#032B3F", + "info-30": "#053D59", + "info-40": "#065478", + "info-50": "#176E9B", + "info-60": "#5296BE", + "info-70": "#82B5DA", + "info-80": "#ACCFE7", + "info-90": "#CCE3F1", + "info-95": "#E3F1F8", + "info-100": "#F4FAFD", + white: "#FFFFFF", + black: "#000000", }; diff --git a/src/theme/colour-primitive/specs/rbs-colour-set.ts b/src/theme/colour-primitive/specs/rbs-colour-set.ts index c0641da63..13507922a 100644 --- a/src/theme/colour-primitive/specs/rbs-colour-set.ts +++ b/src/theme/colour-primitive/specs/rbs-colour-set.ts @@ -1,6 +1,6 @@ -import { ColourSet } from "../../types"; +import { PrimitiveColourSet } from "../../types"; -export const RBSColourSet: ColourSet = { +export const RBSColourSet: PrimitiveColourSet = { "brand-10": "#0E123A", "brand-20": "#191E65", "brand-30": "#232B90", @@ -40,7 +40,7 @@ export const RBSColourSet: ColourSet = { "neutral-40": "#4E4E4E", "neutral-50": "#686868", "neutral-60": "#8E8E8E", - "neutral-70": "#AFAFBO", + "neutral-70": "#AFAFB0", "neutral-80": "#C7CACA", "neutral-90": "#DDE1E2", "neutral-95": "#EDEFEF", @@ -78,17 +78,17 @@ export const RBSColourSet: ColourSet = { "error-90": "#F5D9D9", "error-95": "#F9ECEC", "error-100": "#FCF7F7", - "information-10": "#021824", - "information-20": "#032B3F", - "information-30": "#053D59", - "information-40": "#065478", - "information-50": "#176E9B", - "information-60": "#5296BE", - "information-70": "#82B5DA", - "information-80": "#ACCFE7", - "information-90": "#CCE3F1", - "information-95": "#E3F1F8", - "information-100": "#F4FAFD", + "info-10": "#021824", + "info-20": "#032B3F", + "info-30": "#053D59", + "info-40": "#065478", + "info-50": "#176E9B", + "info-60": "#5296BE", + "info-70": "#82B5DA", + "info-80": "#ACCFE7", + "info-90": "#CCE3F1", + "info-95": "#E3F1F8", + "info-100": "#F4FAFD", white: "#FFFFFF", black: "#000000", }; diff --git a/src/theme/colour-primitive/theme-helper.ts b/src/theme/colour-primitive/theme-helper.ts index f61afd04b..185e9d4f6 100644 --- a/src/theme/colour-primitive/theme-helper.ts +++ b/src/theme/colour-primitive/theme-helper.ts @@ -1,18 +1,16 @@ -import { get } from "lodash"; import { ColourCollectionsMap, ColourScheme, - ColourSet, + PrimitiveColourSet, ThemeCollectionSpec, ThemeContextKeys, - ThemeSpec, } from "../types"; import { BookingSgColourSet } from "./specs/bookingsg-colour-set"; import { CCubeColourSet } from "./specs/ccube-colour-set"; import { LifeSgColourSet } from "./specs/lifesg-colour-set"; import { MyLegacyColourSet } from "./specs/mylegacy-colour-set"; import { RBSColourSet } from "./specs/rbs-colour-set"; -import { getCollection, getValue } from "../helpers"; +import { StyledComponentProps, getCollection, getValue } from "../helpers"; const ColourSpec: ThemeCollectionSpec = { collections: { @@ -25,16 +23,16 @@ const ColourSpec: ThemeCollectionSpec = { defaultValue: "lifesg", }; -export const getPrimitiveColour = (key: keyof ColourSet) => { - return (props: any): string => { - const theme = props.theme as ThemeSpec; - const colorSet: ColourSet = getCollection( +export const getPrimitiveColour = (key: keyof PrimitiveColourSet) => { + return (props: StyledComponentProps): string => { + const theme = props.theme; + const colorSet: PrimitiveColourSet = getCollection( ColourSpec, theme[ThemeContextKeys.colourScheme] ); - if (theme.overrides && theme.overrides.color) { - const a = getValue(colorSet, key, theme.overrides.color); + if (theme.overrides && theme.overrides.colour) { + const a = getValue(colorSet, key, theme.overrides.colour); return a; } else { return colorSet[key]; @@ -109,17 +107,17 @@ export const PrimitiveColour = { "error-90": getPrimitiveColour("error-90"), "error-95": getPrimitiveColour("error-95"), "error-100": getPrimitiveColour("error-100"), - "information-10": getPrimitiveColour("information-10"), - "information-20": getPrimitiveColour("information-20"), - "information-30": getPrimitiveColour("information-30"), - "information-40": getPrimitiveColour("information-40"), - "information-50": getPrimitiveColour("information-50"), - "information-60": getPrimitiveColour("information-60"), - "information-70": getPrimitiveColour("information-70"), - "information-80": getPrimitiveColour("information-80"), - "information-90": getPrimitiveColour("information-90"), - "information-95": getPrimitiveColour("information-95"), - "information-100": getPrimitiveColour("information-100"), + "info-10": getPrimitiveColour("info-10"), + "info-20": getPrimitiveColour("info-20"), + "info-30": getPrimitiveColour("info-30"), + "info-40": getPrimitiveColour("info-40"), + "info-50": getPrimitiveColour("info-50"), + "info-60": getPrimitiveColour("info-60"), + "info-70": getPrimitiveColour("info-70"), + "info-80": getPrimitiveColour("info-80"), + "info-90": getPrimitiveColour("info-90"), + "info-95": getPrimitiveColour("info-95"), + "info-100": getPrimitiveColour("info-100"), white: getPrimitiveColour("white"), black: getPrimitiveColour("black"), }; diff --git a/src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts b/src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts index c0bccc952..958e7ff70 100644 --- a/src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts +++ b/src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts @@ -1,90 +1,93 @@ import { getPrimitiveColour } from "../../colour-primitive/theme-helper"; -import { SematicColourSet } from "../../types"; +import { SemanticColourSet } from "../../types"; -export const BookingSGColourSet: SematicColourSet = { - text: "neutral-20", - "text-hover": "primary-40", - "text-selected": "primary-50", - "text-disabled": "neutral-50", - "text-success": "success-40", - "text-inverse": "white", - "text-subtle": "neutral-30", - "text-subtler": "neutral-50", - "text-subtlest": "neutral-60", - "text-disabled-subtle": "neutral-60", - "text-disabled-subtlest": "neutral-80", - "text-selected-disabled": "primary-60", - "text-warning": "warning-40", - "text-error": "error-40", - "text-info": "information-40", +export const BookingSGColourSet: SemanticColourSet = { + text: getPrimitiveColour("neutral-20"), + "text-hover": getPrimitiveColour("primary-40"), + "text-selected": getPrimitiveColour("primary-50"), + "text-disabled": getPrimitiveColour("neutral-50"), + "text-success": getPrimitiveColour("success-40"), + "text-inverse": getPrimitiveColour("white"), + "text-subtle": getPrimitiveColour("neutral-30"), + "text-subtler": getPrimitiveColour("neutral-50"), + "text-subtlest": getPrimitiveColour("neutral-60"), + "text-disabled-subtle": getPrimitiveColour("neutral-60"), + "text-disabled-subtlest": getPrimitiveColour("neutral-80"), + "text-selected-disabled": getPrimitiveColour("primary-60"), + "text-warning": getPrimitiveColour("warning-40"), + "text-error": getPrimitiveColour("error-40"), + "text-info": getPrimitiveColour("info-40"), - icon: "neutral-50", - "icon-hover": "primary-40", - "icon-selected": "primary-50", - "icon-disabled": "neutral-50", - "icon-success": "success-50", - "icon-inverse": "white", - "icon-subtle": "neutral-60", - "icon-primary": "primary-50", - "icon-primary-subtle": "primary-60", - "icon-primary-subtlest": "primary-70", - "icon-disabled-subtle": "neutral-60", - "icon-selected-disabled": "primary-60", - "icon-warning": "warning-60", - "icon-error": "error-50", - "icon-info": "information-50", + icon: getPrimitiveColour("neutral-50"), + "icon-hover": getPrimitiveColour("primary-40"), + "icon-selected": getPrimitiveColour("primary-50"), + "icon-disabled": getPrimitiveColour("neutral-50"), + "icon-success": getPrimitiveColour("success-50"), + "icon-inverse": getPrimitiveColour("white"), + "icon-subtle": getPrimitiveColour("neutral-60"), + "icon-strongest": getPrimitiveColour("neutral-20"), + "icon-primary": getPrimitiveColour("primary-50"), + "icon-primary-subtle": getPrimitiveColour("primary-60"), + "icon-primary-subtlest": getPrimitiveColour("primary-70"), + "icon-disabled-subtle": getPrimitiveColour("neutral-60"), + "icon-selected-disabled": getPrimitiveColour("primary-60"), + "icon-warning": getPrimitiveColour("warning-60"), + "icon-error": getPrimitiveColour("error-50"), + "icon-error-strong": getPrimitiveColour("error-40"), + "icon-info": getPrimitiveColour("info-50"), - border: "neutral-90", - "border-hover": "primary-90", - "border-selected": "primary-50", - "border-disabled": "neutral-90", - "border-success": "success-60", - "border-inverse": "neutral-90", - "border-strong": "neutral-70", - "border-primary": "primary-50", - "border-primary-subtle": "primary-60", - "border-hover-strong": "primary-60", - "border-selected-subtle": "primary-70", - "border-selected-subtlest": "primary-90", - "border-focus": "primary-60", - "border-focus-strong": "primary-50", - "border-selected-disabled": "neutral-70", - "border-warning": "warning-60", - "border-error": "error-60", - "border-error-focus": "error-60", - "border-info": "information-60", + border: getPrimitiveColour("neutral-90"), + "border-hover": getPrimitiveColour("primary-90"), + "border-selected": getPrimitiveColour("primary-50"), + "border-disabled": getPrimitiveColour("neutral-90"), + "border-success": getPrimitiveColour("success-60"), + "border-inverse": getPrimitiveColour("neutral-90"), + "border-strong": getPrimitiveColour("neutral-70"), + "border-primary": getPrimitiveColour("primary-50"), + "border-primary-subtle": getPrimitiveColour("primary-60"), + "border-hover-strong": getPrimitiveColour("primary-60"), + "border-selected-subtle": getPrimitiveColour("primary-70"), + "border-selected-subtlest": getPrimitiveColour("primary-90"), + "border-focus": getPrimitiveColour("primary-60"), + "border-focus-strong": getPrimitiveColour("primary-50"), + "border-selected-disabled": getPrimitiveColour("neutral-70"), + "border-warning": getPrimitiveColour("warning-60"), + "border-error": getPrimitiveColour("error-60"), + "border-error-focus": getPrimitiveColour("error-60"), + "border-info": getPrimitiveColour("info-60"), - background: "white", - "background-hover": "primary-95", - "background-selected": "primary-95", - "background-disabled": "neutral-95", - "background-success": "success-100", - "background-inverse": "neutral-40", - "background-subtle": "neutral-100", - "background-hover-strong": "primary-90", - "background-hover-subtle": "primary-100", - "background-hover-neutral": "neutral-95", - "background-primary": "primary-50", - "background-primary-hover": "primary-40", - "background-primary-subtle": "primary-60", - "background-primary-subtlest": "primary-100", - "background-primary-subtlest-hover": "primary-90", - "background-primary-subtlest-selected": "primary-90", - "background-selected-strong": "primary-90", - "background-selected-hover": "primary-90", - "background-selected-disabled": "primary-90", - "background-warning": "warning-100", - "background-error": "error-100", - "background-info": "info-100", + background: getPrimitiveColour("white"), + "background-hover": getPrimitiveColour("primary-95"), + "background-selected": getPrimitiveColour("primary-95"), + "background-disabled": getPrimitiveColour("neutral-95"), + "background-success": getPrimitiveColour("success-100"), + "background-inverse": getPrimitiveColour("neutral-40"), + "background-strong": getPrimitiveColour("neutral-100"), + "background-stronger": getPrimitiveColour("neutral-95"), + "background-hover-strong": getPrimitiveColour("primary-90"), + "background-hover-subtle": getPrimitiveColour("primary-95"), + "background-hover-neutral": getPrimitiveColour("neutral-95"), + "background-primary": getPrimitiveColour("primary-50"), + "background-primary-hover": getPrimitiveColour("primary-40"), + "background-primary-subtle": getPrimitiveColour("primary-60"), + "background-primary-subtlest": getPrimitiveColour("primary-100"), + "background-primary-subtlest-hover": getPrimitiveColour("primary-90"), + "background-primary-subtlest-selected": getPrimitiveColour("primary-90"), + "background-selected-strong": getPrimitiveColour("primary-90"), + "background-selected-hover": getPrimitiveColour("primary-90"), + "background-selected-disabled": getPrimitiveColour("primary-90"), + "background-warning": getPrimitiveColour("warning-100"), + "background-error": getPrimitiveColour("error-100"), + "background-info": getPrimitiveColour("info-100"), + "background-error-strong": getPrimitiveColour("error-50"), + "background-error-strong-hover": getPrimitiveColour("error-30"), "overlay-strong": "rgba(40, 40, 40, 0.95)", "overlay-subtle": "rgba(40, 40, 40, 0.20)", - // ? "overlay-inverse-gradient": "rgba(255, 255, 255, 1)", - hyperlink: "primary-50", - // ? - "hyperlink-inverse": "primary-50", - "focus-ring": "black", - "focus-ring-inverse": "white", + hyperlink: getPrimitiveColour("primary-50"), + "hyperlink-inverse": "#FFCB6A", + "focus-ring": getPrimitiveColour("black"), + "focus-ring-inverse": getPrimitiveColour("white"), }; diff --git a/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts b/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts index 1b5794024..e02ee8e14 100644 --- a/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts +++ b/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts @@ -1,7 +1,7 @@ import { getPrimitiveColour } from "../../colour-primitive/theme-helper"; -import { SematicColourSet } from "../../types"; +import { SemanticColourSet } from "../../types"; -export const LifeSGColourSet: SematicColourSet = { +export const LifeSGColourSet: SemanticColourSet = { text: getPrimitiveColour("neutral-20"), "text-hover": getPrimitiveColour("primary-40"), "text-selected": getPrimitiveColour("primary-50"), @@ -16,7 +16,7 @@ export const LifeSGColourSet: SematicColourSet = { "text-selected-disabled": getPrimitiveColour("primary-60"), "text-warning": getPrimitiveColour("warning-40"), "text-error": getPrimitiveColour("error-40"), - "text-info": getPrimitiveColour("information-40"), + "text-info": getPrimitiveColour("info-40"), icon: getPrimitiveColour("neutral-50"), "icon-hover": getPrimitiveColour("primary-40"), @@ -25,6 +25,7 @@ export const LifeSGColourSet: SematicColourSet = { "icon-success": getPrimitiveColour("success-50"), "icon-inverse": getPrimitiveColour("white"), "icon-subtle": getPrimitiveColour("neutral-60"), + "icon-strongest": getPrimitiveColour("neutral-20"), "icon-primary": getPrimitiveColour("primary-50"), "icon-primary-subtle": getPrimitiveColour("primary-60"), "icon-primary-subtlest": getPrimitiveColour("primary-70"), @@ -32,7 +33,8 @@ export const LifeSGColourSet: SematicColourSet = { "icon-selected-disabled": getPrimitiveColour("primary-60"), "icon-warning": getPrimitiveColour("warning-60"), "icon-error": getPrimitiveColour("error-50"), - "icon-info": getPrimitiveColour("information-50"), + "icon-error-strong": getPrimitiveColour("error-40"), + "icon-info": getPrimitiveColour("info-50"), border: getPrimitiveColour("neutral-90"), "border-hover": getPrimitiveColour("primary-90"), @@ -52,7 +54,7 @@ export const LifeSGColourSet: SematicColourSet = { "border-warning": getPrimitiveColour("warning-60"), "border-error": getPrimitiveColour("error-60"), "border-error-focus": getPrimitiveColour("error-60"), - "border-info": getPrimitiveColour("information-60"), + "border-info": getPrimitiveColour("info-60"), background: getPrimitiveColour("white"), "background-hover": getPrimitiveColour("primary-95"), @@ -60,9 +62,10 @@ export const LifeSGColourSet: SematicColourSet = { "background-disabled": getPrimitiveColour("neutral-95"), "background-success": getPrimitiveColour("success-100"), "background-inverse": getPrimitiveColour("neutral-40"), - "background-subtle": getPrimitiveColour("neutral-100"), + "background-strong": getPrimitiveColour("neutral-100"), + "background-stronger": getPrimitiveColour("neutral-95"), "background-hover-strong": getPrimitiveColour("primary-90"), - "background-hover-subtle": getPrimitiveColour("primary-100"), + "background-hover-subtle": getPrimitiveColour("primary-95"), "background-hover-neutral": getPrimitiveColour("neutral-95"), "background-primary": getPrimitiveColour("primary-50"), "background-primary-hover": getPrimitiveColour("primary-40"), @@ -75,7 +78,9 @@ export const LifeSGColourSet: SematicColourSet = { "background-selected-disabled": getPrimitiveColour("primary-90"), "background-warning": getPrimitiveColour("warning-100"), "background-error": getPrimitiveColour("error-100"), - "background-info": getPrimitiveColour("information-100"), + "background-info": getPrimitiveColour("info-100"), + "background-error-strong": getPrimitiveColour("error-50"), + "background-error-strong-hover": getPrimitiveColour("error-30"), "overlay-strong": "rgba(40, 40, 40, 0.95)", "overlay-subtle": "rgba(40, 40, 40, 0.20)", diff --git a/src/theme/colour-semantic/theme-helper.ts b/src/theme/colour-semantic/theme-helper.ts index d945de529..2ccec5658 100644 --- a/src/theme/colour-semantic/theme-helper.ts +++ b/src/theme/colour-semantic/theme-helper.ts @@ -1,16 +1,11 @@ -import { getPrimitiveColour } from "../colour-primitive/theme-helper"; -import { getCollection, getValue } from "../helpers"; -import { Colour } from "../index"; +import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { ColourScheme, - ColourSet, + SemanticColourSet, SematicColourCollectionMap, - SematicColourSet, ThemeCollectionSpec, ThemeContextKeys, - ThemeSpec, } from "../types"; -import { BookingSGColourSet } from "./specs/bookingsg-semantic-tokens"; import { LifeSGColourSet } from "./specs/lifesg-semantic-tokens"; const ColourSpec: ThemeCollectionSpec< @@ -27,18 +22,18 @@ const ColourSpec: ThemeCollectionSpec< defaultValue: "lifesg", }; -export const getSemanticColour = (key: keyof SematicColourSet) => { - return (props: any): string => { - const theme = props.theme as ThemeSpec; - const colorSet: SematicColourSet = getCollection( +export const getSemanticColour = (key: keyof SemanticColourSet) => { + return (props: StyledComponentProps): string => { + const theme = props.theme; + const colorSet: SemanticColourSet = getCollection( ColourSpec, theme[ThemeContextKeys.colourScheme] ); // check for an override - let colorValue = - theme.overrides && theme.overrides.color - ? getValue(colorSet, key, theme.overrides.color) + const colorValue = + theme.overrides && theme.overrides.sematiccolour + ? getValue(colorSet, key, theme.overrides.sematiccolour) : colorSet[key]; // If function, resolve with props @@ -74,6 +69,7 @@ export const ColourSemantic = { "icon-success": getSemanticColour("icon-success"), "icon-inverse": getSemanticColour("icon-inverse"), "icon-subtle": getSemanticColour("icon-subtle"), + "icon-strongest": getSemanticColour("icon-strongest"), "icon-primary": getSemanticColour("icon-primary"), "icon-primary-subtle": getSemanticColour("icon-primary-subtle"), "icon-primary-subtlest": getSemanticColour("icon-primary-subtlest"), @@ -81,6 +77,7 @@ export const ColourSemantic = { "icon-selected-disabled": getSemanticColour("icon-selected-disabled"), "icon-warning": getSemanticColour("icon-warning"), "icon-error": getSemanticColour("icon-error"), + "icon-error-strong": getSemanticColour("icon-error-strong"), "icon-info": getSemanticColour("icon-info"), border: getSemanticColour("border"), @@ -109,7 +106,8 @@ export const ColourSemantic = { "background-disabled": getSemanticColour("background-disabled"), "background-success": getSemanticColour("background-success"), "background-inverse": getSemanticColour("background-inverse"), - "background-subtle": getSemanticColour("background-subtle"), + "background-strong": getSemanticColour("background-strong"), + "background-stronger": getSemanticColour("background-stronger"), "background-hover-strong": getSemanticColour("background-hover-strong"), "background-hover-subtle": getSemanticColour("background-hover-subtle"), "background-hover-neutral": getSemanticColour("background-hover-neutral"), @@ -135,6 +133,10 @@ export const ColourSemantic = { "background-warning": getSemanticColour("background-warning"), "background-error": getSemanticColour("background-error"), "background-info": getSemanticColour("background-info"), + "background-error-strong": getSemanticColour("background-error-strong"), + "background-error-strong-hover": getSemanticColour( + "background-error-strong-hover" + ), "overlay-strong": getSemanticColour("overlay-strong"), "overlay-subtle": getSemanticColour("overlay-subtle"), diff --git a/src/theme/helpers.ts b/src/theme/helpers.ts index d5513ad6b..4daef6a0d 100644 --- a/src/theme/helpers.ts +++ b/src/theme/helpers.ts @@ -1,5 +1,9 @@ import { get } from "lodash"; -import { ThemeCollectionSpec } from "./types"; +import { ThemeCollectionSpec, ThemeSpec } from "./types"; + +export interface StyledComponentProps { + theme: ThemeSpec; +} export const getValue = ( collection: C, diff --git a/src/theme/index.ts b/src/theme/index.ts index 735d04154..0a98fbfc9 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,7 +1,29 @@ import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; +import { ThemeSpec } from "./types"; + export const Colour = { ...ColourSemantic, Primitive: PrimitiveColour, }; + +export const LifeSGTheme: ThemeSpec = { + colourScheme: "lifesg", +}; + +export const BookingSGTheme: ThemeSpec = { + colourScheme: "bookingsg", +}; + +export const CcubeTheme: ThemeSpec = { + colourScheme: "ccube", +}; + +export const MyLegacyTheme: ThemeSpec = { + colourScheme: "mylegacy", +}; + +export const RBSTheme: ThemeSpec = { + colourScheme: "rbs", +}; diff --git a/src/theme/types.ts b/src/theme/types.ts index dbef925ed..3a6f52516 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -1,8 +1,4 @@ -import get from "lodash/get"; -import { CSSProp } from "styled-components"; - -// For ColorSet: -export type ColourSet = { +export type PrimitiveColourSet = { "brand-10": string; "brand-20": string; "brand-30": string; @@ -80,106 +76,112 @@ export type ColourSet = { "error-90": string; "error-95": string; "error-100": string; - "information-10": string; - "information-20": string; - "information-30": string; - "information-40": string; - "information-50": string; - "information-60": string; - "information-70": string; - "information-80": string; - "information-90": string; - "information-95": string; - "information-100": string; - white?: string | undefined; - black?: string | undefined; + "info-10": string; + "info-20": string; + "info-30": string; + "info-40": string; + "info-50": string; + "info-60": string; + "info-70": string; + "info-80": string; + "info-90": string; + "info-95": string; + "info-100": string; + white: string; + black: string; }; -// For SematicColorSet: -export type SematicColourSet = { - text: string | ((props: any) => string); - "text-hover": string | ((props: any) => string); - "text-selected": string | ((props: any) => string); - "text-disabled": string | ((props: any) => string); - "text-success": string | ((props: any) => string); - "text-inverse": string | ((props: any) => string); - "text-subtle": string | ((props: any) => string); - "text-subtler": string | ((props: any) => string); - "text-subtlest": string | ((props: any) => string); - "text-disabled-subtle": string | ((props: any) => string); - "text-disabled-subtlest": string | ((props: any) => string); - "text-selected-disabled": string | ((props: any) => string); - "text-warning": string | ((props: any) => string); - "text-error": string | ((props: any) => string); - "text-info": string | ((props: any) => string); +export type SemanticColourValue = string | ((props: any) => string); + +export type SemanticColourSet = { + text: SemanticColourValue; + "text-hover": SemanticColourValue; + "text-selected": SemanticColourValue; + "text-disabled": SemanticColourValue; + "text-success": SemanticColourValue; + "text-inverse": SemanticColourValue; + "text-subtle": SemanticColourValue; + "text-subtler": SemanticColourValue; + "text-subtlest": SemanticColourValue; + "text-disabled-subtle": SemanticColourValue; + "text-disabled-subtlest": SemanticColourValue; + "text-selected-disabled": SemanticColourValue; + "text-warning": SemanticColourValue; + "text-error": SemanticColourValue; + "text-info": SemanticColourValue; - icon: string | ((props: any) => string); - "icon-hover": string | ((props: any) => string); - "icon-selected": string | ((props: any) => string); - "icon-disabled": string | ((props: any) => string); - "icon-success": string | ((props: any) => string); - "icon-inverse": string | ((props: any) => string); - "icon-subtle": string | ((props: any) => string); - "icon-primary": string | ((props: any) => string); - "icon-primary-subtle": string | ((props: any) => string); - "icon-primary-subtlest": string | ((props: any) => string); - "icon-disabled-subtle": string | ((props: any) => string); - "icon-selected-disabled": string | ((props: any) => string); - "icon-warning": string | ((props: any) => string); - "icon-error": string | ((props: any) => string); - "icon-info": string | ((props: any) => string); + icon: SemanticColourValue; + "icon-hover": SemanticColourValue; + "icon-selected": SemanticColourValue; + "icon-disabled": SemanticColourValue; + "icon-success": SemanticColourValue; + "icon-inverse": SemanticColourValue; + "icon-subtle": SemanticColourValue; + "icon-strongest": SemanticColourValue; + "icon-primary": SemanticColourValue; + "icon-primary-subtle": SemanticColourValue; + "icon-primary-subtlest": SemanticColourValue; + "icon-disabled-subtle": SemanticColourValue; + "icon-selected-disabled": SemanticColourValue; + "icon-warning": SemanticColourValue; + "icon-error": SemanticColourValue; + "icon-error-strong": SemanticColourValue; + "icon-info": SemanticColourValue; - border: string | ((props: any) => string); - "border-hover": string | ((props: any) => string); - "border-selected": string | ((props: any) => string); - "border-disabled": string | ((props: any) => string); - "border-success": string | ((props: any) => string); - "border-inverse": string | ((props: any) => string); - "border-strong": string | ((props: any) => string); - "border-primary": string | ((props: any) => string); - "border-primary-subtle": string | ((props: any) => string); - "border-hover-strong": string | ((props: any) => string); - "border-selected-subtle": string | ((props: any) => string); - "border-selected-subtlest": string | ((props: any) => string); - "border-focus": string | ((props: any) => string); - "border-focus-strong": string | ((props: any) => string); - "border-selected-disabled": string | ((props: any) => string); - "border-warning": string | ((props: any) => string); - "border-error": string | ((props: any) => string); - "border-error-focus": string | ((props: any) => string); - "border-info": string | ((props: any) => string); + border: SemanticColourValue; + "border-hover": SemanticColourValue; + "border-selected": SemanticColourValue; + "border-disabled": SemanticColourValue; + "border-success": SemanticColourValue; + "border-inverse": SemanticColourValue; + "border-strong": SemanticColourValue; + "border-primary": SemanticColourValue; + "border-primary-subtle": SemanticColourValue; + "border-hover-strong": SemanticColourValue; + "border-selected-subtle": SemanticColourValue; + "border-selected-subtlest": SemanticColourValue; + "border-focus": SemanticColourValue; + "border-focus-strong": SemanticColourValue; + "border-selected-disabled": SemanticColourValue; + "border-warning": SemanticColourValue; + "border-error": SemanticColourValue; + "border-error-focus": SemanticColourValue; + "border-info": SemanticColourValue; - background: string | ((props: any) => string); - "background-hover": string | ((props: any) => string); - "background-selected": string | ((props: any) => string); - "background-disabled": string | ((props: any) => string); - "background-success": string | ((props: any) => string); - "background-inverse": string | ((props: any) => string); - "background-subtle": string | ((props: any) => string); - "background-hover-strong": string | ((props: any) => string); - "background-hover-subtle": string | ((props: any) => string); - "background-hover-neutral": string | ((props: any) => string); - "background-primary": string | ((props: any) => string); - "background-primary-hover": string | ((props: any) => string); - "background-primary-subtle": string | ((props: any) => string); - "background-primary-subtlest": string | ((props: any) => string); - "background-primary-subtlest-hover": string | ((props: any) => string); - "background-primary-subtlest-selected": string | ((props: any) => string); - "background-selected-strong": string | ((props: any) => string); - "background-selected-hover": string | ((props: any) => string); - "background-selected-disabled": string | ((props: any) => string); - "background-warning": string | ((props: any) => string); - "background-error": string | ((props: any) => string); - "background-info": string | ((props: any) => string); + background: SemanticColourValue; + "background-hover": SemanticColourValue; + "background-selected": SemanticColourValue; + "background-disabled": SemanticColourValue; + "background-success": SemanticColourValue; + "background-inverse": SemanticColourValue; + "background-strong": SemanticColourValue; + "background-stronger": SemanticColourValue; + "background-hover-strong": SemanticColourValue; + "background-hover-subtle": SemanticColourValue; + "background-hover-neutral": SemanticColourValue; + "background-primary": SemanticColourValue; + "background-primary-hover": SemanticColourValue; + "background-primary-subtle": SemanticColourValue; + "background-primary-subtlest": SemanticColourValue; + "background-primary-subtlest-hover": SemanticColourValue; + "background-primary-subtlest-selected": SemanticColourValue; + "background-selected-strong": SemanticColourValue; + "background-selected-hover": SemanticColourValue; + "background-selected-disabled": SemanticColourValue; + "background-warning": SemanticColourValue; + "background-error": SemanticColourValue; + "background-info": SemanticColourValue; + "background-error-strong": SemanticColourValue; + "background-error-strong-hover": SemanticColourValue; - "overlay-strong": string | ((props: any) => string); - "overlay-subtle": string | ((props: any) => string); - "overlay-inverse-gradient": string | ((props: any) => string); + "overlay-strong": SemanticColourValue; + "overlay-subtle": SemanticColourValue; + "overlay-inverse-gradient": SemanticColourValue; - hyperlink: string | ((props: any) => string); - "hyperlink-inverse": string | ((props: any) => string); - "focus-ring": string | ((props: any) => string); - "focus-ring-inverse": string | ((props: any) => string); + hyperlink: SemanticColourValue; + "hyperlink-inverse": SemanticColourValue; + "focus-ring": SemanticColourValue; + "focus-ring-inverse": SemanticColourValue; }; export type ColourScheme = @@ -190,25 +192,27 @@ export type ColourScheme = | "ccube"; export type ColourCollectionsMap = { - [key in ColourScheme]: ColourSet; + [key in ColourScheme]: PrimitiveColourSet; }; export type SematicColourCollectionMap = { - [key in ColourScheme]: SematicColourSet; + [key in ColourScheme]: SemanticColourSet; }; export enum ThemeContextKeys { colourScheme = "colourScheme", } -export type ColourSetOptions = Partial | Partial; +export type ColourSetOptions = Partial; +export type SematicColourSetOptions = Partial; export interface ThemeSpecOptions { - color?: ColourSetOptions | undefined; + colour?: ColourSetOptions | undefined; + sematiccolour?: SematicColourSetOptions | undefined; } export interface ThemeSpec { - [ThemeContextKeys.colourScheme]?: ColourScheme; + [ThemeContextKeys.colourScheme]: ColourScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/tests/theme/test-script.spec.tsx b/tests/theme/theme-colour-test.spec.tsx similarity index 67% rename from tests/theme/test-script.spec.tsx rename to tests/theme/theme-colour-test.spec.tsx index 78d7e6eef..5b477814e 100644 --- a/tests/theme/test-script.spec.tsx +++ b/tests/theme/theme-colour-test.spec.tsx @@ -9,7 +9,7 @@ const StyledComponentTest = styled.div` color: ${Colour["border-primary"]}; `; -describe("StyledComponent", () => { +describe("Colour Themeing Test", () => { it("should apply correct styles based on the theme", () => { const mockTheme: ThemeSpec = { colourScheme: "lifesg", @@ -35,7 +35,7 @@ describe("StyledComponent", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", overrides: { - color: { + colour: { "primary-10": "#fefefe", }, }, @@ -56,4 +56,30 @@ describe("StyledComponent", () => { ); expect(container.firstChild).toHaveStyleRule("color", textColor); }); + + it("should apply correct styles based on the theme", () => { + const overrideTheme: ThemeSpec = { + colourScheme: "lifesg", + overrides: { + sematiccolour: { + "border-primary": "#fefefe", + }, + }, + }; + + const bgColor = "#001731"; + const textColor = "#fefefe"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule( + "background-color", + bgColor + ); + expect(container.firstChild).toHaveStyleRule("color", textColor); + }); }); From 298800795870d4fc5386f8ac533d1d6dffff4396 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Mon, 19 Aug 2024 14:40:09 +0800 Subject: [PATCH 0356/1949] [CCUBE-1524][MAHI]Refactor and cleaned up theme types --- src/theme/colour-primitive/theme-helper.ts | 8 +++----- src/theme/colour-primitive/types.ts | 7 +++++++ src/theme/colour-semantic/theme-helper.ts | 13 ++++-------- src/theme/colour-semantic/types.ts | 7 +++++++ src/theme/types.ts | 24 ++++++---------------- tests/theme/theme-colour-test.spec.tsx | 8 ++++---- 6 files changed, 31 insertions(+), 36 deletions(-) create mode 100644 src/theme/colour-primitive/types.ts create mode 100644 src/theme/colour-semantic/types.ts diff --git a/src/theme/colour-primitive/theme-helper.ts b/src/theme/colour-primitive/theme-helper.ts index 185e9d4f6..35e4390ad 100644 --- a/src/theme/colour-primitive/theme-helper.ts +++ b/src/theme/colour-primitive/theme-helper.ts @@ -1,9 +1,7 @@ import { - ColourCollectionsMap, ColourScheme, PrimitiveColourSet, ThemeCollectionSpec, - ThemeContextKeys, } from "../types"; import { BookingSgColourSet } from "./specs/bookingsg-colour-set"; import { CCubeColourSet } from "./specs/ccube-colour-set"; @@ -11,6 +9,7 @@ import { LifeSgColourSet } from "./specs/lifesg-colour-set"; import { MyLegacyColourSet } from "./specs/mylegacy-colour-set"; import { RBSColourSet } from "./specs/rbs-colour-set"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; +import { ColourCollectionsMap } from "./types"; const ColourSpec: ThemeCollectionSpec = { collections: { @@ -28,12 +27,11 @@ export const getPrimitiveColour = (key: keyof PrimitiveColourSet) => { const theme = props.theme; const colorSet: PrimitiveColourSet = getCollection( ColourSpec, - theme[ThemeContextKeys.colourScheme] + theme["colourScheme"] ); if (theme.overrides && theme.overrides.colour) { - const a = getValue(colorSet, key, theme.overrides.colour); - return a; + return getValue(colorSet, key, theme.overrides.colour); } else { return colorSet[key]; } diff --git a/src/theme/colour-primitive/types.ts b/src/theme/colour-primitive/types.ts new file mode 100644 index 000000000..1e858be04 --- /dev/null +++ b/src/theme/colour-primitive/types.ts @@ -0,0 +1,7 @@ +import { ColourScheme, PrimitiveColourSet } from "../types"; + +export type ColourCollectionsMap = { + [key in ColourScheme]: PrimitiveColourSet; +}; + +export type PrimitiveColourSetOptions = Partial; diff --git a/src/theme/colour-semantic/theme-helper.ts b/src/theme/colour-semantic/theme-helper.ts index 2ccec5658..2e3d2d62c 100644 --- a/src/theme/colour-semantic/theme-helper.ts +++ b/src/theme/colour-semantic/theme-helper.ts @@ -1,15 +1,10 @@ import { StyledComponentProps, getCollection, getValue } from "../helpers"; -import { - ColourScheme, - SemanticColourSet, - SematicColourCollectionMap, - ThemeCollectionSpec, - ThemeContextKeys, -} from "../types"; +import { ColourScheme, SemanticColourSet, ThemeCollectionSpec } from "../types"; import { LifeSGColourSet } from "./specs/lifesg-semantic-tokens"; +import { SemanticColourCollectionMap } from "./types"; const ColourSpec: ThemeCollectionSpec< - SematicColourCollectionMap, + SemanticColourCollectionMap, ColourScheme > = { collections: { @@ -27,7 +22,7 @@ export const getSemanticColour = (key: keyof SemanticColourSet) => { const theme = props.theme; const colorSet: SemanticColourSet = getCollection( ColourSpec, - theme[ThemeContextKeys.colourScheme] + theme["colourScheme"] ); // check for an override diff --git a/src/theme/colour-semantic/types.ts b/src/theme/colour-semantic/types.ts new file mode 100644 index 000000000..b9d7ca88b --- /dev/null +++ b/src/theme/colour-semantic/types.ts @@ -0,0 +1,7 @@ +import { ColourScheme, SemanticColourSet } from "../types"; + +export type SemanticColourCollectionMap = { + [key in ColourScheme]: SemanticColourSet; +}; + +export type SemanticColourSetOptions = Partial; diff --git a/src/theme/types.ts b/src/theme/types.ts index 3a6f52516..f310c9b68 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -1,3 +1,6 @@ +import { PrimitiveColourSetOptions } from "./colour-primitive/types"; +import { SemanticColourSetOptions } from "./colour-semantic/types"; + export type PrimitiveColourSet = { "brand-10": string; "brand-20": string; @@ -191,28 +194,13 @@ export type ColourScheme = | "mylegacy" | "ccube"; -export type ColourCollectionsMap = { - [key in ColourScheme]: PrimitiveColourSet; -}; - -export type SematicColourCollectionMap = { - [key in ColourScheme]: SemanticColourSet; -}; - -export enum ThemeContextKeys { - colourScheme = "colourScheme", -} - -export type ColourSetOptions = Partial; -export type SematicColourSetOptions = Partial; - export interface ThemeSpecOptions { - colour?: ColourSetOptions | undefined; - sematiccolour?: SematicColourSetOptions | undefined; + colour?: PrimitiveColourSetOptions | undefined; + sematiccolour?: SemanticColourSetOptions | undefined; } export interface ThemeSpec { - [ThemeContextKeys.colourScheme]: ColourScheme; + colourScheme: ColourScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/tests/theme/theme-colour-test.spec.tsx b/tests/theme/theme-colour-test.spec.tsx index 5b477814e..35d25e17e 100644 --- a/tests/theme/theme-colour-test.spec.tsx +++ b/tests/theme/theme-colour-test.spec.tsx @@ -12,11 +12,11 @@ const StyledComponentTest = styled.div` describe("Colour Themeing Test", () => { it("should apply correct styles based on the theme", () => { const mockTheme: ThemeSpec = { - colourScheme: "lifesg", + colourScheme: "bookingsg", }; - const bgColor = "#001731"; - const textColor = "#1768BE"; + const bgColor = "#1A122C"; + const textColor = "#7654BC"; const { container } = render( @@ -31,7 +31,7 @@ describe("Colour Themeing Test", () => { expect(container.firstChild).toHaveStyleRule("color", textColor); }); - it("should apply correct styles based on the theme", () => { + it("should apply correct styles based on the theme with override", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", overrides: { From 89192e3626694dbf6199948f3afcb2483568bc25 Mon Sep 17 00:00:00 2001 From: Benedict Date: Mon, 19 Aug 2024 18:09:16 +0800 Subject: [PATCH 0357/1949] [MOL-15577][BC] Fix typo --- .github/workflows/trigger-gitlab-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/trigger-gitlab-pipeline.yml b/.github/workflows/trigger-gitlab-pipeline.yml index 214e584cb..1aa681996 100644 --- a/.github/workflows/trigger-gitlab-pipeline.yml +++ b/.github/workflows/trigger-gitlab-pipeline.yml @@ -69,7 +69,7 @@ jobs: DOWNSTREAM_JOB_NAME: build-dist-job run: | echo "Pipeline ID: $PIPELINE_ID" - echo "[ Running pipline check after $SLEEP_DURATION_MINUTES minutes ]" + echo "[ Running pipeline check after $SLEEP_DURATION_MINUTES minutes ]" sleep $(($SLEEP_DURATION_MINUTES*60)) num_attempts=1 From 3cc715bf58d2546f7c4d8d30e2df2e7bd8138a98 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 20 Aug 2024 11:06:47 +0800 Subject: [PATCH 0358/1949] [CCUBE-1524][MAHI]Fix final PR changes --- src/theme/colour-primitive/theme-helper.ts | 6 +++--- src/theme/colour-semantic/theme-helper.ts | 6 +++--- src/theme/types.ts | 4 ++-- .../{theme-colour-test.spec.tsx => theme-colour.spec.tsx} | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) rename tests/theme/{theme-colour-test.spec.tsx => theme-colour.spec.tsx} (90%) diff --git a/src/theme/colour-primitive/theme-helper.ts b/src/theme/colour-primitive/theme-helper.ts index 35e4390ad..1316489a6 100644 --- a/src/theme/colour-primitive/theme-helper.ts +++ b/src/theme/colour-primitive/theme-helper.ts @@ -27,11 +27,11 @@ export const getPrimitiveColour = (key: keyof PrimitiveColourSet) => { const theme = props.theme; const colorSet: PrimitiveColourSet = getCollection( ColourSpec, - theme["colourScheme"] + theme.colourScheme ); - if (theme.overrides && theme.overrides.colour) { - return getValue(colorSet, key, theme.overrides.colour); + if (theme.overrides && theme.overrides.primitiveColour) { + return getValue(colorSet, key, theme.overrides.primitiveColour); } else { return colorSet[key]; } diff --git a/src/theme/colour-semantic/theme-helper.ts b/src/theme/colour-semantic/theme-helper.ts index 2e3d2d62c..df89ed637 100644 --- a/src/theme/colour-semantic/theme-helper.ts +++ b/src/theme/colour-semantic/theme-helper.ts @@ -22,13 +22,13 @@ export const getSemanticColour = (key: keyof SemanticColourSet) => { const theme = props.theme; const colorSet: SemanticColourSet = getCollection( ColourSpec, - theme["colourScheme"] + theme.colourScheme ); // check for an override const colorValue = - theme.overrides && theme.overrides.sematiccolour - ? getValue(colorSet, key, theme.overrides.sematiccolour) + theme.overrides && theme.overrides.semanticColour + ? getValue(colorSet, key, theme.overrides.semanticColour) : colorSet[key]; // If function, resolve with props diff --git a/src/theme/types.ts b/src/theme/types.ts index f310c9b68..51dbaf7bb 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -195,8 +195,8 @@ export type ColourScheme = | "ccube"; export interface ThemeSpecOptions { - colour?: PrimitiveColourSetOptions | undefined; - sematiccolour?: SemanticColourSetOptions | undefined; + primitiveColour?: PrimitiveColourSetOptions | undefined; + semanticColour?: SemanticColourSetOptions | undefined; } export interface ThemeSpec { diff --git a/tests/theme/theme-colour-test.spec.tsx b/tests/theme/theme-colour.spec.tsx similarity index 90% rename from tests/theme/theme-colour-test.spec.tsx rename to tests/theme/theme-colour.spec.tsx index 35d25e17e..8252ef760 100644 --- a/tests/theme/theme-colour-test.spec.tsx +++ b/tests/theme/theme-colour.spec.tsx @@ -31,11 +31,11 @@ describe("Colour Themeing Test", () => { expect(container.firstChild).toHaveStyleRule("color", textColor); }); - it("should apply correct styles based on the theme with override", () => { + it("should apply correct styles when overriding primitive colour token", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", overrides: { - colour: { + primitiveColour: { "primary-10": "#fefefe", }, }, @@ -57,11 +57,11 @@ describe("Colour Themeing Test", () => { expect(container.firstChild).toHaveStyleRule("color", textColor); }); - it("should apply correct styles based on the theme", () => { + it("should apply correct styles when overriding semantic colour token", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", overrides: { - sematiccolour: { + semanticColour: { "border-primary": "#fefefe", }, }, From a7885b2831f067804a604bdacf5858a1a50460f0 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 20 Aug 2024 12:22:21 +0800 Subject: [PATCH 0359/1949] [BOOKINGSG-6062] add optional toggleFilterButtonStyle prop for mobile Filter button, refactor to use ButtonWithIcon --- src/button/types.ts | 4 ++-- src/filter/filter.styles.tsx | 11 ++--------- src/filter/filter.tsx | 8 +++++--- src/filter/types.ts | 2 ++ stories/filter/props-table.tsx | 7 +++++++ 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/button/types.ts b/src/button/types.ts index 2bf067295..98c96e1b7 100644 --- a/src/button/types.ts +++ b/src/button/types.ts @@ -1,12 +1,12 @@ import React from "react"; import { ComponentLoadingSpinnerProps } from "../shared/component-loading-spinner/component-loading-spinner"; -type StyleType = "default" | "secondary" | "light" | "link"; +export type ButtonStyleType = "default" | "secondary" | "light" | "link"; export interface ButtonBaseProps extends React.ButtonHTMLAttributes { /** The style type of the button. Values: "default" | "secondary" | "light" | "link" */ - styleType?: StyleType | undefined; + styleType?: ButtonStyleType | undefined; /** If specified, the component will have a red color scheme being applied */ danger?: boolean | undefined; } diff --git a/src/filter/filter.styles.tsx b/src/filter/filter.styles.tsx index 53e566420..70c3cdf73 100644 --- a/src/filter/filter.styles.tsx +++ b/src/filter/filter.styles.tsx @@ -5,6 +5,7 @@ import { Color } from "../color/color"; import { MediaQuery } from "../media/media"; import { ClickableIcon } from "../shared/clickable-icon"; import { Text } from "../text/text"; +import { ButtonWithIcon } from "../button-with-icon"; // ============================================================================= // CONTAINER STYLES @@ -92,16 +93,8 @@ export const FilterClearButton = styled(Button.Small)` // COMPONENT STYLES // ============================================================================= -export const FilterButton = styled(Button.Default)` +export const FilterButton = styled(ButtonWithIcon.Default)` width: 100%; - span { - display: flex; - align-items: center; - } -`; - -export const StyledFilterIcon = styled(FilterIcon)` - margin-right: 0.625rem; `; export const FilterFooter = styled.div` diff --git a/src/filter/filter.tsx b/src/filter/filter.tsx index 89d757251..35b81818f 100644 --- a/src/filter/filter.tsx +++ b/src/filter/filter.tsx @@ -19,12 +19,13 @@ import { FilterTitle, MobileContainer, MobileOverlayContainer, - StyledFilterIcon, } from "./filter.styles"; import { FilterProps, Mode } from "./types"; +import { FilterIcon } from "@lifesg/react-icons"; const FilterBase = ({ toggleFilterButtonLabel = "Filters", + toggleFilterButtonStyle = "light", headerTitle = "Filters", clearButtonDisabled = false, onClear, @@ -117,11 +118,12 @@ const FilterBase = ({ <> } > - {toggleFilterButtonLabel} + {toggleFilterButtonLabel} Date: Tue, 20 Aug 2024 12:26:18 +0800 Subject: [PATCH 0360/1949] [CCUBE-1524][MAHI]Cleaned up the exports for public helper functions --- src/theme/colour-primitive/types.ts | 95 +++++++++++++- src/theme/colour-semantic/types.ts | 94 +++++++++++++- src/theme/helpers.ts | 2 +- src/theme/types.ts | 193 ++-------------------------- 4 files changed, 196 insertions(+), 188 deletions(-) diff --git a/src/theme/colour-primitive/types.ts b/src/theme/colour-primitive/types.ts index 1e858be04..b550d3670 100644 --- a/src/theme/colour-primitive/types.ts +++ b/src/theme/colour-primitive/types.ts @@ -1,7 +1,100 @@ -import { ColourScheme, PrimitiveColourSet } from "../types"; +import { ColourScheme } from "../types"; export type ColourCollectionsMap = { [key in ColourScheme]: PrimitiveColourSet; }; export type PrimitiveColourSetOptions = Partial; + +export type PrimitiveColourSet = { + "brand-10": string; + "brand-20": string; + "brand-30": string; + "brand-40": string; + "brand-50": string; + "brand-60": string; + "brand-70": string; + "brand-80": string; + "brand-90": string; + "brand-95": string; + "brand-100": string; + "primary-10": string; + "primary-20": string; + "primary-30": string; + "primary-40": string; + "primary-50": string; + "primary-60": string; + "primary-70": string; + "primary-80": string; + "primary-90": string; + "primary-95": string; + "primary-100": string; + "secondary-10": string; + "secondary-20": string; + "secondary-30": string; + "secondary-40": string; + "secondary-50": string; + "secondary-60": string; + "secondary-70": string; + "secondary-80": string; + "secondary-90": string; + "secondary-95": string; + "secondary-100": string; + "neutral-10": string; + "neutral-20": string; + "neutral-30": string; + "neutral-40": string; + "neutral-50": string; + "neutral-60": string; + "neutral-70": string; + "neutral-80": string; + "neutral-90": string; + "neutral-95": string; + "neutral-100": string; + "success-10": string; + "success-20": string; + "success-30": string; + "success-40": string; + "success-50": string; + "success-60": string; + "success-70": string; + "success-80": string; + "success-90": string; + "success-95": string; + "success-100": string; + "warning-10": string; + "warning-20": string; + "warning-30": string; + "warning-40": string; + "warning-50": string; + "warning-60": string; + "warning-70": string; + "warning-80": string; + "warning-90": string; + "warning-95": string; + "warning-100": string; + "error-10": string; + "error-20": string; + "error-30": string; + "error-40": string; + "error-50": string; + "error-60": string; + "error-70": string; + "error-80": string; + "error-90": string; + "error-95": string; + "error-100": string; + "info-10": string; + "info-20": string; + "info-30": string; + "info-40": string; + "info-50": string; + "info-60": string; + "info-70": string; + "info-80": string; + "info-90": string; + "info-95": string; + "info-100": string; + white: string; + black: string; +}; diff --git a/src/theme/colour-semantic/types.ts b/src/theme/colour-semantic/types.ts index b9d7ca88b..31cf7500d 100644 --- a/src/theme/colour-semantic/types.ts +++ b/src/theme/colour-semantic/types.ts @@ -1,7 +1,99 @@ -import { ColourScheme, SemanticColourSet } from "../types"; +import { ColourScheme } from "../types"; export type SemanticColourCollectionMap = { [key in ColourScheme]: SemanticColourSet; }; export type SemanticColourSetOptions = Partial; + +type SemanticColourValue = string | ((props: any) => string); +export type SemanticColourSet = { + text: SemanticColourValue; + "text-hover": SemanticColourValue; + "text-selected": SemanticColourValue; + "text-disabled": SemanticColourValue; + "text-success": SemanticColourValue; + "text-inverse": SemanticColourValue; + "text-subtle": SemanticColourValue; + "text-subtler": SemanticColourValue; + "text-subtlest": SemanticColourValue; + "text-disabled-subtle": SemanticColourValue; + "text-disabled-subtlest": SemanticColourValue; + "text-selected-disabled": SemanticColourValue; + "text-warning": SemanticColourValue; + "text-error": SemanticColourValue; + "text-info": SemanticColourValue; + + icon: SemanticColourValue; + "icon-hover": SemanticColourValue; + "icon-selected": SemanticColourValue; + "icon-disabled": SemanticColourValue; + "icon-success": SemanticColourValue; + "icon-inverse": SemanticColourValue; + "icon-subtle": SemanticColourValue; + "icon-strongest": SemanticColourValue; + "icon-primary": SemanticColourValue; + "icon-primary-subtle": SemanticColourValue; + "icon-primary-subtlest": SemanticColourValue; + "icon-disabled-subtle": SemanticColourValue; + "icon-selected-disabled": SemanticColourValue; + "icon-warning": SemanticColourValue; + "icon-error": SemanticColourValue; + "icon-error-strong": SemanticColourValue; + "icon-info": SemanticColourValue; + + border: SemanticColourValue; + "border-hover": SemanticColourValue; + "border-selected": SemanticColourValue; + "border-disabled": SemanticColourValue; + "border-success": SemanticColourValue; + "border-inverse": SemanticColourValue; + "border-strong": SemanticColourValue; + "border-primary": SemanticColourValue; + "border-primary-subtle": SemanticColourValue; + "border-hover-strong": SemanticColourValue; + "border-selected-subtle": SemanticColourValue; + "border-selected-subtlest": SemanticColourValue; + "border-focus": SemanticColourValue; + "border-focus-strong": SemanticColourValue; + "border-selected-disabled": SemanticColourValue; + "border-warning": SemanticColourValue; + "border-error": SemanticColourValue; + "border-error-focus": SemanticColourValue; + "border-info": SemanticColourValue; + + background: SemanticColourValue; + "background-hover": SemanticColourValue; + "background-selected": SemanticColourValue; + "background-disabled": SemanticColourValue; + "background-success": SemanticColourValue; + "background-inverse": SemanticColourValue; + "background-strong": SemanticColourValue; + "background-stronger": SemanticColourValue; + "background-hover-strong": SemanticColourValue; + "background-hover-subtle": SemanticColourValue; + "background-hover-neutral": SemanticColourValue; + "background-primary": SemanticColourValue; + "background-primary-hover": SemanticColourValue; + "background-primary-subtle": SemanticColourValue; + "background-primary-subtlest": SemanticColourValue; + "background-primary-subtlest-hover": SemanticColourValue; + "background-primary-subtlest-selected": SemanticColourValue; + "background-selected-strong": SemanticColourValue; + "background-selected-hover": SemanticColourValue; + "background-selected-disabled": SemanticColourValue; + "background-warning": SemanticColourValue; + "background-error": SemanticColourValue; + "background-info": SemanticColourValue; + "background-error-strong": SemanticColourValue; + "background-error-strong-hover": SemanticColourValue; + + "overlay-strong": SemanticColourValue; + "overlay-subtle": SemanticColourValue; + "overlay-inverse-gradient": SemanticColourValue; + + hyperlink: SemanticColourValue; + "hyperlink-inverse": SemanticColourValue; + "focus-ring": SemanticColourValue; + "focus-ring-inverse": SemanticColourValue; +}; diff --git a/src/theme/helpers.ts b/src/theme/helpers.ts index 4daef6a0d..9df6eaad0 100644 --- a/src/theme/helpers.ts +++ b/src/theme/helpers.ts @@ -1,4 +1,4 @@ -import { get } from "lodash"; +import get from "lodash/get"; import { ThemeCollectionSpec, ThemeSpec } from "./types"; export interface StyledComponentProps { diff --git a/src/theme/types.ts b/src/theme/types.ts index 51dbaf7bb..03edbddac 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -1,191 +1,14 @@ import { PrimitiveColourSetOptions } from "./colour-primitive/types"; import { SemanticColourSetOptions } from "./colour-semantic/types"; -export type PrimitiveColourSet = { - "brand-10": string; - "brand-20": string; - "brand-30": string; - "brand-40": string; - "brand-50": string; - "brand-60": string; - "brand-70": string; - "brand-80": string; - "brand-90": string; - "brand-95": string; - "brand-100": string; - "primary-10": string; - "primary-20": string; - "primary-30": string; - "primary-40": string; - "primary-50": string; - "primary-60": string; - "primary-70": string; - "primary-80": string; - "primary-90": string; - "primary-95": string; - "primary-100": string; - "secondary-10": string; - "secondary-20": string; - "secondary-30": string; - "secondary-40": string; - "secondary-50": string; - "secondary-60": string; - "secondary-70": string; - "secondary-80": string; - "secondary-90": string; - "secondary-95": string; - "secondary-100": string; - "neutral-10": string; - "neutral-20": string; - "neutral-30": string; - "neutral-40": string; - "neutral-50": string; - "neutral-60": string; - "neutral-70": string; - "neutral-80": string; - "neutral-90": string; - "neutral-95": string; - "neutral-100": string; - "success-10": string; - "success-20": string; - "success-30": string; - "success-40": string; - "success-50": string; - "success-60": string; - "success-70": string; - "success-80": string; - "success-90": string; - "success-95": string; - "success-100": string; - "warning-10": string; - "warning-20": string; - "warning-30": string; - "warning-40": string; - "warning-50": string; - "warning-60": string; - "warning-70": string; - "warning-80": string; - "warning-90": string; - "warning-95": string; - "warning-100": string; - "error-10": string; - "error-20": string; - "error-30": string; - "error-40": string; - "error-50": string; - "error-60": string; - "error-70": string; - "error-80": string; - "error-90": string; - "error-95": string; - "error-100": string; - "info-10": string; - "info-20": string; - "info-30": string; - "info-40": string; - "info-50": string; - "info-60": string; - "info-70": string; - "info-80": string; - "info-90": string; - "info-95": string; - "info-100": string; - white: string; - black: string; -}; - -export type SemanticColourValue = string | ((props: any) => string); - -export type SemanticColourSet = { - text: SemanticColourValue; - "text-hover": SemanticColourValue; - "text-selected": SemanticColourValue; - "text-disabled": SemanticColourValue; - "text-success": SemanticColourValue; - "text-inverse": SemanticColourValue; - "text-subtle": SemanticColourValue; - "text-subtler": SemanticColourValue; - "text-subtlest": SemanticColourValue; - "text-disabled-subtle": SemanticColourValue; - "text-disabled-subtlest": SemanticColourValue; - "text-selected-disabled": SemanticColourValue; - "text-warning": SemanticColourValue; - "text-error": SemanticColourValue; - "text-info": SemanticColourValue; - - icon: SemanticColourValue; - "icon-hover": SemanticColourValue; - "icon-selected": SemanticColourValue; - "icon-disabled": SemanticColourValue; - "icon-success": SemanticColourValue; - "icon-inverse": SemanticColourValue; - "icon-subtle": SemanticColourValue; - "icon-strongest": SemanticColourValue; - "icon-primary": SemanticColourValue; - "icon-primary-subtle": SemanticColourValue; - "icon-primary-subtlest": SemanticColourValue; - "icon-disabled-subtle": SemanticColourValue; - "icon-selected-disabled": SemanticColourValue; - "icon-warning": SemanticColourValue; - "icon-error": SemanticColourValue; - "icon-error-strong": SemanticColourValue; - "icon-info": SemanticColourValue; - - border: SemanticColourValue; - "border-hover": SemanticColourValue; - "border-selected": SemanticColourValue; - "border-disabled": SemanticColourValue; - "border-success": SemanticColourValue; - "border-inverse": SemanticColourValue; - "border-strong": SemanticColourValue; - "border-primary": SemanticColourValue; - "border-primary-subtle": SemanticColourValue; - "border-hover-strong": SemanticColourValue; - "border-selected-subtle": SemanticColourValue; - "border-selected-subtlest": SemanticColourValue; - "border-focus": SemanticColourValue; - "border-focus-strong": SemanticColourValue; - "border-selected-disabled": SemanticColourValue; - "border-warning": SemanticColourValue; - "border-error": SemanticColourValue; - "border-error-focus": SemanticColourValue; - "border-info": SemanticColourValue; - - background: SemanticColourValue; - "background-hover": SemanticColourValue; - "background-selected": SemanticColourValue; - "background-disabled": SemanticColourValue; - "background-success": SemanticColourValue; - "background-inverse": SemanticColourValue; - "background-strong": SemanticColourValue; - "background-stronger": SemanticColourValue; - "background-hover-strong": SemanticColourValue; - "background-hover-subtle": SemanticColourValue; - "background-hover-neutral": SemanticColourValue; - "background-primary": SemanticColourValue; - "background-primary-hover": SemanticColourValue; - "background-primary-subtle": SemanticColourValue; - "background-primary-subtlest": SemanticColourValue; - "background-primary-subtlest-hover": SemanticColourValue; - "background-primary-subtlest-selected": SemanticColourValue; - "background-selected-strong": SemanticColourValue; - "background-selected-hover": SemanticColourValue; - "background-selected-disabled": SemanticColourValue; - "background-warning": SemanticColourValue; - "background-error": SemanticColourValue; - "background-info": SemanticColourValue; - "background-error-strong": SemanticColourValue; - "background-error-strong-hover": SemanticColourValue; - - "overlay-strong": SemanticColourValue; - "overlay-subtle": SemanticColourValue; - "overlay-inverse-gradient": SemanticColourValue; - - hyperlink: SemanticColourValue; - "hyperlink-inverse": SemanticColourValue; - "focus-ring": SemanticColourValue; - "focus-ring-inverse": SemanticColourValue; -}; +export type { + PrimitiveColourSet, + PrimitiveColourSetOptions, +} from "./colour-primitive/types"; +export type { + SemanticColourSet, + SemanticColourSetOptions, +} from "./colour-semantic/types"; export type ColourScheme = | "lifesg" From 0778fae487d7b1e7e692bab5d82bc040a7b326a5 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Mon, 19 Aug 2024 15:23:11 +0800 Subject: [PATCH 0361/1949] [CCUBE-1528][MAHI]Set up font and typography tokens with jest testing --- src/theme/font/helper.ts | 75 ++++++ src/theme/font/specs/font-set.ts | 49 ++++ src/theme/font/types.ts | 7 + src/theme/index.ts | 16 +- src/theme/types.ts | 120 +++++++++ src/theme/typography/helper.ts | 99 +++++++ src/theme/typography/specs/typography-set.ts | 269 +++++++++++++++++++ src/theme/typography/types.ts | 7 + tests/theme/theme-font-test.spec.tsx | 95 +++++++ 9 files changed, 736 insertions(+), 1 deletion(-) create mode 100644 src/theme/font/helper.ts create mode 100644 src/theme/font/specs/font-set.ts create mode 100644 src/theme/font/types.ts create mode 100644 src/theme/typography/helper.ts create mode 100644 src/theme/typography/specs/typography-set.ts create mode 100644 src/theme/typography/types.ts create mode 100644 tests/theme/theme-font-test.spec.tsx diff --git a/src/theme/font/helper.ts b/src/theme/font/helper.ts new file mode 100644 index 000000000..439a3c6c5 --- /dev/null +++ b/src/theme/font/helper.ts @@ -0,0 +1,75 @@ +import { StyledComponentProps, getCollection } from "../helpers"; +import { FontScheme, FontSet, ThemeCollectionSpec } from "../types"; +import { LifeSgFontSet } from "./specs/font-set"; +import { getValue } from "../helpers"; +import { FontCollectionMap } from "./types"; + +const FontSpec: ThemeCollectionSpec = { + collections: { + lifesg: LifeSgFontSet, + bookingsg: LifeSgFontSet, + rbs: LifeSgFontSet, + mylegacy: LifeSgFontSet, + ccube: LifeSgFontSet, + }, + defaultValue: "lifesg", +}; + +export const getFontValues = (key: keyof FontSet) => { + return (props: StyledComponentProps): string => { + const theme = props.theme; + const fontSet: FontSet = getCollection(FontSpec, theme["fontScheme"]); + + if (theme.overrides && theme.overrides.font) { + return getValue(fontSet, key, theme.overrides.font); + } else { + return fontSet[key]; + } + }; +}; + +export const FontValues = { + "header-size-xxl": getFontValues("header-size-xxl"), + "header-size-xl": getFontValues("header-size-xl"), + "header-size-lg": getFontValues("header-size-lg"), + "header-size-md": getFontValues("header-size-md"), + "header-size-sm": getFontValues("header-size-sm"), + "header-size-xs": getFontValues("header-size-xs"), + + "header-lh-xxl": getFontValues("header-lh-xxl"), + "header-lh-xl": getFontValues("header-lh-xl"), + "header-lh-lg": getFontValues("header-lh-lg"), + "header-lh-md": getFontValues("header-lh-md"), + "header-lh-sm": getFontValues("header-lh-sm"), + "header-lh-xs": getFontValues("header-lh-xs"), + + "header-ls-xxl": getFontValues("header-ls-xxl"), + "header-ls-xl": getFontValues("header-ls-xl"), + "header-ls-lg": getFontValues("header-ls-lg"), + "header-ls-md": getFontValues("header-ls-md"), + "header-ls-sm": getFontValues("header-ls-sm"), + "header-ls-xs": getFontValues("header-ls-xs"), + + "weight-light": getFontValues("weight-light"), + "weight-regular": getFontValues("weight-regular"), + "weight-semibold": getFontValues("weight-semibold"), + "weight-bold": getFontValues("weight-bold"), + + "body-size-baseline": getFontValues("body-size-baseline"), + "body-size-lg": getFontValues("body-size-lg"), + "body-size-md": getFontValues("body-size-md"), + "body-size-sm": getFontValues("body-size-sm"), + + "body-lh-baseline": getFontValues("body-lh-baseline"), + "body-lh-lg": getFontValues("body-lh-lg"), + "body-lh-md": getFontValues("body-lh-md"), + "body-lh-sm": getFontValues("body-lh-sm"), + + "body-ls-baseline": getFontValues("body-ls-baseline"), + "body-ls-lg": getFontValues("body-ls-lg"), + "body-ls-md": getFontValues("body-ls-md"), + "body-ls-sm": getFontValues("body-ls-sm"), + + "formlabel-size-baseline": getFontValues("formlabel-size-baseline"), + "formlabel-size-lg": getFontValues("formlabel-size-lg"), +}; diff --git a/src/theme/font/specs/font-set.ts b/src/theme/font/specs/font-set.ts new file mode 100644 index 000000000..fdf7de5df --- /dev/null +++ b/src/theme/font/specs/font-set.ts @@ -0,0 +1,49 @@ +import { FontSet } from "../../types"; + +// Pending for different font styling +export const LifeSgFontSet: FontSet = { + "header-size-xxl": "3rem", + "header-size-xl": "2.5rem", + "header-size-lg": "2rem", + "header-size-md": "1.625rem", + "header-size-sm": "1.375rem", + "header-size-xs": "1.125rem", + + "header-lh-xxl": "3.5rem", + "header-lh-xl": "3rem", + "header-lh-lg": "2.5rem", + "header-lh-md": "2.25rem", + "header-lh-sm": "1.75rem", + "header-lh-xs": "1.625rem", + + "header-ls-xxl": "-0.056rem", + "header-ls-xl": "-0.032rem", + "header-ls-lg": "-0.032rem", + "header-ls-md": "0rem", + "header-ls-sm": "0rem", + "header-ls-xs": "0rem", + + "weight-light": "300", + "weight-regular": "400", + "weight-semibold": "600", + "weight-bold": "700", + "font-family": "Open Sans", + + "body-size-baseline": "1.125rem", + "body-size-lg": "1rem", + "body-size-md": "0.875rem", + "body-size-sm": "0.75rem", + + "body-lh-baseline": "1.625rem", + "body-lh-lg": "1.5rem", + "body-lh-md": "1.6rem", + "body-lh-sm": "1.2rem", + + "body-ls-baseline": "0rem", + "body-ls-lg": "0.014rem", + "body-ls-md": "0.012rem", + "body-ls-sm": "0.012rem", + + "formlabel-size-baseline": "1rem", + "formlabel-size-lg": "1.125rem", +}; diff --git a/src/theme/font/types.ts b/src/theme/font/types.ts new file mode 100644 index 000000000..c3292d17d --- /dev/null +++ b/src/theme/font/types.ts @@ -0,0 +1,7 @@ +import { FontScheme, FontSet } from "../types"; + +export type FontCollectionMap = { + [key in FontScheme]: FontSet; +}; + +export type FontSetOptions = Partial; diff --git a/src/theme/index.ts b/src/theme/index.ts index 0a98fbfc9..2e826db88 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,29 +1,43 @@ import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; - +import { FontValues } from "./font/helper"; import { ThemeSpec } from "./types"; +import { TypographyValues } from "./typography/helper"; export const Colour = { ...ColourSemantic, Primitive: PrimitiveColour, }; +export const Font = { + ...FontValues, +}; + +export const Typo = { + ...TypographyValues, +}; + export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", + fontScheme: "lifesg", }; export const BookingSGTheme: ThemeSpec = { colourScheme: "bookingsg", + fontScheme: "bookingsg", }; export const CcubeTheme: ThemeSpec = { colourScheme: "ccube", + fontScheme: "ccube", }; export const MyLegacyTheme: ThemeSpec = { colourScheme: "mylegacy", + fontScheme: "mylegacy", }; export const RBSTheme: ThemeSpec = { colourScheme: "rbs", + fontScheme: "rbs", }; diff --git a/src/theme/types.ts b/src/theme/types.ts index 03edbddac..9b17ac864 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -1,5 +1,8 @@ +import { CSSProp } from "styled-components"; import { PrimitiveColourSetOptions } from "./colour-primitive/types"; import { SemanticColourSetOptions } from "./colour-semantic/types"; +import { FontSetOptions } from "./font/types"; +import { TypoSetOptions } from "./typography/types"; export type { PrimitiveColourSet, @@ -10,6 +13,118 @@ export type { SemanticColourSetOptions, } from "./colour-semantic/types"; +export type FontSet = { + // Header sizes + "header-size-xxl": string; + "header-size-xl": string; + "header-size-lg": string; + "header-size-md": string; + "header-size-sm": string; + "header-size-xs": string; + + // Header line heights + "header-lh-xxl": string; + "header-lh-xl": string; + "header-lh-lg": string; + "header-lh-md": string; + "header-lh-sm": string; + "header-lh-xs": string; + + // Header letter spacing + "header-ls-xxl": string; + "header-ls-xl": string; + "header-ls-lg": string; + "header-ls-md": string; + "header-ls-sm": string; + "header-ls-xs": string; + + // Font weights + "weight-light": string; + "weight-regular": string; + "weight-semibold": string; + "weight-bold": string; + + // Font family + "font-family": string; + + // Body sizes + "body-size-baseline": string; + "body-size-lg": string; + "body-size-md": string; + "body-size-sm": string; + + // Body line heights + "body-lh-baseline": string; + "body-lh-lg": string; + "body-lh-md": string; + "body-lh-sm": string; + + // Body letter spacing + "body-ls-baseline": string; + "body-ls-lg": string; + "body-ls-md": string; + "body-ls-sm": string; + + // Form label sizes + "formlabel-size-baseline": string; + "formlabel-size-lg": string; +}; + +export type TypographySet = { + "header-xxl-light": CSSProp | string; + "header-xxl-regular": CSSProp | string; + "header-xxl-semibold": CSSProp | string; + "header-xxl-bold": CSSProp | string; + + "header-xl-light": CSSProp | string; + "header-xl-regular": CSSProp | string; + "header-xl-semibold": CSSProp | string; + "header-xl-bold": CSSProp | string; + + "header-lg-light": CSSProp | string; + "header-lg-regular": CSSProp | string; + "header-lg-semibold": CSSProp | string; + "header-lg-bold": CSSProp | string; + + "header-md-light": CSSProp | string; + "header-md-regular": CSSProp | string; + "header-md-semibold": CSSProp | string; + "header-md-bold": CSSProp | string; + + "header-sm-light": CSSProp | string; + "header-sm-regular": CSSProp | string; + "header-sm-semibold": CSSProp | string; + "header-sm-bold": CSSProp | string; + + "header-xs-light": CSSProp | string; + "header-xs-regular": CSSProp | string; + "header-xs-semibold": CSSProp | string; + "header-xs-bold": CSSProp | string; + + "body-baseline-light": CSSProp | string; + "body-baseline-regular": CSSProp | string; + "body-baseline-semibold": CSSProp | string; + "body-baseline-bold": CSSProp | string; + + "body-lg-light": CSSProp | string; + "body-lg-regular": CSSProp | string; + "body-lg-semibold": CSSProp | string; + "body-lg-bold": CSSProp | string; + + "body-md-light": CSSProp | string; + "body-md-regular": CSSProp | string; + "body-md-semibold": CSSProp | string; + "body-md-bold": CSSProp | string; + + "body-sm-light": CSSProp | string; + "body-sm-regular": CSSProp | string; + "body-sm-semibold": CSSProp | string; + "body-sm-bold": CSSProp | string; + + "formlabel-baseline-semibold": CSSProp | string; + "formlabel-lg-semibold": CSSProp | string; +}; + export type ColourScheme = | "lifesg" | "bookingsg" @@ -17,13 +132,18 @@ export type ColourScheme = | "mylegacy" | "ccube"; +export type FontScheme = "lifesg" | "bookingsg" | "rbs" | "mylegacy" | "ccube"; + export interface ThemeSpecOptions { primitiveColour?: PrimitiveColourSetOptions | undefined; semanticColour?: SemanticColourSetOptions | undefined; + font?: FontSetOptions | undefined; + typography?: TypoSetOptions | undefined; } export interface ThemeSpec { colourScheme: ColourScheme; + fontScheme?: FontScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/src/theme/typography/helper.ts b/src/theme/typography/helper.ts new file mode 100644 index 000000000..cf6082902 --- /dev/null +++ b/src/theme/typography/helper.ts @@ -0,0 +1,99 @@ +import { css } from "styled-components"; +import { StyledComponentProps, getCollection, getValue } from "../helpers"; +import { FontScheme, ThemeCollectionSpec, TypographySet } from "../types"; +import { LifeSgTypographySet } from "./specs/typography-set"; +import { TypoGraphyCollectionMap } from "./types"; + +const TypographySpec: ThemeCollectionSpec = + { + collections: { + lifesg: LifeSgTypographySet, + bookingsg: LifeSgTypographySet, + rbs: LifeSgTypographySet, + mylegacy: LifeSgTypographySet, + ccube: LifeSgTypographySet, + }, + defaultValue: "lifesg", + }; + +export const getTypography = (key: keyof TypographySet) => { + return (props: StyledComponentProps) => { + const theme = props.theme; + const typographySet: TypographySet = getCollection( + TypographySpec, + theme["fontScheme"] + ); + + // Check for an override + const typographyValue = + theme.overrides && theme.overrides.typography + ? getValue(typographySet, key, theme.overrides.typography) + : typographySet[key]; + + // If function, resolve with props + if (typeof typographyValue === "function") { + return css` + ${(typographyValue as (props: any) => string)(props)} + `; + } + + return css` + ${typographyValue} + `; + }; +}; + +export const TypographyValues = { + "header-xxl-light": getTypography("header-xxl-light"), + "header-xxl-regular": getTypography("header-xxl-regular"), + "header-xxl-semibold": getTypography("header-xxl-semibold"), + "header-xxl-bold": getTypography("header-xxl-bold"), + + "header-xl-light": getTypography("header-xl-light"), + "header-xl-regular": getTypography("header-xl-regular"), + "header-xl-semibold": getTypography("header-xl-semibold"), + "header-xl-bold": getTypography("header-xl-bold"), + + "header-lg-light": getTypography("header-lg-light"), + "header-lg-regular": getTypography("header-lg-regular"), + "header-lg-semibold": getTypography("header-lg-semibold"), + "header-lg-bold": getTypography("header-lg-bold"), + + "header-md-light": getTypography("header-md-light"), + "header-md-regular": getTypography("header-md-regular"), + "header-md-semibold": getTypography("header-md-semibold"), + "header-md-bold": getTypography("header-md-bold"), + + "header-sm-light": getTypography("header-sm-light"), + "header-sm-regular": getTypography("header-sm-regular"), + "header-sm-semibold": getTypography("header-sm-semibold"), + "header-sm-bold": getTypography("header-sm-bold"), + + "header-xs-light": getTypography("header-xs-light"), + "header-xs-regular": getTypography("header-xs-regular"), + "header-xs-semibold": getTypography("header-xs-semibold"), + "header-xs-bold": getTypography("header-xs-bold"), + + "body-baseline-light": getTypography("body-baseline-light"), + "body-baseline-regular": getTypography("body-baseline-regular"), + "body-baseline-semibold": getTypography("body-baseline-semibold"), + "body-baseline-bold": getTypography("body-baseline-bold"), + + "body-lg-light": getTypography("body-lg-light"), + "body-lg-regular": getTypography("body-lg-regular"), + "body-lg-semibold": getTypography("body-lg-semibold"), + "body-lg-bold": getTypography("body-lg-bold"), + + "body-md-light": getTypography("body-md-light"), + "body-md-regular": getTypography("body-md-regular"), + "body-md-semibold": getTypography("body-md-semibold"), + "body-md-bold": getTypography("body-md-bold"), + + "body-sm-light": getTypography("body-sm-light"), + "body-sm-regular": getTypography("body-sm-regular"), + "body-sm-semibold": getTypography("body-sm-semibold"), + "body-sm-bold": getTypography("body-sm-bold"), + + "formlabel-baseline-semibold": getTypography("formlabel-baseline-semibold"), + "formlabel-lg-semibold": getTypography("formlabel-lg-semibold"), +}; diff --git a/src/theme/typography/specs/typography-set.ts b/src/theme/typography/specs/typography-set.ts new file mode 100644 index 000000000..381c163fb --- /dev/null +++ b/src/theme/typography/specs/typography-set.ts @@ -0,0 +1,269 @@ +import { css } from "styled-components"; +import { getFontValues } from "../../font/helper"; +import { TypographySet } from "../../types"; + +export const LifeSgTypographySet: TypographySet = { + "header-xxl-light": css` + font-size: ${getFontValues("header-size-xxl")}; + font-weight: ${getFontValues("weight-light")}; + line-height: ${getFontValues("header-lh-xxl")}; + letter-spacing: ${getFontValues("header-ls-xxl")}; + `, + "header-xxl-regular": css` + font-size: ${getFontValues("header-size-xxl")}; + font-weight: ${getFontValues("weight-regular")}; + line-height: ${getFontValues("header-lh-xxl")}; + letter-spacing: ${getFontValues("header-ls-xxl")}; + `, + "header-xxl-semibold": css` + font-size: ${getFontValues("header-size-xxl")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("header-lh-xxl")}; + letter-spacing: ${getFontValues("header-ls-xxl")}; + `, + "header-xxl-bold": css` + font-size: ${getFontValues("header-size-xxl")}; + font-weight: ${getFontValues("weight-bold")}; + line-height: ${getFontValues("header-lh-xxl")}; + letter-spacing: ${getFontValues("header-ls-xxl")}; + `, + + "header-xl-light": css` + font-size: ${getFontValues("header-size-xl")}; + font-weight: ${getFontValues("weight-light")}; + line-height: ${getFontValues("header-lh-xl")}; + letter-spacing: ${getFontValues("header-ls-xl")}; + `, + "header-xl-regular": css` + font-size: ${getFontValues("header-size-xl")}; + font-weight: ${getFontValues("weight-regular")}; + line-height: ${getFontValues("header-lh-xl")}; + letter-spacing: ${getFontValues("header-ls-xl")}; + `, + "header-xl-semibold": css` + font-size: ${getFontValues("header-size-xl")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("header-lh-xl")}; + letter-spacing: ${getFontValues("header-ls-xl")}; + `, + "header-xl-bold": css` + font-size: ${getFontValues("header-size-xl")}; + font-weight: ${getFontValues("weight-bold")}; + line-height: ${getFontValues("header-lh-xl")}; + letter-spacing: ${getFontValues("header-ls-xl")}; + `, + + "header-lg-light": css` + font-size: ${getFontValues("header-size-lg")}; + font-weight: ${getFontValues("weight-light")}; + line-height: ${getFontValues("header-lh-lg")}; + letter-spacing: ${getFontValues("header-ls-lg")}; + `, + "header-lg-regular": css` + font-size: ${getFontValues("header-size-lg")}; + font-weight: ${getFontValues("weight-regular")}; + line-height: ${getFontValues("header-lh-lg")}; + letter-spacing: ${getFontValues("header-ls-lg")}; + `, + "header-lg-semibold": css` + font-size: ${getFontValues("header-size-lg")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("header-lh-lg")}; + letter-spacing: ${getFontValues("header-ls-lg")}; + `, + "header-lg-bold": css` + font-size: ${getFontValues("header-size-lg")}; + font-weight: ${getFontValues("weight-bold")}; + line-height: ${getFontValues("header-lh-lg")}; + letter-spacing: ${getFontValues("header-ls-lg")}; + `, + + "header-md-light": css` + font-size: ${getFontValues("header-size-md")}; + font-weight: ${getFontValues("weight-light")}; + line-height: ${getFontValues("header-lh-md")}; + letter-spacing: ${getFontValues("header-ls-md")}; + `, + "header-md-regular": css` + font-size: ${getFontValues("header-size-md")}; + font-weight: ${getFontValues("weight-regular")}; + line-height: ${getFontValues("header-lh-md")}; + letter-spacing: ${getFontValues("header-ls-md")}; + `, + "header-md-semibold": css` + font-size: ${getFontValues("header-size-md")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("header-lh-md")}; + letter-spacing: ${getFontValues("header-ls-md")}; + `, + "header-md-bold": css` + font-size: ${getFontValues("header-size-md")}; + font-weight: ${getFontValues("weight-bold")}; + line-height: ${getFontValues("header-lh-md")}; + letter-spacing: ${getFontValues("header-ls-md")}; + `, + + "header-sm-light": css` + font-size: ${getFontValues("header-size-sm")}; + font-weight: ${getFontValues("weight-light")}; + line-height: ${getFontValues("header-lh-sm")}; + letter-spacing: ${getFontValues("header-ls-sm")}; + `, + "header-sm-regular": css` + font-size: ${getFontValues("header-size-sm")}; + font-weight: ${getFontValues("weight-regular")}; + line-height: ${getFontValues("header-lh-sm")}; + letter-spacing: ${getFontValues("header-ls-sm")}; + `, + "header-sm-semibold": css` + font-size: ${getFontValues("header-size-sm")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("header-lh-sm")}; + letter-spacing: ${getFontValues("header-ls-sm")}; + `, + "header-sm-bold": css` + font-size: ${getFontValues("header-size-sm")}; + font-weight: ${getFontValues("weight-bold")}; + line-height: ${getFontValues("header-lh-sm")}; + letter-spacing: ${getFontValues("header-ls-sm")}; + `, + + "header-xs-light": css` + font-size: ${getFontValues("header-size-xs")}; + font-weight: ${getFontValues("weight-light")}; + line-height: ${getFontValues("header-lh-xs")}; + letter-spacing: ${getFontValues("header-ls-xs")}; + `, + "header-xs-regular": css` + font-size: ${getFontValues("header-size-xs")}; + font-weight: ${getFontValues("weight-regular")}; + line-height: ${getFontValues("header-lh-xs")}; + letter-spacing: ${getFontValues("header-ls-xs")}; + `, + "header-xs-semibold": css` + font-size: ${getFontValues("header-size-xs")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("header-lh-xs")}; + letter-spacing: ${getFontValues("header-ls-xs")}; + `, + "header-xs-bold": css` + font-size: ${getFontValues("header-size-xs")}; + font-weight: ${getFontValues("weight-bold")}; + line-height: ${getFontValues("header-lh-xs")}; + letter-spacing: ${getFontValues("header-ls-xs")}; + `, + + "body-baseline-light": css` + font-size: ${getFontValues("body-size-baseline")}; + font-weight: ${getFontValues("weight-light")}; + line-height: ${getFontValues("body-lh-baseline")}; + letter-spacing: ${getFontValues("body-ls-baseline")}; + `, + "body-baseline-regular": css` + font-size: ${getFontValues("body-size-baseline")}; + font-weight: ${getFontValues("weight-regular")}; + line-height: ${getFontValues("body-lh-baseline")}; + letter-spacing: ${getFontValues("body-ls-baseline")}; + `, + "body-baseline-semibold": css` + font-size: ${getFontValues("body-size-baseline")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("body-lh-baseline")}; + letter-spacing: ${getFontValues("body-ls-baseline")}; + `, + "body-baseline-bold": css` + font-size: ${getFontValues("body-size-baseline")}; + font-weight: ${getFontValues("weight-bold")}; + line-height: ${getFontValues("body-lh-baseline")}; + letter-spacing: ${getFontValues("body-ls-baseline")}; + `, + + "body-lg-light": css` + font-size: ${getFontValues("body-size-lg")}; + font-weight: ${getFontValues("weight-light")}; + line-height: ${getFontValues("body-lh-lg")}; + letter-spacing: ${getFontValues("body-ls-lg")}; + `, + "body-lg-regular": css` + font-size: ${getFontValues("body-size-lg")}; + font-weight: ${getFontValues("weight-regular")}; + line-height: ${getFontValues("body-lh-lg")}; + letter-spacing: ${getFontValues("body-ls-lg")}; + `, + "body-lg-semibold": css` + font-size: ${getFontValues("body-size-lg")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("body-lh-lg")}; + letter-spacing: ${getFontValues("body-ls-lg")}; + `, + "body-lg-bold": css` + font-size: ${getFontValues("body-size-lg")}; + font-weight: ${getFontValues("weight-bold")}; + line-height: ${getFontValues("body-lh-lg")}; + letter-spacing: ${getFontValues("body-ls-lg")}; + `, + + "body-md-light": css` + font-size: ${getFontValues("body-size-md")}; + font-weight: ${getFontValues("weight-light")}; + line-height: ${getFontValues("body-lh-md")}; + letter-spacing: ${getFontValues("body-ls-md")}; + `, + "body-md-regular": css` + font-size: ${getFontValues("body-size-md")}; + font-weight: ${getFontValues("weight-regular")}; + line-height: ${getFontValues("body-lh-md")}; + letter-spacing: ${getFontValues("body-ls-md")}; + `, + "body-md-semibold": css` + font-size: ${getFontValues("body-size-md")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("body-lh-md")}; + letter-spacing: ${getFontValues("body-ls-md")}; + `, + "body-md-bold": css` + font-size: ${getFontValues("body-size-md")}; + font-weight: ${getFontValues("weight-bold")}; + line-height: ${getFontValues("body-lh-md")}; + letter-spacing: ${getFontValues("body-ls-md")}; + `, + + "body-sm-light": css` + font-size: ${getFontValues("body-size-sm")}; + font-weight: ${getFontValues("weight-light")}; + line-height: ${getFontValues("body-lh-sm")}; + letter-spacing: ${getFontValues("body-ls-sm")}; + `, + "body-sm-regular": css` + font-size: ${getFontValues("body-size-sm")}; + font-weight: ${getFontValues("weight-regular")}; + line-height: ${getFontValues("body-lh-sm")}; + letter-spacing: ${getFontValues("body-ls-sm")}; + `, + "body-sm-semibold": css` + font-size: ${getFontValues("body-size-sm")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("body-lh-sm")}; + letter-spacing: ${getFontValues("body-ls-sm")}; + `, + "body-sm-bold": css` + font-size: ${getFontValues("body-size-sm")}; + font-weight: ${getFontValues("weight-bold")}; + line-height: ${getFontValues("body-lh-sm")}; + letter-spacing: ${getFontValues("body-ls-sm")}; + `, + + "formlabel-baseline-semibold": css` + font-size: ${getFontValues("formlabel-size-baseline")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("formlabel-size-baseline")}; + letter-spacing: ${getFontValues("body-ls-baseline")}; + `, + + "formlabel-lg-semibold": css` + font-size: ${getFontValues("formlabel-size-lg")}; + font-weight: ${getFontValues("weight-semibold")}; + line-height: ${getFontValues("formlabel-size-lg")}; + letter-spacing: ${getFontValues("body-ls-lg")}; + `, +}; diff --git a/src/theme/typography/types.ts b/src/theme/typography/types.ts new file mode 100644 index 000000000..a32e261f6 --- /dev/null +++ b/src/theme/typography/types.ts @@ -0,0 +1,7 @@ +import { FontScheme, TypographySet } from "../types"; + +export type TypoGraphyCollectionMap = { + [key in FontScheme]: TypographySet; +}; + +export type TypoSetOptions = Partial; diff --git a/tests/theme/theme-font-test.spec.tsx b/tests/theme/theme-font-test.spec.tsx new file mode 100644 index 000000000..51f0d90f8 --- /dev/null +++ b/tests/theme/theme-font-test.spec.tsx @@ -0,0 +1,95 @@ +import styled, { ThemeProvider } from "styled-components"; +import { render } from "@testing-library/react"; +import { Font, Typo } from "../../src/theme"; +import { ThemeSpec } from "../../src/theme/types"; +import "jest-styled-components"; + +const StyledTypographyTest = styled.div` + ${Typo["header-xxl-bold"]}; +`; + +const StyledFontSet = styled.div` + font-size: ${Font["header-size-xs"]}; +`; + +// "header-size-xs": "1.125rem", + +describe("StyledTypographyTest", () => { + it("should apply correct typography styles based on the theme", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + }; + + const fontSize = "3rem"; + const fontWeight = "700"; + const lineHeight = "3.5rem"; + const letterSpacing = "-0.056rem"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule("font-size", fontSize); + expect(container.firstChild).toHaveStyleRule("font-weight", fontWeight); + expect(container.firstChild).toHaveStyleRule("line-height", lineHeight); + expect(container.firstChild).toHaveStyleRule( + "letter-spacing", + letterSpacing + ); + }); + + it("should apply correct typography styles based on the overridden theme", () => { + const overrideTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + overrides: { + typography: { + "header-xxl-bold": { + "font-size": "4rem", + "font-weight": "800", + "line-height": "4.5rem", + "letter-spacing": "-0.1rem", + }, + }, + }, + }; + + const fontSize = "4rem"; + const fontWeight = "800"; + const lineHeight = "4.5rem"; + const letterSpacing = "-0.1rem"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule("font-size", fontSize); + expect(container.firstChild).toHaveStyleRule("font-weight", fontWeight); + expect(container.firstChild).toHaveStyleRule("line-height", lineHeight); + expect(container.firstChild).toHaveStyleRule( + "letter-spacing", + letterSpacing + ); + }); + + it("should apply correct typography styles based on the overridden theme", () => { + const overrideTheme: ThemeSpec = { + colourScheme: "lifesg", + }; + + const fontSize = "1.125rem"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule("font-size", fontSize); + }); +}); From 2028a97d9e779dcbfdf578acc110e47091215509 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 20 Aug 2024 09:40:10 +0800 Subject: [PATCH 0362/1949] [CCUBE-1524][MAHI]Refactored typography sets with a helper function --- src/theme/typography/helper.ts | 20 +- src/theme/typography/specs/typography-set.ts | 518 +++++++++---------- 2 files changed, 272 insertions(+), 266 deletions(-) diff --git a/src/theme/typography/helper.ts b/src/theme/typography/helper.ts index cf6082902..05dab0a8a 100644 --- a/src/theme/typography/helper.ts +++ b/src/theme/typography/helper.ts @@ -1,8 +1,14 @@ import { css } from "styled-components"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; -import { FontScheme, ThemeCollectionSpec, TypographySet } from "../types"; +import { + FontScheme, + FontSet, + ThemeCollectionSpec, + TypographySet, +} from "../types"; import { LifeSgTypographySet } from "./specs/typography-set"; import { TypoGraphyCollectionMap } from "./types"; +import { getFontValues } from "../font/helper"; const TypographySpec: ThemeCollectionSpec = { @@ -43,6 +49,18 @@ export const getTypography = (key: keyof TypographySet) => { }; }; +export const generateTypographyCSS = ( + fontsizeKey: keyof FontSet, + fontweightKey: keyof FontSet, + lineHeightKey: keyof FontSet, + letterSpacingKey: keyof FontSet +) => css` + font-size: ${getFontValues(fontsizeKey)}; + font-weight: ${getFontValues(fontweightKey)}; + line-height: ${getFontValues(lineHeightKey)}; + letter-spacing: ${getFontValues(letterSpacingKey)}; +`; + export const TypographyValues = { "header-xxl-light": getTypography("header-xxl-light"), "header-xxl-regular": getTypography("header-xxl-regular"), diff --git a/src/theme/typography/specs/typography-set.ts b/src/theme/typography/specs/typography-set.ts index 381c163fb..054e4d46c 100644 --- a/src/theme/typography/specs/typography-set.ts +++ b/src/theme/typography/specs/typography-set.ts @@ -1,269 +1,257 @@ -import { css } from "styled-components"; -import { getFontValues } from "../../font/helper"; import { TypographySet } from "../../types"; +import { generateTypographyCSS } from "../helper"; export const LifeSgTypographySet: TypographySet = { - "header-xxl-light": css` - font-size: ${getFontValues("header-size-xxl")}; - font-weight: ${getFontValues("weight-light")}; - line-height: ${getFontValues("header-lh-xxl")}; - letter-spacing: ${getFontValues("header-ls-xxl")}; - `, - "header-xxl-regular": css` - font-size: ${getFontValues("header-size-xxl")}; - font-weight: ${getFontValues("weight-regular")}; - line-height: ${getFontValues("header-lh-xxl")}; - letter-spacing: ${getFontValues("header-ls-xxl")}; - `, - "header-xxl-semibold": css` - font-size: ${getFontValues("header-size-xxl")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("header-lh-xxl")}; - letter-spacing: ${getFontValues("header-ls-xxl")}; - `, - "header-xxl-bold": css` - font-size: ${getFontValues("header-size-xxl")}; - font-weight: ${getFontValues("weight-bold")}; - line-height: ${getFontValues("header-lh-xxl")}; - letter-spacing: ${getFontValues("header-ls-xxl")}; - `, - - "header-xl-light": css` - font-size: ${getFontValues("header-size-xl")}; - font-weight: ${getFontValues("weight-light")}; - line-height: ${getFontValues("header-lh-xl")}; - letter-spacing: ${getFontValues("header-ls-xl")}; - `, - "header-xl-regular": css` - font-size: ${getFontValues("header-size-xl")}; - font-weight: ${getFontValues("weight-regular")}; - line-height: ${getFontValues("header-lh-xl")}; - letter-spacing: ${getFontValues("header-ls-xl")}; - `, - "header-xl-semibold": css` - font-size: ${getFontValues("header-size-xl")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("header-lh-xl")}; - letter-spacing: ${getFontValues("header-ls-xl")}; - `, - "header-xl-bold": css` - font-size: ${getFontValues("header-size-xl")}; - font-weight: ${getFontValues("weight-bold")}; - line-height: ${getFontValues("header-lh-xl")}; - letter-spacing: ${getFontValues("header-ls-xl")}; - `, - - "header-lg-light": css` - font-size: ${getFontValues("header-size-lg")}; - font-weight: ${getFontValues("weight-light")}; - line-height: ${getFontValues("header-lh-lg")}; - letter-spacing: ${getFontValues("header-ls-lg")}; - `, - "header-lg-regular": css` - font-size: ${getFontValues("header-size-lg")}; - font-weight: ${getFontValues("weight-regular")}; - line-height: ${getFontValues("header-lh-lg")}; - letter-spacing: ${getFontValues("header-ls-lg")}; - `, - "header-lg-semibold": css` - font-size: ${getFontValues("header-size-lg")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("header-lh-lg")}; - letter-spacing: ${getFontValues("header-ls-lg")}; - `, - "header-lg-bold": css` - font-size: ${getFontValues("header-size-lg")}; - font-weight: ${getFontValues("weight-bold")}; - line-height: ${getFontValues("header-lh-lg")}; - letter-spacing: ${getFontValues("header-ls-lg")}; - `, - - "header-md-light": css` - font-size: ${getFontValues("header-size-md")}; - font-weight: ${getFontValues("weight-light")}; - line-height: ${getFontValues("header-lh-md")}; - letter-spacing: ${getFontValues("header-ls-md")}; - `, - "header-md-regular": css` - font-size: ${getFontValues("header-size-md")}; - font-weight: ${getFontValues("weight-regular")}; - line-height: ${getFontValues("header-lh-md")}; - letter-spacing: ${getFontValues("header-ls-md")}; - `, - "header-md-semibold": css` - font-size: ${getFontValues("header-size-md")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("header-lh-md")}; - letter-spacing: ${getFontValues("header-ls-md")}; - `, - "header-md-bold": css` - font-size: ${getFontValues("header-size-md")}; - font-weight: ${getFontValues("weight-bold")}; - line-height: ${getFontValues("header-lh-md")}; - letter-spacing: ${getFontValues("header-ls-md")}; - `, - - "header-sm-light": css` - font-size: ${getFontValues("header-size-sm")}; - font-weight: ${getFontValues("weight-light")}; - line-height: ${getFontValues("header-lh-sm")}; - letter-spacing: ${getFontValues("header-ls-sm")}; - `, - "header-sm-regular": css` - font-size: ${getFontValues("header-size-sm")}; - font-weight: ${getFontValues("weight-regular")}; - line-height: ${getFontValues("header-lh-sm")}; - letter-spacing: ${getFontValues("header-ls-sm")}; - `, - "header-sm-semibold": css` - font-size: ${getFontValues("header-size-sm")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("header-lh-sm")}; - letter-spacing: ${getFontValues("header-ls-sm")}; - `, - "header-sm-bold": css` - font-size: ${getFontValues("header-size-sm")}; - font-weight: ${getFontValues("weight-bold")}; - line-height: ${getFontValues("header-lh-sm")}; - letter-spacing: ${getFontValues("header-ls-sm")}; - `, - - "header-xs-light": css` - font-size: ${getFontValues("header-size-xs")}; - font-weight: ${getFontValues("weight-light")}; - line-height: ${getFontValues("header-lh-xs")}; - letter-spacing: ${getFontValues("header-ls-xs")}; - `, - "header-xs-regular": css` - font-size: ${getFontValues("header-size-xs")}; - font-weight: ${getFontValues("weight-regular")}; - line-height: ${getFontValues("header-lh-xs")}; - letter-spacing: ${getFontValues("header-ls-xs")}; - `, - "header-xs-semibold": css` - font-size: ${getFontValues("header-size-xs")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("header-lh-xs")}; - letter-spacing: ${getFontValues("header-ls-xs")}; - `, - "header-xs-bold": css` - font-size: ${getFontValues("header-size-xs")}; - font-weight: ${getFontValues("weight-bold")}; - line-height: ${getFontValues("header-lh-xs")}; - letter-spacing: ${getFontValues("header-ls-xs")}; - `, - - "body-baseline-light": css` - font-size: ${getFontValues("body-size-baseline")}; - font-weight: ${getFontValues("weight-light")}; - line-height: ${getFontValues("body-lh-baseline")}; - letter-spacing: ${getFontValues("body-ls-baseline")}; - `, - "body-baseline-regular": css` - font-size: ${getFontValues("body-size-baseline")}; - font-weight: ${getFontValues("weight-regular")}; - line-height: ${getFontValues("body-lh-baseline")}; - letter-spacing: ${getFontValues("body-ls-baseline")}; - `, - "body-baseline-semibold": css` - font-size: ${getFontValues("body-size-baseline")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("body-lh-baseline")}; - letter-spacing: ${getFontValues("body-ls-baseline")}; - `, - "body-baseline-bold": css` - font-size: ${getFontValues("body-size-baseline")}; - font-weight: ${getFontValues("weight-bold")}; - line-height: ${getFontValues("body-lh-baseline")}; - letter-spacing: ${getFontValues("body-ls-baseline")}; - `, - - "body-lg-light": css` - font-size: ${getFontValues("body-size-lg")}; - font-weight: ${getFontValues("weight-light")}; - line-height: ${getFontValues("body-lh-lg")}; - letter-spacing: ${getFontValues("body-ls-lg")}; - `, - "body-lg-regular": css` - font-size: ${getFontValues("body-size-lg")}; - font-weight: ${getFontValues("weight-regular")}; - line-height: ${getFontValues("body-lh-lg")}; - letter-spacing: ${getFontValues("body-ls-lg")}; - `, - "body-lg-semibold": css` - font-size: ${getFontValues("body-size-lg")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("body-lh-lg")}; - letter-spacing: ${getFontValues("body-ls-lg")}; - `, - "body-lg-bold": css` - font-size: ${getFontValues("body-size-lg")}; - font-weight: ${getFontValues("weight-bold")}; - line-height: ${getFontValues("body-lh-lg")}; - letter-spacing: ${getFontValues("body-ls-lg")}; - `, - - "body-md-light": css` - font-size: ${getFontValues("body-size-md")}; - font-weight: ${getFontValues("weight-light")}; - line-height: ${getFontValues("body-lh-md")}; - letter-spacing: ${getFontValues("body-ls-md")}; - `, - "body-md-regular": css` - font-size: ${getFontValues("body-size-md")}; - font-weight: ${getFontValues("weight-regular")}; - line-height: ${getFontValues("body-lh-md")}; - letter-spacing: ${getFontValues("body-ls-md")}; - `, - "body-md-semibold": css` - font-size: ${getFontValues("body-size-md")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("body-lh-md")}; - letter-spacing: ${getFontValues("body-ls-md")}; - `, - "body-md-bold": css` - font-size: ${getFontValues("body-size-md")}; - font-weight: ${getFontValues("weight-bold")}; - line-height: ${getFontValues("body-lh-md")}; - letter-spacing: ${getFontValues("body-ls-md")}; - `, - - "body-sm-light": css` - font-size: ${getFontValues("body-size-sm")}; - font-weight: ${getFontValues("weight-light")}; - line-height: ${getFontValues("body-lh-sm")}; - letter-spacing: ${getFontValues("body-ls-sm")}; - `, - "body-sm-regular": css` - font-size: ${getFontValues("body-size-sm")}; - font-weight: ${getFontValues("weight-regular")}; - line-height: ${getFontValues("body-lh-sm")}; - letter-spacing: ${getFontValues("body-ls-sm")}; - `, - "body-sm-semibold": css` - font-size: ${getFontValues("body-size-sm")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("body-lh-sm")}; - letter-spacing: ${getFontValues("body-ls-sm")}; - `, - "body-sm-bold": css` - font-size: ${getFontValues("body-size-sm")}; - font-weight: ${getFontValues("weight-bold")}; - line-height: ${getFontValues("body-lh-sm")}; - letter-spacing: ${getFontValues("body-ls-sm")}; - `, - - "formlabel-baseline-semibold": css` - font-size: ${getFontValues("formlabel-size-baseline")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("formlabel-size-baseline")}; - letter-spacing: ${getFontValues("body-ls-baseline")}; - `, - - "formlabel-lg-semibold": css` - font-size: ${getFontValues("formlabel-size-lg")}; - font-weight: ${getFontValues("weight-semibold")}; - line-height: ${getFontValues("formlabel-size-lg")}; - letter-spacing: ${getFontValues("body-ls-lg")}; - `, + "header-xxl-light": generateTypographyCSS( + "header-size-xxl", + "weight-light", + "header-lh-xxl", + "header-ls-xxl" + ), + "header-xxl-regular": generateTypographyCSS( + "header-size-xxl", + "weight-regular", + "header-lh-xxl", + "header-ls-xxl" + ), + "header-xxl-semibold": generateTypographyCSS( + "header-size-xxl", + "weight-semibold", + "header-lh-xxl", + "header-ls-xxl" + ), + "header-xxl-bold": generateTypographyCSS( + "header-size-xxl", + "weight-bold", + "header-lh-xxl", + "header-ls-xxl" + ), + "header-xl-light": generateTypographyCSS( + "header-size-xl", + "weight-light", + "header-lh-xl", + "header-ls-xl" + ), + "header-xl-regular": generateTypographyCSS( + "header-size-xl", + "weight-regular", + "header-lh-xl", + "header-ls-xl" + ), + "header-xl-semibold": generateTypographyCSS( + "header-size-xl", + "weight-semibold", + "header-lh-xl", + "header-ls-xl" + ), + "header-xl-bold": generateTypographyCSS( + "header-size-xl", + "weight-bold", + "header-lh-xl", + "header-ls-xl" + ), + "header-lg-light": generateTypographyCSS( + "header-size-lg", + "weight-light", + "header-lh-lg", + "header-ls-lg" + ), + "header-lg-regular": generateTypographyCSS( + "header-size-lg", + "weight-regular", + "header-lh-lg", + "header-ls-lg" + ), + "header-lg-semibold": generateTypographyCSS( + "header-size-lg", + "weight-semibold", + "header-lh-lg", + "header-ls-lg" + ), + "header-lg-bold": generateTypographyCSS( + "header-size-lg", + "weight-bold", + "header-lh-lg", + "header-ls-lg" + ), + "header-md-light": generateTypographyCSS( + "header-size-md", + "weight-light", + "header-lh-md", + "header-ls-md" + ), + "header-md-regular": generateTypographyCSS( + "header-size-md", + "weight-regular", + "header-lh-md", + "header-ls-md" + ), + "header-md-semibold": generateTypographyCSS( + "header-size-md", + "weight-semibold", + "header-lh-md", + "header-ls-md" + ), + "header-md-bold": generateTypographyCSS( + "header-size-md", + "weight-bold", + "header-lh-md", + "header-ls-md" + ), + "header-sm-light": generateTypographyCSS( + "header-size-sm", + "weight-light", + "header-lh-sm", + "header-ls-sm" + ), + "header-sm-regular": generateTypographyCSS( + "header-size-sm", + "weight-regular", + "header-lh-sm", + "header-ls-sm" + ), + "header-sm-semibold": generateTypographyCSS( + "header-size-sm", + "weight-semibold", + "header-lh-sm", + "header-ls-sm" + ), + "header-sm-bold": generateTypographyCSS( + "header-size-sm", + "weight-bold", + "header-lh-sm", + "header-ls-sm" + ), + "header-xs-light": generateTypographyCSS( + "header-size-xs", + "weight-light", + "header-lh-xs", + "header-ls-xs" + ), + "header-xs-regular": generateTypographyCSS( + "header-size-xs", + "weight-regular", + "header-lh-xs", + "header-ls-xs" + ), + "header-xs-semibold": generateTypographyCSS( + "header-size-xs", + "weight-semibold", + "header-lh-xs", + "header-ls-xs" + ), + "header-xs-bold": generateTypographyCSS( + "header-size-xs", + "weight-bold", + "header-lh-xs", + "header-ls-xs" + ), + "body-baseline-light": generateTypographyCSS( + "body-size-baseline", + "weight-light", + "body-lh-baseline", + "body-ls-baseline" + ), + "body-baseline-regular": generateTypographyCSS( + "body-size-baseline", + "weight-regular", + "body-lh-baseline", + "body-ls-baseline" + ), + "body-baseline-semibold": generateTypographyCSS( + "body-size-baseline", + "weight-semibold", + "body-lh-baseline", + "body-ls-baseline" + ), + "body-baseline-bold": generateTypographyCSS( + "body-size-baseline", + "weight-bold", + "body-lh-baseline", + "body-ls-baseline" + ), + "body-lg-light": generateTypographyCSS( + "body-size-lg", + "weight-light", + "body-lh-lg", + "body-ls-lg" + ), + "body-lg-regular": generateTypographyCSS( + "body-size-lg", + "weight-regular", + "body-lh-lg", + "body-ls-lg" + ), + "body-lg-semibold": generateTypographyCSS( + "body-size-lg", + "weight-semibold", + "body-lh-lg", + "body-ls-lg" + ), + "body-lg-bold": generateTypographyCSS( + "body-size-lg", + "weight-bold", + "body-lh-lg", + "body-ls-lg" + ), + "body-md-light": generateTypographyCSS( + "body-size-md", + "weight-light", + "body-lh-md", + "body-ls-md" + ), + "body-md-regular": generateTypographyCSS( + "body-size-md", + "weight-regular", + "body-lh-md", + "body-ls-md" + ), + "body-md-semibold": generateTypographyCSS( + "body-size-md", + "weight-semibold", + "body-lh-md", + "body-ls-md" + ), + "body-md-bold": generateTypographyCSS( + "body-size-md", + "weight-bold", + "body-lh-md", + "body-ls-md" + ), + "body-sm-light": generateTypographyCSS( + "body-size-sm", + "weight-light", + "body-lh-sm", + "body-ls-sm" + ), + "body-sm-regular": generateTypographyCSS( + "body-size-sm", + "weight-regular", + "body-lh-sm", + "body-ls-sm" + ), + "body-sm-semibold": generateTypographyCSS( + "body-size-sm", + "weight-semibold", + "body-lh-sm", + "body-ls-sm" + ), + "body-sm-bold": generateTypographyCSS( + "body-size-sm", + "weight-bold", + "body-lh-sm", + "body-ls-sm" + ), + "formlabel-baseline-semibold": generateTypographyCSS( + "formlabel-size-baseline", + "weight-semibold", + "formlabel-size-baseline", + "body-ls-baseline" + ), + "formlabel-lg-semibold": generateTypographyCSS( + "formlabel-size-lg", + "weight-semibold", + "formlabel-size-lg", + "body-ls-lg" + ), }; From e45253af09690f5dbd02028f2083b9a86513df66 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 20 Aug 2024 10:27:57 +0800 Subject: [PATCH 0363/1949] [CCUBE-1528][MAHI]Refactored typography sets with a helper function and resolve circular dep --- src/theme/typography/helper.ts | 20 +------------------- src/theme/typography/specs/typography-set.ts | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/theme/typography/helper.ts b/src/theme/typography/helper.ts index 05dab0a8a..cf6082902 100644 --- a/src/theme/typography/helper.ts +++ b/src/theme/typography/helper.ts @@ -1,14 +1,8 @@ import { css } from "styled-components"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; -import { - FontScheme, - FontSet, - ThemeCollectionSpec, - TypographySet, -} from "../types"; +import { FontScheme, ThemeCollectionSpec, TypographySet } from "../types"; import { LifeSgTypographySet } from "./specs/typography-set"; import { TypoGraphyCollectionMap } from "./types"; -import { getFontValues } from "../font/helper"; const TypographySpec: ThemeCollectionSpec = { @@ -49,18 +43,6 @@ export const getTypography = (key: keyof TypographySet) => { }; }; -export const generateTypographyCSS = ( - fontsizeKey: keyof FontSet, - fontweightKey: keyof FontSet, - lineHeightKey: keyof FontSet, - letterSpacingKey: keyof FontSet -) => css` - font-size: ${getFontValues(fontsizeKey)}; - font-weight: ${getFontValues(fontweightKey)}; - line-height: ${getFontValues(lineHeightKey)}; - letter-spacing: ${getFontValues(letterSpacingKey)}; -`; - export const TypographyValues = { "header-xxl-light": getTypography("header-xxl-light"), "header-xxl-regular": getTypography("header-xxl-regular"), diff --git a/src/theme/typography/specs/typography-set.ts b/src/theme/typography/specs/typography-set.ts index 054e4d46c..57e14635f 100644 --- a/src/theme/typography/specs/typography-set.ts +++ b/src/theme/typography/specs/typography-set.ts @@ -1,5 +1,18 @@ -import { TypographySet } from "../../types"; -import { generateTypographyCSS } from "../helper"; +import { css } from "styled-components"; +import { FontSet, TypographySet } from "../../types"; +import { getFontValues } from "../../font/helper"; + +const generateTypographyCSS = ( + fontSizeKey: keyof FontSet, + fontWeightKey: keyof FontSet, + lineHeightKey: keyof FontSet, + letterSpacingKey: keyof FontSet +) => css` + font-size: ${getFontValues(fontSizeKey)}; + font-weight: ${getFontValues(fontWeightKey)}; + line-height: ${getFontValues(lineHeightKey)}; + letter-spacing: ${getFontValues(letterSpacingKey)}; +`; export const LifeSgTypographySet: TypographySet = { "header-xxl-light": generateTypographyCSS( From 0d6a3ad37cb74afa0a04448a89daa0e1ebbfe3d3 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 20 Aug 2024 11:18:37 +0800 Subject: [PATCH 0364/1949] [CCUBE-1528][MAHI]Cleaned up test scripts and naming convention --- tests/theme/{theme-font-test.spec.tsx => theme-font.spec.tsx} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename tests/theme/{theme-font-test.spec.tsx => theme-font.spec.tsx} (94%) diff --git a/tests/theme/theme-font-test.spec.tsx b/tests/theme/theme-font.spec.tsx similarity index 94% rename from tests/theme/theme-font-test.spec.tsx rename to tests/theme/theme-font.spec.tsx index 51f0d90f8..b5d206420 100644 --- a/tests/theme/theme-font-test.spec.tsx +++ b/tests/theme/theme-font.spec.tsx @@ -41,7 +41,7 @@ describe("StyledTypographyTest", () => { ); }); - it("should apply correct typography styles based on the overridden theme", () => { + it("should apply correct typography styles when overriding typography token", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", @@ -77,7 +77,7 @@ describe("StyledTypographyTest", () => { ); }); - it("should apply correct typography styles based on the overridden theme", () => { + it("should apply correct font styles based on the theme", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", }; From 1d65c756d1a4efd42e321001b5bb2f29ed70cdf9 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 20 Aug 2024 12:45:53 +0800 Subject: [PATCH 0365/1949] [CCUBE][1528]Cleaned up public types exports for font and typo --- src/theme/font/helper.ts | 4 +- src/theme/font/specs/font-set.ts | 2 +- src/theme/font/types.ts | 59 +++++++++- src/theme/types.ts | 114 +------------------ src/theme/typography/helper.ts | 4 +- src/theme/typography/specs/typography-set.ts | 4 +- src/theme/typography/types.ts | 58 +++++++++- 7 files changed, 126 insertions(+), 119 deletions(-) diff --git a/src/theme/font/helper.ts b/src/theme/font/helper.ts index 439a3c6c5..22b652eb9 100644 --- a/src/theme/font/helper.ts +++ b/src/theme/font/helper.ts @@ -1,8 +1,8 @@ import { StyledComponentProps, getCollection } from "../helpers"; -import { FontScheme, FontSet, ThemeCollectionSpec } from "../types"; +import { FontScheme, ThemeCollectionSpec } from "../types"; import { LifeSgFontSet } from "./specs/font-set"; import { getValue } from "../helpers"; -import { FontCollectionMap } from "./types"; +import { FontCollectionMap, FontSet } from "./types"; const FontSpec: ThemeCollectionSpec = { collections: { diff --git a/src/theme/font/specs/font-set.ts b/src/theme/font/specs/font-set.ts index fdf7de5df..0d36122f8 100644 --- a/src/theme/font/specs/font-set.ts +++ b/src/theme/font/specs/font-set.ts @@ -1,4 +1,4 @@ -import { FontSet } from "../../types"; +import { FontSet } from "../types"; // Pending for different font styling export const LifeSgFontSet: FontSet = { diff --git a/src/theme/font/types.ts b/src/theme/font/types.ts index c3292d17d..859da8185 100644 --- a/src/theme/font/types.ts +++ b/src/theme/font/types.ts @@ -1,7 +1,64 @@ -import { FontScheme, FontSet } from "../types"; +import { FontScheme } from "../types"; export type FontCollectionMap = { [key in FontScheme]: FontSet; }; export type FontSetOptions = Partial; + +export type FontSet = { + // Header sizes + "header-size-xxl": string; + "header-size-xl": string; + "header-size-lg": string; + "header-size-md": string; + "header-size-sm": string; + "header-size-xs": string; + + // Header line heights + "header-lh-xxl": string; + "header-lh-xl": string; + "header-lh-lg": string; + "header-lh-md": string; + "header-lh-sm": string; + "header-lh-xs": string; + + // Header letter spacing + "header-ls-xxl": string; + "header-ls-xl": string; + "header-ls-lg": string; + "header-ls-md": string; + "header-ls-sm": string; + "header-ls-xs": string; + + // Font weights + "weight-light": string; + "weight-regular": string; + "weight-semibold": string; + "weight-bold": string; + + // Font family + "font-family": string; + + // Body sizes + "body-size-baseline": string; + "body-size-lg": string; + "body-size-md": string; + "body-size-sm": string; + + // Body line heights + "body-lh-baseline": string; + "body-lh-lg": string; + "body-lh-md": string; + "body-lh-sm": string; + + // Body letter spacing + "body-ls-baseline": string; + "body-ls-lg": string; + "body-ls-md": string; + "body-ls-sm": string; + + // Form label sizes + "formlabel-size-baseline": string; + "formlabel-size-lg": string; +}; diff --git a/src/theme/types.ts b/src/theme/types.ts index 9b17ac864..55c2f4ded 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -1,8 +1,8 @@ import { CSSProp } from "styled-components"; import { PrimitiveColourSetOptions } from "./colour-primitive/types"; import { SemanticColourSetOptions } from "./colour-semantic/types"; -import { FontSetOptions } from "./font/types"; import { TypoSetOptions } from "./typography/types"; +import { FontSetOptions } from "./font/types"; export type { PrimitiveColourSet, @@ -13,117 +13,9 @@ export type { SemanticColourSetOptions, } from "./colour-semantic/types"; -export type FontSet = { - // Header sizes - "header-size-xxl": string; - "header-size-xl": string; - "header-size-lg": string; - "header-size-md": string; - "header-size-sm": string; - "header-size-xs": string; - - // Header line heights - "header-lh-xxl": string; - "header-lh-xl": string; - "header-lh-lg": string; - "header-lh-md": string; - "header-lh-sm": string; - "header-lh-xs": string; - - // Header letter spacing - "header-ls-xxl": string; - "header-ls-xl": string; - "header-ls-lg": string; - "header-ls-md": string; - "header-ls-sm": string; - "header-ls-xs": string; - - // Font weights - "weight-light": string; - "weight-regular": string; - "weight-semibold": string; - "weight-bold": string; - - // Font family - "font-family": string; - - // Body sizes - "body-size-baseline": string; - "body-size-lg": string; - "body-size-md": string; - "body-size-sm": string; - - // Body line heights - "body-lh-baseline": string; - "body-lh-lg": string; - "body-lh-md": string; - "body-lh-sm": string; - - // Body letter spacing - "body-ls-baseline": string; - "body-ls-lg": string; - "body-ls-md": string; - "body-ls-sm": string; - - // Form label sizes - "formlabel-size-baseline": string; - "formlabel-size-lg": string; -}; - -export type TypographySet = { - "header-xxl-light": CSSProp | string; - "header-xxl-regular": CSSProp | string; - "header-xxl-semibold": CSSProp | string; - "header-xxl-bold": CSSProp | string; - - "header-xl-light": CSSProp | string; - "header-xl-regular": CSSProp | string; - "header-xl-semibold": CSSProp | string; - "header-xl-bold": CSSProp | string; - - "header-lg-light": CSSProp | string; - "header-lg-regular": CSSProp | string; - "header-lg-semibold": CSSProp | string; - "header-lg-bold": CSSProp | string; - - "header-md-light": CSSProp | string; - "header-md-regular": CSSProp | string; - "header-md-semibold": CSSProp | string; - "header-md-bold": CSSProp | string; - - "header-sm-light": CSSProp | string; - "header-sm-regular": CSSProp | string; - "header-sm-semibold": CSSProp | string; - "header-sm-bold": CSSProp | string; - - "header-xs-light": CSSProp | string; - "header-xs-regular": CSSProp | string; - "header-xs-semibold": CSSProp | string; - "header-xs-bold": CSSProp | string; - - "body-baseline-light": CSSProp | string; - "body-baseline-regular": CSSProp | string; - "body-baseline-semibold": CSSProp | string; - "body-baseline-bold": CSSProp | string; - - "body-lg-light": CSSProp | string; - "body-lg-regular": CSSProp | string; - "body-lg-semibold": CSSProp | string; - "body-lg-bold": CSSProp | string; - - "body-md-light": CSSProp | string; - "body-md-regular": CSSProp | string; - "body-md-semibold": CSSProp | string; - "body-md-bold": CSSProp | string; - - "body-sm-light": CSSProp | string; - "body-sm-regular": CSSProp | string; - "body-sm-semibold": CSSProp | string; - "body-sm-bold": CSSProp | string; +export type { FontSet, FontSetOptions } from "./font/types"; - "formlabel-baseline-semibold": CSSProp | string; - "formlabel-lg-semibold": CSSProp | string; -}; +export type { TypographySet, TypoSetOptions } from "./typography/types"; export type ColourScheme = | "lifesg" diff --git a/src/theme/typography/helper.ts b/src/theme/typography/helper.ts index cf6082902..72f5f3409 100644 --- a/src/theme/typography/helper.ts +++ b/src/theme/typography/helper.ts @@ -1,8 +1,8 @@ import { css } from "styled-components"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; -import { FontScheme, ThemeCollectionSpec, TypographySet } from "../types"; +import { FontScheme, ThemeCollectionSpec } from "../types"; import { LifeSgTypographySet } from "./specs/typography-set"; -import { TypoGraphyCollectionMap } from "./types"; +import { TypoGraphyCollectionMap, TypographySet } from "./types"; const TypographySpec: ThemeCollectionSpec = { diff --git a/src/theme/typography/specs/typography-set.ts b/src/theme/typography/specs/typography-set.ts index 57e14635f..93be28f32 100644 --- a/src/theme/typography/specs/typography-set.ts +++ b/src/theme/typography/specs/typography-set.ts @@ -1,6 +1,8 @@ import { css } from "styled-components"; -import { FontSet, TypographySet } from "../../types"; + import { getFontValues } from "../../font/helper"; +import { FontSet } from "../../font/types"; +import { TypographySet } from "../types"; const generateTypographyCSS = ( fontSizeKey: keyof FontSet, diff --git a/src/theme/typography/types.ts b/src/theme/typography/types.ts index a32e261f6..576f385bd 100644 --- a/src/theme/typography/types.ts +++ b/src/theme/typography/types.ts @@ -1,7 +1,63 @@ -import { FontScheme, TypographySet } from "../types"; +import { CSSProp } from "styled-components"; +import { FontScheme } from "../types"; export type TypoGraphyCollectionMap = { [key in FontScheme]: TypographySet; }; export type TypoSetOptions = Partial; + +export type TypographySet = { + "header-xxl-light": CSSProp | string; + "header-xxl-regular": CSSProp | string; + "header-xxl-semibold": CSSProp | string; + "header-xxl-bold": CSSProp | string; + + "header-xl-light": CSSProp | string; + "header-xl-regular": CSSProp | string; + "header-xl-semibold": CSSProp | string; + "header-xl-bold": CSSProp | string; + + "header-lg-light": CSSProp | string; + "header-lg-regular": CSSProp | string; + "header-lg-semibold": CSSProp | string; + "header-lg-bold": CSSProp | string; + + "header-md-light": CSSProp | string; + "header-md-regular": CSSProp | string; + "header-md-semibold": CSSProp | string; + "header-md-bold": CSSProp | string; + + "header-sm-light": CSSProp | string; + "header-sm-regular": CSSProp | string; + "header-sm-semibold": CSSProp | string; + "header-sm-bold": CSSProp | string; + + "header-xs-light": CSSProp | string; + "header-xs-regular": CSSProp | string; + "header-xs-semibold": CSSProp | string; + "header-xs-bold": CSSProp | string; + + "body-baseline-light": CSSProp | string; + "body-baseline-regular": CSSProp | string; + "body-baseline-semibold": CSSProp | string; + "body-baseline-bold": CSSProp | string; + + "body-lg-light": CSSProp | string; + "body-lg-regular": CSSProp | string; + "body-lg-semibold": CSSProp | string; + "body-lg-bold": CSSProp | string; + + "body-md-light": CSSProp | string; + "body-md-regular": CSSProp | string; + "body-md-semibold": CSSProp | string; + "body-md-bold": CSSProp | string; + + "body-sm-light": CSSProp | string; + "body-sm-regular": CSSProp | string; + "body-sm-semibold": CSSProp | string; + "body-sm-bold": CSSProp | string; + + "formlabel-baseline-semibold": CSSProp | string; + "formlabel-lg-semibold": CSSProp | string; +}; From 4323c1f41828209532fb57dc3ab2c5f7c6b2469f Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 20 Aug 2024 15:12:43 +0800 Subject: [PATCH 0366/1949] [BOOKINGSG-5999][JH] add optional useContentWidth to Toggle component --- src/toggle/toggle.styles.tsx | 10 ++++++++++ src/toggle/toggle.tsx | 2 ++ src/toggle/types.ts | 2 ++ stories/toggle/props-table.tsx | 7 +++++++ 4 files changed, 21 insertions(+) diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index d943bc9f5..2671a04bd 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -20,6 +20,7 @@ interface StyleProps { interface ContainerStyleProps extends StyleProps { $styleType?: ToggleStyleType; $error?: boolean; + $useContentWidth?: boolean; } interface IndicatorLabelContainerStyleProps { @@ -61,6 +62,15 @@ export const Container = styled.div` } }} + // Container min width to fit content + ${(props) => { + if (props.$useContentWidth) { + return css` + min-width: fit-content; + `; + } + }} + // Background, Hover and Border style ${(props) => { switch (props.$styleType) { diff --git a/src/toggle/toggle.tsx b/src/toggle/toggle.tsx index 9022b6f95..52cd3e7ff 100644 --- a/src/toggle/toggle.tsx +++ b/src/toggle/toggle.tsx @@ -39,6 +39,7 @@ export const Toggle = ({ onRemove, "data-testid": testId, onChange, + useContentWidth, }: ToggleProps) => { // ============================================================================= // CONST, STATE, REF @@ -324,6 +325,7 @@ export const Toggle = ({ $styleType={styleType} $error={error} $indicator={indicator} + $useContentWidth={useContentWidth} id={id} data-testid={testId} > diff --git a/src/toggle/types.ts b/src/toggle/types.ts index 47b32722a..392243556 100644 --- a/src/toggle/types.ts +++ b/src/toggle/types.ts @@ -46,6 +46,8 @@ export interface ToggleProps /** Specifies if the remove button should be displayed */ removable?: boolean | undefined; onRemove?: (() => void) | undefined; + /** Changes min-width to fit content */ + useContentWidth?: boolean | undefined; } export interface ToggleCompositeSectionProps { diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index 167a91b5b..4b0babd0e 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -124,6 +124,13 @@ const DATA: ApiTableSectionProps[] = [ ), propTypes: ["CompositeSectionProps"], }, + { + name: "useContentWidth", + description: + "Changes the minimum width of the container to fit its content", + propTypes: ["boolean"], + defaultValue: `false`, + }, ], }, From bb78a30daf7b5d500f2a2b57316d7c76ea49d694 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 20 Aug 2024 15:14:18 +0800 Subject: [PATCH 0367/1949] [BOOKINGSG-5999][JH] add optional useContentWidth to Filter.Checkbox component --- src/filter/addons/filter-item-checkbox.tsx | 2 ++ src/filter/types.ts | 2 ++ stories/filter/addon-props-table.tsx | 7 +++++++ 3 files changed, 11 insertions(+) diff --git a/src/filter/addons/filter-item-checkbox.tsx b/src/filter/addons/filter-item-checkbox.tsx index b86afd18c..4e294a440 100644 --- a/src/filter/addons/filter-item-checkbox.tsx +++ b/src/filter/addons/filter-item-checkbox.tsx @@ -18,6 +18,7 @@ export const FilterItemCheckbox = ({ onSelect, labelExtractor, valueExtractor, + useContentWidth, ...filterItemProps }: FilterItemCheckboxProps) => { // ============================================================================= @@ -180,6 +181,7 @@ export const FilterItemCheckbox = ({ (minimisedHeight && index <= lastVisibleElementIndex) } onChange={handleItemClick(option)} + useContentWidth={useContentWidth} > {optionLabel} diff --git a/src/filter/types.ts b/src/filter/types.ts index c133d935a..ec7890b1f 100644 --- a/src/filter/types.ts +++ b/src/filter/types.ts @@ -60,4 +60,6 @@ export interface FilterItemCheckboxProps labelExtractor?: ((item: T) => React.ReactNode) | undefined; /** Function to derive value from an item. If not set, checks `item.value`. */ valueExtractor?: ((item: T) => string) | undefined; + /** Changes min-width to fit content */ + useContentWidth?: boolean | undefined; } diff --git a/stories/filter/addon-props-table.tsx b/stories/filter/addon-props-table.tsx index b48e67d81..df7f3c85c 100644 --- a/stories/filter/addon-props-table.tsx +++ b/stories/filter/addon-props-table.tsx @@ -37,6 +37,13 @@ const FILTER_CHECKBOX_DATA: ApiTableSectionProps[] = [ description: "Called when selection changes", propTypes: ["(options: T[]) => void"], }, + { + name: "useContentWidth", + description: + "Changes the minimum width of the container to fit its content", + propTypes: ["boolean"], + defaultValue: `false`, + }, { name: "labelExtractor", description: ( From 6a1edd8f84c8b1435119a098950d964046e4675a Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 20 Aug 2024 15:19:21 +0800 Subject: [PATCH 0368/1949] [BOOKINGSG-5999][JH] amend prop description --- stories/filter/addon-props-table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/filter/addon-props-table.tsx b/stories/filter/addon-props-table.tsx index df7f3c85c..7882d15cc 100644 --- a/stories/filter/addon-props-table.tsx +++ b/stories/filter/addon-props-table.tsx @@ -40,7 +40,7 @@ const FILTER_CHECKBOX_DATA: ApiTableSectionProps[] = [ { name: "useContentWidth", description: - "Changes the minimum width of the container to fit its content", + "Changes the minimum width of the checkbox toggle to fit its content (on mobile)", propTypes: ["boolean"], defaultValue: `false`, }, From fc6b1993d6d165064ebe0e70d09c0eeb8e5a02ba Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 20 Aug 2024 16:39:46 +0800 Subject: [PATCH 0369/1949] [BOOKINGSG-6062][JH] sort Filter imports alphabetically --- src/filter/filter.tsx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/filter/filter.tsx b/src/filter/filter.tsx index 35b81818f..d92038b1d 100644 --- a/src/filter/filter.tsx +++ b/src/filter/filter.tsx @@ -1,12 +1,4 @@ -import { CrossIcon } from "@lifesg/react-icons/cross"; -import { useEffect, useRef, useState } from "react"; -import { useMediaQuery } from "react-responsive"; -import { Overlay } from "../overlay/overlay"; -import { MediaWidths } from "../spec/media-spec"; -import { FilterItemCheckbox } from "./addons/filter-item-checkbox"; -import { FilterContext } from "./filter-context"; -import { FilterItem } from "./filter-item"; -import { FilterItemPage } from "./filter-item-page"; +import { CrossIcon, FilterIcon } from "@lifesg/react-icons"; import { DesktopContainer, FilterBody, @@ -20,8 +12,15 @@ import { MobileContainer, MobileOverlayContainer, } from "./filter.styles"; +import { FilterContext } from "./filter-context"; +import { FilterItem } from "./filter-item"; +import { FilterItemCheckbox } from "./addons/filter-item-checkbox"; +import { FilterItemPage } from "./filter-item-page"; import { FilterProps, Mode } from "./types"; -import { FilterIcon } from "@lifesg/react-icons"; +import { MediaWidths } from "../spec/media-spec"; +import { Overlay } from "../overlay/overlay"; +import { useEffect, useRef, useState } from "react"; +import { useMediaQuery } from "react-responsive"; const FilterBase = ({ toggleFilterButtonLabel = "Filters", From 9387a346c80c03333ca0db23d0ae167ab0b52d8d Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Wed, 21 Aug 2024 10:44:06 +0800 Subject: [PATCH 0370/1949] [BOOKINGSG-5999][JH] change prop to useToggleContentWidth for filter.checkbox, use min-width:unset instead of fit-content --- src/filter/addons/filter-item-checkbox.tsx | 4 ++-- src/filter/types.ts | 4 ++-- src/toggle/toggle.styles.tsx | 2 +- stories/filter/addon-props-table.tsx | 3 +-- stories/toggle/props-table.tsx | 1 - 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/filter/addons/filter-item-checkbox.tsx b/src/filter/addons/filter-item-checkbox.tsx index 4e294a440..0f010b897 100644 --- a/src/filter/addons/filter-item-checkbox.tsx +++ b/src/filter/addons/filter-item-checkbox.tsx @@ -18,7 +18,7 @@ export const FilterItemCheckbox = ({ onSelect, labelExtractor, valueExtractor, - useContentWidth, + useToggleContentWidth, ...filterItemProps }: FilterItemCheckboxProps) => { // ============================================================================= @@ -181,7 +181,7 @@ export const FilterItemCheckbox = ({ (minimisedHeight && index <= lastVisibleElementIndex) } onChange={handleItemClick(option)} - useContentWidth={useContentWidth} + useContentWidth={useToggleContentWidth} > {optionLabel} diff --git a/src/filter/types.ts b/src/filter/types.ts index ec7890b1f..4f29a4a4e 100644 --- a/src/filter/types.ts +++ b/src/filter/types.ts @@ -60,6 +60,6 @@ export interface FilterItemCheckboxProps labelExtractor?: ((item: T) => React.ReactNode) | undefined; /** Function to derive value from an item. If not set, checks `item.value`. */ valueExtractor?: ((item: T) => string) | undefined; - /** Changes min-width to fit content */ - useContentWidth?: boolean | undefined; + /** Changes min-width of toggle in mobile view to fit content */ + useToggleContentWidth?: boolean | undefined; } diff --git a/src/toggle/toggle.styles.tsx b/src/toggle/toggle.styles.tsx index 2671a04bd..59d62bbbf 100644 --- a/src/toggle/toggle.styles.tsx +++ b/src/toggle/toggle.styles.tsx @@ -66,7 +66,7 @@ export const Container = styled.div` ${(props) => { if (props.$useContentWidth) { return css` - min-width: fit-content; + min-width: unset; `; } }} diff --git a/stories/filter/addon-props-table.tsx b/stories/filter/addon-props-table.tsx index 7882d15cc..ac7a2444e 100644 --- a/stories/filter/addon-props-table.tsx +++ b/stories/filter/addon-props-table.tsx @@ -38,11 +38,10 @@ const FILTER_CHECKBOX_DATA: ApiTableSectionProps[] = [ propTypes: ["(options: T[]) => void"], }, { - name: "useContentWidth", + name: "useToggleContentWidth", description: "Changes the minimum width of the checkbox toggle to fit its content (on mobile)", propTypes: ["boolean"], - defaultValue: `false`, }, { name: "labelExtractor", diff --git a/stories/toggle/props-table.tsx b/stories/toggle/props-table.tsx index 4b0babd0e..8c29bac9e 100644 --- a/stories/toggle/props-table.tsx +++ b/stories/toggle/props-table.tsx @@ -129,7 +129,6 @@ const DATA: ApiTableSectionProps[] = [ description: "Changes the minimum width of the container to fit its content", propTypes: ["boolean"], - defaultValue: `false`, }, ], }, From 36a8b929b280ebe0140c43ff48ca26ee01cc6df4 Mon Sep 17 00:00:00 2001 From: Benedict Date: Wed, 21 Aug 2024 14:18:34 +0800 Subject: [PATCH 0371/1949] [MOL-15577][BC] Remove COs --- .github/CODEOWNERS | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 38755a10e..000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @LifeSG/react-design-system \ No newline at end of file From fda0f9a7f8122b984c59aa6bbdac5ba9016a4410 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 22 Aug 2024 13:06:02 +0800 Subject: [PATCH 0372/1949] [BOOKINGSG-6086][JH] add optional timestamp prop for CountdownTimer, refactor useTimer --- src/countdown-timer/countdown-timer.tsx | 3 +- src/countdown-timer/types.ts | 2 + src/countdown-timer/use-timer.tsx | 44 ++++++++++--------- stories/countdown-timer/countdown-timer.mdx | 6 +++ .../countdown-timer.stories.tsx | 20 +++++++++ stories/countdown-timer/props-table.tsx | 6 +++ 6 files changed, 59 insertions(+), 22 deletions(-) diff --git a/src/countdown-timer/countdown-timer.tsx b/src/countdown-timer/countdown-timer.tsx index a687ab8fa..39ecfd01c 100644 --- a/src/countdown-timer/countdown-timer.tsx +++ b/src/countdown-timer/countdown-timer.tsx @@ -19,6 +19,7 @@ export const CountdownTimer = ({ className, align = "right", timer, + timestamp, notifyTimer, offset, mobileOffset, @@ -41,7 +42,7 @@ export const CountdownTimer = ({ const [clientRectX, setClientRectX] = useState(0); const [isPlaying, setIsPlaying] = useState(false); - const [remainingSeconds] = useTimer(timer, isPlaying); + const [remainingSeconds] = useTimer(timer, isPlaying, timestamp); const { ref: stickyRef, inView } = useInView({ threshold: 1, rootMargin: `${offsetY * -1}px 0px 0px 0px`, diff --git a/src/countdown-timer/types.ts b/src/countdown-timer/types.ts index 4ba0a56bc..f8288f07c 100644 --- a/src/countdown-timer/types.ts +++ b/src/countdown-timer/types.ts @@ -20,6 +20,8 @@ export interface CountdownTimerProps fixed?: boolean | undefined; /** Specifies the countdown timer (in seconds) */ timer: number; + /** Specifies the timestamp at which the countdown ends (milliseconds since Jan 1, 1970) */ + timestamp?: number; /** Specifies a timer (in seconds) for notifications */ notifyTimer?: number | undefined; /** Allows customization of the sticky position in tablet/desktop view */ diff --git a/src/countdown-timer/use-timer.tsx b/src/countdown-timer/use-timer.tsx index 441b5e287..93435006c 100644 --- a/src/countdown-timer/use-timer.tsx +++ b/src/countdown-timer/use-timer.tsx @@ -1,6 +1,10 @@ import { useEffect, useState } from "react"; -export const useTimer = (seconds: number, isPlaying: boolean) => { +export const useTimer = ( + seconds: number, + isPlaying: boolean, + endTime?: number // Takes precedence over seconds +) => { // ============================================================================= // CONST, STATE, REF // ============================================================================= @@ -11,31 +15,29 @@ export const useTimer = (seconds: number, isPlaying: boolean) => { // ============================================================================= useEffect(() => { if (!isPlaying) return; - const cleanup = start(); - - return () => cleanup(); - }, [isPlaying, seconds]); - - // ========================================================================= - // HELPER FUNCTIONS - // ========================================================================= - const start = () => { - const timestamp = Date.now(); - - const interval = setInterval(() => { - const currentTime = Date.now(); - const milliseconds = seconds * 1000; + if (endTime) + setRemainingSeconds( + calculateRemainingSecondsFromTimestamp(endTime) + ); - const countdown = Math.ceil( - (timestamp + milliseconds - currentTime) / 1000 + const startTime = Date.now(); + const intervalId = setInterval(() => { + const countdown = calculateRemainingSecondsFromTimestamp( + endTime ?? startTime + seconds * 1000 ); - setRemainingSeconds(Math.max(countdown, 0)); - if (countdown <= 0) clearInterval(interval); + setRemainingSeconds(countdown); + if (countdown <= 0) clearInterval(intervalId); }, 1000); - return () => clearInterval(interval); - }; + return () => clearInterval(intervalId); + }, [endTime, isPlaying, seconds]); + + // ========================================================================= + // HELPER FUNCTIONS + // ========================================================================= + const calculateRemainingSecondsFromTimestamp = (timestamp: number) => + Math.max(Math.ceil((timestamp - Date.now()) / 1000), 0); return [remainingSeconds] as const; }; diff --git a/stories/countdown-timer/countdown-timer.mdx b/stories/countdown-timer/countdown-timer.mdx index c9bd7cd9b..619648fcb 100644 --- a/stories/countdown-timer/countdown-timer.mdx +++ b/stories/countdown-timer/countdown-timer.mdx @@ -17,6 +17,12 @@ import { CountdownTimer } from "@lifesg/react-design-system/countdown-timer"; +Timestamp + +A timestamp for the end of the countdown can be used. This takes precedence over `timer`. + + + Scroll behaviour The countdown timer is fixed to the top when scrolled out of view. By default it is aligned right, relative to its original position. It can also be aligned left. diff --git a/stories/countdown-timer/countdown-timer.stories.tsx b/stories/countdown-timer/countdown-timer.stories.tsx index c98a7d83d..7bb498854 100644 --- a/stories/countdown-timer/countdown-timer.stories.tsx +++ b/stories/countdown-timer/countdown-timer.stories.tsx @@ -72,3 +72,23 @@ export const CustomOffset: StoryObj = { docs: { story: { inline: false, iframeHeight: 500 } }, }, }; + +export const Timestamp: StoryObj = { + render: () => { + const [showTimer, setShowTimer] = useState(false); + const timestamp = Date.now() + 20000; + return ( +
    + setShowTimer(true)}> + Start + + +
    + ); + }, +}; diff --git a/stories/countdown-timer/props-table.tsx b/stories/countdown-timer/props-table.tsx index 56b4479e2..fc6143e2f 100644 --- a/stories/countdown-timer/props-table.tsx +++ b/stories/countdown-timer/props-table.tsx @@ -28,6 +28,12 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["number"], mandatory: true, }, + { + name: "timestamp", + description: + "Specifies the timestamp at which the countdown ends (milliseconds since Jan 1, 1970)", + propTypes: ["number"], + }, { name: "notifyTimer", description: From e4db83cd6f68f739e77057303149b3379d8c33f6 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 22 Aug 2024 16:01:24 +0800 Subject: [PATCH 0373/1949] [BOOKINGSG-6107][JH] add 'hidden' labelType for calendar cells --- src/shared/internal-calendar/day-cell/day-cell.style.tsx | 4 ++++ src/shared/internal-calendar/day-cell/types.tsx | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/shared/internal-calendar/day-cell/day-cell.style.tsx b/src/shared/internal-calendar/day-cell/day-cell.style.tsx index 301f4e9fb..36551145a 100644 --- a/src/shared/internal-calendar/day-cell/day-cell.style.tsx +++ b/src/shared/internal-calendar/day-cell/day-cell.style.tsx @@ -221,6 +221,10 @@ export const Label = styled(Text.H5)` return css` color: ${Color.Neutral[4]}; `; + case "hidden": + return css` + visibility: hidden; + `; case "available": default: return css` diff --git a/src/shared/internal-calendar/day-cell/types.tsx b/src/shared/internal-calendar/day-cell/types.tsx index 3ebc3fa0a..d18766701 100644 --- a/src/shared/internal-calendar/day-cell/types.tsx +++ b/src/shared/internal-calendar/day-cell/types.tsx @@ -9,7 +9,12 @@ export type CellType = | "hover-dash" | "hover-current"; -export type LabelType = "available" | "unavailable" | "current" | "selected"; +export type LabelType = + | "available" + | "unavailable" + | "current" + | "selected" + | "hidden"; export interface CellStyleProps { bgLeft?: CellType | undefined; From ff352a1fbea21acd2f23a0244ba651d153c0fe35 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 22 Aug 2024 16:03:49 +0800 Subject: [PATCH 0374/1949] [BOOKINGSG-6107][JH] add optional showCurrentMonthOnly prop for Calendar --- src/shared/internal-calendar/internal-calendar.tsx | 2 ++ .../standard/standard-calendar-day-view.tsx | 2 ++ .../internal-calendar/standard/standard-cell.tsx | 4 +++- src/shared/internal-calendar/types.ts | 2 ++ stories/calendar/calendar.mdx | 6 ++++++ stories/calendar/calendar.stories.tsx | 10 ++++++++++ stories/calendar/props-table.tsx | 7 +++++++ 7 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/shared/internal-calendar/internal-calendar.tsx b/src/shared/internal-calendar/internal-calendar.tsx index 8c5584e0b..8e2668043 100644 --- a/src/shared/internal-calendar/internal-calendar.tsx +++ b/src/shared/internal-calendar/internal-calendar.tsx @@ -30,6 +30,7 @@ export const Component = ( selectWithinRange = true, initialCalendarDate, numberOfDays, + showCurrentMonthOnly = false, }: InternalCalendarProps, ref: React.ForwardedRef ) => { @@ -171,6 +172,7 @@ export const Component = ( maxDate={maxDate} isNewSelection={selectWithinRange} allowDisabledSelection={allowDisabledSelection} + showCurrentMonthOnly={showCurrentMonthOnly} onSelect={handleDateSelect} onHover={handleDateHover} /> diff --git a/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx b/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx index 301fbe84f..9c4c0e83b 100644 --- a/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx +++ b/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx @@ -38,6 +38,7 @@ export const StandardCalendarDayView = ({ minDate, maxDate, allowDisabledSelection, + showCurrentMonthOnly, }: CalendarDayViewProps) => { // ============================================================================= // CONST, STATE, REF @@ -99,6 +100,7 @@ export const StandardCalendarDayView = ({ disabledDates={disabledDates} allowDisabledSelection={allowDisabledSelection} isNewSelection={isNewSelection} + showCurrentMonthOnly={showCurrentMonthOnly} onSelect={handleDayClick} onHover={handleHoverCell} /> diff --git a/src/shared/internal-calendar/standard/standard-cell.tsx b/src/shared/internal-calendar/standard/standard-cell.tsx index 2d26f734d..572922c02 100644 --- a/src/shared/internal-calendar/standard/standard-cell.tsx +++ b/src/shared/internal-calendar/standard/standard-cell.tsx @@ -16,6 +16,7 @@ interface Props { allowDisabledSelection?: boolean | undefined; isNewSelection?: boolean | undefined; currentFocus?: FocusType | undefined; + showCurrentMonthOnly?: boolean | undefined; onSelect: (value: Dayjs, disabled: boolean) => void; onHover: (value: string, disabled: boolean) => void; } @@ -32,6 +33,7 @@ export const StandardCell = ({ disabledDates, allowDisabledSelection, isNewSelection, + showCurrentMonthOnly, onSelect, onHover, }: Props) => { @@ -64,7 +66,7 @@ export const StandardCell = ({ const props: CellStyleProps = {}; if (calendarDate.month() !== date.month()) { - props.labelType = "unavailable"; + props.labelType = showCurrentMonthOnly ? "hidden" : "unavailable"; } else if (dayjs().isSame(date, "day") && !disabled) { props.labelType = "current"; props.circleLeft = "current"; diff --git a/src/shared/internal-calendar/types.ts b/src/shared/internal-calendar/types.ts index 689d3e0bd..62fff2416 100644 --- a/src/shared/internal-calendar/types.ts +++ b/src/shared/internal-calendar/types.ts @@ -13,6 +13,8 @@ export interface CommonCalendarProps { disabledDates?: string[] | undefined; /** Specifies if dates normally disabled by `minDate`, `maxDate` and `disabledDates` are still selectable */ allowDisabledSelection?: boolean | undefined; + /** Specifies if the calendar should display only dates for the selected month */ + showCurrentMonthOnly?: boolean | undefined; } // ============================================================================= diff --git a/stories/calendar/calendar.mdx b/stories/calendar/calendar.mdx index f86df1806..1e728c348 100644 --- a/stories/calendar/calendar.mdx +++ b/stories/calendar/calendar.mdx @@ -37,6 +37,12 @@ When `allowDisabledSelection` is set, dates are visually disabled, but still sel +Show current month only + +You can use `showCurrentMonthOnly` to display only dates for the selected month. + + + Component API diff --git a/stories/calendar/calendar.stories.tsx b/stories/calendar/calendar.stories.tsx index 85a0c8284..fb405e9f9 100644 --- a/stories/calendar/calendar.stories.tsx +++ b/stories/calendar/calendar.stories.tsx @@ -69,3 +69,13 @@ export const AllowDisabledSelection: StoryObj = { ); }, }; + +export const ShowCurrentMonthOnly: StoryObj = { + render: () => { + return ( + + + + ); + }, +}; diff --git a/stories/calendar/props-table.tsx b/stories/calendar/props-table.tsx index 42c0a40a1..da31cf924 100644 --- a/stories/calendar/props-table.tsx +++ b/stories/calendar/props-table.tsx @@ -81,6 +81,13 @@ const DATA: ApiTableSectionProps[] = [ "Called when there is a change in the current visible month and year", propTypes: ["(value: YearMonthDisplay) => void"], }, + { + name: "showCurrentMonthOnly", + description: + "Specifies if the calendar should display only dates for the selected month", + propTypes: ["boolean"], + defaultValue: `false`, + }, { name: "onHover", description: ( From ca22359911eca5f8015d56f11de6a2b3adbe7382 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 22 Aug 2024 16:23:47 +0800 Subject: [PATCH 0375/1949] [BOOKINGSG-6107][JH] hide selected date if outside month --- src/shared/internal-calendar/standard/standard-cell.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/shared/internal-calendar/standard/standard-cell.tsx b/src/shared/internal-calendar/standard/standard-cell.tsx index 572922c02..a75180f71 100644 --- a/src/shared/internal-calendar/standard/standard-cell.tsx +++ b/src/shared/internal-calendar/standard/standard-cell.tsx @@ -91,6 +91,11 @@ export const StandardCell = ({ const isStart = date.isSame(startDate, "day"); const isEnd = date.isSame(endDate, "day"); + if (showCurrentMonthOnly && calendarDate.month() !== date.month()) { + props.labelType = "hidden"; + return props; + } + if ((startDate && isStart) || (endDate && isEnd)) { props.labelType = "selected"; props.circleLeft = "selected-outline"; From a06f892e31154b35b59c9e95146544cbf543e584 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 22 Aug 2024 21:16:40 +0800 Subject: [PATCH 0376/1949] [BOOKINGSG-6086][JH] use discriminated union for timer/timestamp typing --- src/countdown-timer/types.ts | 21 +++++++++++++------ src/countdown-timer/use-timer.tsx | 2 +- stories/countdown-timer/countdown-timer.mdx | 2 +- .../countdown-timer.stories.tsx | 1 - stories/countdown-timer/props-table.tsx | 10 +++++++-- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/countdown-timer/types.ts b/src/countdown-timer/types.ts index f8288f07c..ce2043854 100644 --- a/src/countdown-timer/types.ts +++ b/src/countdown-timer/types.ts @@ -12,16 +12,11 @@ interface MobileOffset { top?: number | undefined; } -export interface CountdownTimerProps - extends React.HTMLAttributes { +interface CountdownTimerBaseProps extends React.HTMLAttributes { "data-testid"?: string | undefined; /** To show/play the countdown timer */ show: boolean; fixed?: boolean | undefined; - /** Specifies the countdown timer (in seconds) */ - timer: number; - /** Specifies the timestamp at which the countdown ends (milliseconds since Jan 1, 1970) */ - timestamp?: number; /** Specifies a timer (in seconds) for notifications */ notifyTimer?: number | undefined; /** Allows customization of the sticky position in tablet/desktop view */ @@ -37,3 +32,17 @@ export interface CountdownTimerProps /** Called when countdown reaches 0 */ onFinish?: (() => void) | undefined; } + +interface TimerProps extends CountdownTimerBaseProps { + /** Specifies the countdown timer (in seconds) */ + timer: number; + timestamp?: number | undefined; +} + +interface TimestampProps extends CountdownTimerBaseProps { + /** Specifies the timestamp at which the countdown ends (milliseconds since Jan 1, 1970) */ + timestamp: number; + timer?: number | undefined; +} + +export type CountdownTimerProps = TimerProps | TimestampProps; diff --git a/src/countdown-timer/use-timer.tsx b/src/countdown-timer/use-timer.tsx index 93435006c..e1bbc791d 100644 --- a/src/countdown-timer/use-timer.tsx +++ b/src/countdown-timer/use-timer.tsx @@ -3,7 +3,7 @@ import { useEffect, useState } from "react"; export const useTimer = ( seconds: number, isPlaying: boolean, - endTime?: number // Takes precedence over seconds + endTime?: number | undefined // Takes precedence over seconds ) => { // ============================================================================= // CONST, STATE, REF diff --git a/stories/countdown-timer/countdown-timer.mdx b/stories/countdown-timer/countdown-timer.mdx index 619648fcb..0b49a3ae3 100644 --- a/stories/countdown-timer/countdown-timer.mdx +++ b/stories/countdown-timer/countdown-timer.mdx @@ -19,7 +19,7 @@ import { CountdownTimer } from "@lifesg/react-design-system/countdown-timer"; Timestamp -A timestamp for the end of the countdown can be used. This takes precedence over `timer`. +A timestamp for the end of the countdown can be used instead of `timer` (timestamp takes precedence if both are provided). diff --git a/stories/countdown-timer/countdown-timer.stories.tsx b/stories/countdown-timer/countdown-timer.stories.tsx index 7bb498854..df13d2d27 100644 --- a/stories/countdown-timer/countdown-timer.stories.tsx +++ b/stories/countdown-timer/countdown-timer.stories.tsx @@ -84,7 +84,6 @@ export const Timestamp: StoryObj = { diff --git a/stories/countdown-timer/props-table.tsx b/stories/countdown-timer/props-table.tsx index fc6143e2f..6a03bc8a3 100644 --- a/stories/countdown-timer/props-table.tsx +++ b/stories/countdown-timer/props-table.tsx @@ -30,8 +30,14 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "timestamp", - description: - "Specifies the timestamp at which the countdown ends (milliseconds since Jan 1, 1970)", + description: ( + <> + Specifies the timestamp at which the countdown ends + (milliseconds since Jan 1, 1970), +
    + Note: required if timer is not provided + + ), propTypes: ["number"], }, { From 43534dc264e1e942a113a0779bb62841277655b9 Mon Sep 17 00:00:00 2001 From: Choo Chen Wei Date: Fri, 23 Aug 2024 10:23:22 +0800 Subject: [PATCH 0377/1949] [BOOKINGSG-5981][CCW] update letter spacing --- .../base-plus-jakarta-sans-text-style-set.ts | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts b/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts index a42f4829b..69e3b27e1 100644 --- a/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts +++ b/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts @@ -4,84 +4,90 @@ import { TextStyleSetType } from "../../text/types"; // In rem unit export const BasePlusSansJakartaStyleSet: TextStyleSetType = { D1: { - fontFamily: FontFamily.PlusSansJakarta.Bold, + fontFamily: FontFamily.PlusJakartaSans.Bold, fontSize: 3, fontWeight: 700, lineHeight: 3.5, + letterSpacing: -0.056, }, D2: { - fontFamily: FontFamily.PlusSansJakarta.Bold, + fontFamily: FontFamily.PlusJakartaSans.Bold, fontSize: 2.5, fontWeight: 700, lineHeight: 3, + letterSpacing: -0.32, }, D3: { - fontFamily: FontFamily.PlusSansJakarta.Bold, + fontFamily: FontFamily.PlusJakartaSans.Bold, fontSize: 1.625, fontWeight: 700, lineHeight: 2.25, }, D4: { - fontFamily: FontFamily.PlusSansJakarta.Bold, + fontFamily: FontFamily.PlusJakartaSans.Bold, fontSize: 1.375, fontWeight: 700, lineHeight: 1.75, }, DBody: { - fontFamily: FontFamily.PlusSansJakarta.Regular, + fontFamily: FontFamily.PlusJakartaSans.Regular, fontSize: 1.375, lineHeight: 1.75, }, H1: { - fontFamily: FontFamily.PlusSansJakarta.Bold, + fontFamily: FontFamily.PlusJakartaSans.Bold, fontSize: 2, fontWeight: 700, lineHeight: 2.5, + letterSpacing: -0.032, }, H2: { - fontFamily: FontFamily.PlusSansJakarta.Bold, + fontFamily: FontFamily.PlusJakartaSans.Bold, fontSize: 1.625, fontWeight: 700, lineHeight: 2.25, }, H3: { - fontFamily: FontFamily.PlusSansJakarta.Bold, + fontFamily: FontFamily.PlusJakartaSans.Bold, fontSize: 1.375, fontWeight: 700, lineHeight: 1.75, }, H4: { - fontFamily: FontFamily.PlusSansJakarta.Bold, + fontFamily: FontFamily.PlusJakartaSans.Bold, fontSize: 1.125, fontWeight: 700, lineHeight: 1.75, }, H5: { - fontFamily: FontFamily.PlusSansJakarta.Bold, + fontFamily: FontFamily.PlusJakartaSans.Bold, fontSize: 1, fontWeight: 700, lineHeight: 1.5, }, H6: { - fontFamily: FontFamily.PlusSansJakarta.Bold, + fontFamily: FontFamily.PlusJakartaSans.Bold, fontSize: 0.875, fontWeight: 700, lineHeight: 1.625, + letterSpacing: 0.012, }, Body: { - fontFamily: FontFamily.PlusSansJakarta.Regular, + fontFamily: FontFamily.PlusJakartaSans.Regular, fontSize: 1.125, lineHeight: 1.75, }, BodySmall: { - fontFamily: FontFamily.PlusSansJakarta.Regular, + fontFamily: FontFamily.PlusJakartaSans.Regular, fontSize: 1, lineHeight: 1.5, + letterSpacing: 0.014, }, XSmall: { - fontFamily: FontFamily.PlusSansJakarta.Regular, + fontFamily: FontFamily.PlusJakartaSans.Regular, fontSize: 0.75, lineHeight: 1.2, + letterSpacing: 0.012, }, }; From 3d73c4c65deaad39ad56f0eb3b14d04aa5e6529b Mon Sep 17 00:00:00 2001 From: Choo Chen Wei Date: Fri, 23 Aug 2024 10:23:59 +0800 Subject: [PATCH 0378/1949] [BOOKINGSG-5981][CCW] update naming of PlusJakartaSans --- src/spec/text-spec/font-spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spec/text-spec/font-spec.ts b/src/spec/text-spec/font-spec.ts index fa3c55df3..54189dcfb 100644 --- a/src/spec/text-spec/font-spec.ts +++ b/src/spec/text-spec/font-spec.ts @@ -5,7 +5,7 @@ export const FontFamily = { Bold: "Open Sans Bold", Light: "Open Sans Light", }, - PlusSansJakarta: { + PlusJakartaSans: { Regular: "Plus Jakarta Sans", Semibold: "Plus Jakarta Sans Semibold", Bold: "Plus Jakarta Sans Bold", From 41b435b3ff4f3347496ed525633dd6e3c7e4a90d Mon Sep 17 00:00:00 2001 From: Choo Chen Wei Date: Fri, 23 Aug 2024 10:24:37 +0800 Subject: [PATCH 0379/1949] [BOOKINGSG-5981][CCW] add plus jakarta sans collection mdx --- stories/text/e-plus-jakarta-sans-collection.mdx | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/stories/text/e-plus-jakarta-sans-collection.mdx b/stories/text/e-plus-jakarta-sans-collection.mdx index 5ae2fb966..e3932c688 100644 --- a/stories/text/e-plus-jakarta-sans-collection.mdx +++ b/stories/text/e-plus-jakarta-sans-collection.mdx @@ -11,7 +11,7 @@ import { OneServiceTheme } from "../../src"; Overview -This will be the collection used when the `textStyleScheme` is `plusJakartaSans`. +This will be the collection used when the `textStylepublic/plusJakartaSans`. ```tsx const theme: ThemeSpec = { @@ -21,16 +21,13 @@ const theme: ThemeSpec = { ``` Font Family +Plus Sans Jakarta -Open Sans Text Styles - + From 215cd3455bcf541acf7ce83fc1fe251e981478ea Mon Sep 17 00:00:00 2001 From: Jian Sheng Date: Fri, 23 Aug 2024 13:00:36 +0800 Subject: [PATCH 0380/1949] [BOOKINGSG-5981][JS] fix theme not being applied for plus jakarta sans - use correct textStyleScheme in theme provider - wrap mdx components in ThemeProvider --- stories/text/c-base-collection.mdx | 22 +++++++++------ stories/text/collection-doc-elements.tsx | 14 ++-------- stories/text/d-oneservice-collection.mdx | 28 +++++++++++-------- .../text/e-plus-jakarta-sans-collection.mdx | 27 ++++++++++-------- 4 files changed, 49 insertions(+), 42 deletions(-) diff --git a/stories/text/c-base-collection.mdx b/stories/text/c-base-collection.mdx index 35a6a9855..cd7fd9bb0 100644 --- a/stories/text/c-base-collection.mdx +++ b/stories/text/c-base-collection.mdx @@ -3,6 +3,8 @@ import { Text } from "src/text"; import { BaseTextStyleSet } from "src/spec/text-spec/base-text-style-set"; import { Secondary, Title } from "../storybook-common"; import { FontDisplay, FontSizeDisplay } from "./collection-doc-elements"; +import { BaseTheme } from "../../src"; +import { ThemeProvider } from "styled-components"; @@ -21,12 +23,16 @@ const theme: ThemeSpec = { Font Family -Open Sans - - - + -Text Styles - - - + Open Sans + + + + + Text Styles + + + + + diff --git a/stories/text/collection-doc-elements.tsx b/stories/text/collection-doc-elements.tsx index d2711156e..31e0c7682 100644 --- a/stories/text/collection-doc-elements.tsx +++ b/stories/text/collection-doc-elements.tsx @@ -1,8 +1,6 @@ -import React from "react"; -import styled, { ThemeProvider } from "styled-components"; +import styled from "styled-components"; import { MediaQuery } from "../../src/media"; import { Text, TextStyleHelper, TextStyleSetType } from "../../src/text"; -import { BaseTheme, ThemeSpec } from "../../src"; export const FontDisplay = () => { return ( @@ -31,13 +29,9 @@ const FontDisplayContainer = styled.div` // ============================================================================= interface FontSizeDisplayProps { textStyles: TextStyleSetType; - theme?: ThemeSpec; } -export const FontSizeDisplay = ({ - textStyles, - theme, -}: FontSizeDisplayProps) => { +export const FontSizeDisplay = ({ textStyles }: FontSizeDisplayProps) => { const getComponent = (key: string) => { switch (key) { case "D1": @@ -116,9 +110,7 @@ export const FontSizeDisplay = ({ return ( - - {renderFontSizes()} - + {renderFontSizes()} ); }; diff --git a/stories/text/d-oneservice-collection.mdx b/stories/text/d-oneservice-collection.mdx index c79c14958..9516e5b3c 100644 --- a/stories/text/d-oneservice-collection.mdx +++ b/stories/text/d-oneservice-collection.mdx @@ -4,6 +4,7 @@ import { OneServiceTextStyleSet } from "src/spec/text-spec/oneservice-text-style import { Secondary, Title } from "../storybook-common"; import { FontDisplay, FontSizeDisplay } from "./collection-doc-elements"; import { OneServiceTheme } from "../../src"; +import { ThemeProvider } from "styled-components"; @@ -22,15 +23,18 @@ const theme: ThemeSpec = { Font Family -Open Sans - - - - -Text Styles - - - + + + Open Sans + + + + + Text Styles + + + + + diff --git a/stories/text/e-plus-jakarta-sans-collection.mdx b/stories/text/e-plus-jakarta-sans-collection.mdx index e3932c688..fafa3bbb6 100644 --- a/stories/text/e-plus-jakarta-sans-collection.mdx +++ b/stories/text/e-plus-jakarta-sans-collection.mdx @@ -3,15 +3,16 @@ import { Text } from "src/text"; import { BasePlusSansJakartaStyleSet } from "src/spec/text-spec/base-plus-jakarta-sans-text-style-set"; import { Secondary, Title } from "../storybook-common"; import { FontDisplay, FontSizeDisplay } from "./collection-doc-elements"; -import { OneServiceTheme } from "../../src"; +import { BaseTheme } from "../../src"; +import { ThemeProvider } from "styled-components"; -Plus Sans Jakarta Style +Plus Jakarta Sans Style Overview -This will be the collection used when the `textStylepublic/plusJakartaSans`. +This will be the collection used when the `textStyleScheme` is `plusJakartaSans`. ```tsx const theme: ThemeSpec = { @@ -21,13 +22,17 @@ const theme: ThemeSpec = { ``` Font Family -Plus Sans Jakarta - - - + -Text Styles - - - + Plus Jakarta Sans + + + + + Text Styles + + + + + From 7d4ccc09f450040abd9184746503e447472bc632 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Sat, 24 Aug 2024 16:02:47 +0800 Subject: [PATCH 0381/1949] [BOOKINGSG-6107][JH] rename showCurrentMonthOnly to showActiveMonthDaysOnly --- src/shared/internal-calendar/internal-calendar.tsx | 4 ++-- .../standard/standard-calendar-day-view.tsx | 6 ++++-- .../internal-calendar/standard/standard-cell.tsx | 10 ++++++---- src/shared/internal-calendar/types.ts | 2 +- stories/calendar/calendar.mdx | 6 +++--- stories/calendar/calendar.stories.tsx | 4 ++-- stories/calendar/props-table.tsx | 2 +- 7 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/shared/internal-calendar/internal-calendar.tsx b/src/shared/internal-calendar/internal-calendar.tsx index 8e2668043..e31a39439 100644 --- a/src/shared/internal-calendar/internal-calendar.tsx +++ b/src/shared/internal-calendar/internal-calendar.tsx @@ -30,7 +30,7 @@ export const Component = ( selectWithinRange = true, initialCalendarDate, numberOfDays, - showCurrentMonthOnly = false, + showActiveMonthDaysOnly = false, }: InternalCalendarProps, ref: React.ForwardedRef ) => { @@ -172,7 +172,7 @@ export const Component = ( maxDate={maxDate} isNewSelection={selectWithinRange} allowDisabledSelection={allowDisabledSelection} - showCurrentMonthOnly={showCurrentMonthOnly} + showActiveMonthDaysOnly={showActiveMonthDaysOnly} onSelect={handleDateSelect} onHover={handleDateHover} /> diff --git a/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx b/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx index 9c4c0e83b..0b62f5fcc 100644 --- a/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx +++ b/src/shared/internal-calendar/standard/standard-calendar-day-view.tsx @@ -38,7 +38,7 @@ export const StandardCalendarDayView = ({ minDate, maxDate, allowDisabledSelection, - showCurrentMonthOnly, + showActiveMonthDaysOnly, }: CalendarDayViewProps) => { // ============================================================================= // CONST, STATE, REF @@ -100,7 +100,9 @@ export const StandardCalendarDayView = ({ disabledDates={disabledDates} allowDisabledSelection={allowDisabledSelection} isNewSelection={isNewSelection} - showCurrentMonthOnly={showCurrentMonthOnly} + showActiveMonthDaysOnly={ + showActiveMonthDaysOnly + } onSelect={handleDayClick} onHover={handleHoverCell} /> diff --git a/src/shared/internal-calendar/standard/standard-cell.tsx b/src/shared/internal-calendar/standard/standard-cell.tsx index a75180f71..2d055a2be 100644 --- a/src/shared/internal-calendar/standard/standard-cell.tsx +++ b/src/shared/internal-calendar/standard/standard-cell.tsx @@ -16,7 +16,7 @@ interface Props { allowDisabledSelection?: boolean | undefined; isNewSelection?: boolean | undefined; currentFocus?: FocusType | undefined; - showCurrentMonthOnly?: boolean | undefined; + showActiveMonthDaysOnly?: boolean | undefined; onSelect: (value: Dayjs, disabled: boolean) => void; onHover: (value: string, disabled: boolean) => void; } @@ -33,7 +33,7 @@ export const StandardCell = ({ disabledDates, allowDisabledSelection, isNewSelection, - showCurrentMonthOnly, + showActiveMonthDaysOnly, onSelect, onHover, }: Props) => { @@ -66,7 +66,9 @@ export const StandardCell = ({ const props: CellStyleProps = {}; if (calendarDate.month() !== date.month()) { - props.labelType = showCurrentMonthOnly ? "hidden" : "unavailable"; + props.labelType = showActiveMonthDaysOnly + ? "hidden" + : "unavailable"; } else if (dayjs().isSame(date, "day") && !disabled) { props.labelType = "current"; props.circleLeft = "current"; @@ -91,7 +93,7 @@ export const StandardCell = ({ const isStart = date.isSame(startDate, "day"); const isEnd = date.isSame(endDate, "day"); - if (showCurrentMonthOnly && calendarDate.month() !== date.month()) { + if (showActiveMonthDaysOnly && calendarDate.month() !== date.month()) { props.labelType = "hidden"; return props; } diff --git a/src/shared/internal-calendar/types.ts b/src/shared/internal-calendar/types.ts index 62fff2416..770bb1aea 100644 --- a/src/shared/internal-calendar/types.ts +++ b/src/shared/internal-calendar/types.ts @@ -14,7 +14,7 @@ export interface CommonCalendarProps { /** Specifies if dates normally disabled by `minDate`, `maxDate` and `disabledDates` are still selectable */ allowDisabledSelection?: boolean | undefined; /** Specifies if the calendar should display only dates for the selected month */ - showCurrentMonthOnly?: boolean | undefined; + showActiveMonthDaysOnly?: boolean | undefined; } // ============================================================================= diff --git a/stories/calendar/calendar.mdx b/stories/calendar/calendar.mdx index 1e728c348..4fd7d0eae 100644 --- a/stories/calendar/calendar.mdx +++ b/stories/calendar/calendar.mdx @@ -37,11 +37,11 @@ When `allowDisabledSelection` is set, dates are visually disabled, but still sel -Show current month only +Show active month days only -You can use `showCurrentMonthOnly` to display only dates for the selected month. +You can use `showActiveMonthDaysOnly` to display only dates for the selected month. - + Component API diff --git a/stories/calendar/calendar.stories.tsx b/stories/calendar/calendar.stories.tsx index fb405e9f9..38aae8baf 100644 --- a/stories/calendar/calendar.stories.tsx +++ b/stories/calendar/calendar.stories.tsx @@ -70,11 +70,11 @@ export const AllowDisabledSelection: StoryObj = { }, }; -export const ShowCurrentMonthOnly: StoryObj = { +export const ShowActiveMonthDaysOnly: StoryObj = { render: () => { return ( - + ); }, diff --git a/stories/calendar/props-table.tsx b/stories/calendar/props-table.tsx index da31cf924..dd9e09ea2 100644 --- a/stories/calendar/props-table.tsx +++ b/stories/calendar/props-table.tsx @@ -82,7 +82,7 @@ const DATA: ApiTableSectionProps[] = [ propTypes: ["(value: YearMonthDisplay) => void"], }, { - name: "showCurrentMonthOnly", + name: "showActiveMonthDaysOnly", description: "Specifies if the calendar should display only dates for the selected month", propTypes: ["boolean"], From 9ecb1dbe412b73056f5b7c5f9db81d424260d33f Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Mon, 26 Aug 2024 09:19:27 +0800 Subject: [PATCH 0382/1949] [MISC][JH] v2.7.0-canary.6 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3fd5adb0e..492428436 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.5", + "version": "2.7.0-canary.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.5", + "version": "2.7.0-canary.6", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index f394d1238..1b1fe61c9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.5", + "version": "2.7.0-canary.6", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From fc3dd34b57fa48cd4212c1623c96cf1c60827e21 Mon Sep 17 00:00:00 2001 From: Jian Sheng Date: Mon, 26 Aug 2024 11:01:39 +0800 Subject: [PATCH 0383/1949] [BOOKINGSG-5981][JS|CCW] fix hardcoded OpenSans font family --- src/spec/text-spec/font-spec.ts | 4 +++- src/spec/text-spec/types.ts | 5 +++++ src/text/helper.ts | 25 ++++++++++++++++--------- 3 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 src/spec/text-spec/types.ts diff --git a/src/spec/text-spec/font-spec.ts b/src/spec/text-spec/font-spec.ts index 54189dcfb..ec17c4fcb 100644 --- a/src/spec/text-spec/font-spec.ts +++ b/src/spec/text-spec/font-spec.ts @@ -1,3 +1,5 @@ +import { TFontFamily } from "./types"; + export const FontFamily = { OpenSans: { Regular: "Open Sans", @@ -12,4 +14,4 @@ export const FontFamily = { Light: "Plus Jakarta Sans Light", }, MerriWeather: "Merriweather", -}; +} satisfies TFontFamily; diff --git a/src/spec/text-spec/types.ts b/src/spec/text-spec/types.ts new file mode 100644 index 000000000..eed660ff7 --- /dev/null +++ b/src/spec/text-spec/types.ts @@ -0,0 +1,5 @@ +type FontWeights = "Regular" | "Semibold" | "Bold" | "Light"; + +export type FontWeightSpec = Record; + +export type TFontFamily = Record; diff --git a/src/text/helper.ts b/src/text/helper.ts index 676496b7d..00f425e6c 100644 --- a/src/text/helper.ts +++ b/src/text/helper.ts @@ -1,25 +1,28 @@ import { css } from "styled-components"; import { FontFamily } from "../spec/text-spec/font-spec"; -import { TextLinkSizeType, TextSizeType, TextWeight } from "./types"; +import { FontWeightSpec } from "../spec/text-spec/types"; import { TextStyle } from "./text-style"; +import { TextLinkSizeType, TextSizeType, TextWeight } from "./types"; // ============================================================================= // FONT STYLE // ============================================================================= -const getFont = (weight: TextWeight) => { +const FONTS_WITH_WEIGHTS = [FontFamily.OpenSans, FontFamily.PlusJakartaSans]; + +const getFont = (fontFamily: FontWeightSpec, weight: TextWeight) => { switch (weight) { case 700: case "bold": - return FontFamily.OpenSans.Bold; + return fontFamily.Bold; case 600: case "semibold": - return FontFamily.OpenSans.Semibold; + return fontFamily.Semibold; case 300: case "light": - return FontFamily.OpenSans.Light; + return fontFamily.Light; case 400: case "regular": - return FontFamily.OpenSans.Regular; + return fontFamily.Regular; default: return ""; } @@ -35,10 +38,14 @@ const getFontFamily = ( props ) as TextWeight; - if (Object.values(FontFamily.OpenSans).includes(fontFamilyFromTheme)) { + const fontFamily = FONTS_WITH_WEIGHTS.find((set) => + Object.values(set).includes(fontFamilyFromTheme) + ); + + if (fontFamily) { return css` - font-family: ${getFont(weight) || - getFont(fontWeightFromTheme) || + font-family: ${getFont(fontFamily, weight) || + getFont(fontFamily, fontWeightFromTheme) || fontFamilyFromTheme}; font-weight: normal !important; `; From 1a08ad87bc5380fadb0cae94af427af8ff0eab2a Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 27 Aug 2024 10:07:40 +0800 Subject: [PATCH 0384/1949] [CCUBE-1528][MAHI]Fixed PR changes for helper functions and test script and exports --- src/theme/font/helper.ts | 7 +++++-- src/theme/index.ts | 8 ++------ src/theme/types.ts | 12 +++++++----- src/theme/typography/helper.ts | 12 +++++++----- src/theme/typography/types.ts | 4 ++-- tests/theme/theme-font.spec.tsx | 2 -- 6 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/theme/font/helper.ts b/src/theme/font/helper.ts index 22b652eb9..194e92da5 100644 --- a/src/theme/font/helper.ts +++ b/src/theme/font/helper.ts @@ -18,7 +18,7 @@ const FontSpec: ThemeCollectionSpec = { export const getFontValues = (key: keyof FontSet) => { return (props: StyledComponentProps): string => { const theme = props.theme; - const fontSet: FontSet = getCollection(FontSpec, theme["fontScheme"]); + const fontSet: FontSet = getCollection(FontSpec, theme.fontScheme); if (theme.overrides && theme.overrides.font) { return getValue(fontSet, key, theme.overrides.font); @@ -28,7 +28,9 @@ export const getFontValues = (key: keyof FontSet) => { }; }; -export const FontValues = { +export const FontValues: { + [key in keyof FontSet]: (props: StyledComponentProps) => string; +} = { "header-size-xxl": getFontValues("header-size-xxl"), "header-size-xl": getFontValues("header-size-xl"), "header-size-lg": getFontValues("header-size-lg"), @@ -54,6 +56,7 @@ export const FontValues = { "weight-regular": getFontValues("weight-regular"), "weight-semibold": getFontValues("weight-semibold"), "weight-bold": getFontValues("weight-bold"), + "font-family": getFontValues("font-family"), "body-size-baseline": getFontValues("body-size-baseline"), "body-size-lg": getFontValues("body-size-lg"), diff --git a/src/theme/index.ts b/src/theme/index.ts index 2e826db88..38b6abead 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -9,13 +9,9 @@ export const Colour = { Primitive: PrimitiveColour, }; -export const Font = { - ...FontValues, -}; +export const Font = FontValues; -export const Typo = { - ...TypographyValues, -}; +export const Typo = TypographyValues; export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", diff --git a/src/theme/types.ts b/src/theme/types.ts index 55c2f4ded..82186c5fe 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -1,7 +1,6 @@ -import { CSSProp } from "styled-components"; import { PrimitiveColourSetOptions } from "./colour-primitive/types"; import { SemanticColourSetOptions } from "./colour-semantic/types"; -import { TypoSetOptions } from "./typography/types"; +import { TypographySetOptions } from "./typography/types"; import { FontSetOptions } from "./font/types"; export type { @@ -15,7 +14,10 @@ export type { export type { FontSet, FontSetOptions } from "./font/types"; -export type { TypographySet, TypoSetOptions } from "./typography/types"; +export type { + TypographySet, + TypographySetOptions as TypoSetOptions, +} from "./typography/types"; export type ColourScheme = | "lifesg" @@ -30,12 +32,12 @@ export interface ThemeSpecOptions { primitiveColour?: PrimitiveColourSetOptions | undefined; semanticColour?: SemanticColourSetOptions | undefined; font?: FontSetOptions | undefined; - typography?: TypoSetOptions | undefined; + typography?: TypographySetOptions | undefined; } export interface ThemeSpec { colourScheme: ColourScheme; - fontScheme?: FontScheme; + fontScheme?: FontScheme | undefined; overrides?: ThemeSpecOptions | undefined; } diff --git a/src/theme/typography/helper.ts b/src/theme/typography/helper.ts index 72f5f3409..c5c3b49d8 100644 --- a/src/theme/typography/helper.ts +++ b/src/theme/typography/helper.ts @@ -1,10 +1,10 @@ -import { css } from "styled-components"; +import { CSSProp, css } from "styled-components"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { FontScheme, ThemeCollectionSpec } from "../types"; import { LifeSgTypographySet } from "./specs/typography-set"; -import { TypoGraphyCollectionMap, TypographySet } from "./types"; +import { TypographyCollectionMap, TypographySet } from "./types"; -const TypographySpec: ThemeCollectionSpec = +const TypographySpec: ThemeCollectionSpec = { collections: { lifesg: LifeSgTypographySet, @@ -21,7 +21,7 @@ export const getTypography = (key: keyof TypographySet) => { const theme = props.theme; const typographySet: TypographySet = getCollection( TypographySpec, - theme["fontScheme"] + theme.fontScheme ); // Check for an override @@ -43,7 +43,9 @@ export const getTypography = (key: keyof TypographySet) => { }; }; -export const TypographyValues = { +export const TypographyValues: { + [key in keyof TypographySet]: (props: StyledComponentProps) => CSSProp; +} = { "header-xxl-light": getTypography("header-xxl-light"), "header-xxl-regular": getTypography("header-xxl-regular"), "header-xxl-semibold": getTypography("header-xxl-semibold"), diff --git a/src/theme/typography/types.ts b/src/theme/typography/types.ts index 576f385bd..855f409a5 100644 --- a/src/theme/typography/types.ts +++ b/src/theme/typography/types.ts @@ -1,11 +1,11 @@ import { CSSProp } from "styled-components"; import { FontScheme } from "../types"; -export type TypoGraphyCollectionMap = { +export type TypographyCollectionMap = { [key in FontScheme]: TypographySet; }; -export type TypoSetOptions = Partial; +export type TypographySetOptions = Partial; export type TypographySet = { "header-xxl-light": CSSProp | string; diff --git a/tests/theme/theme-font.spec.tsx b/tests/theme/theme-font.spec.tsx index b5d206420..e19d5f0b3 100644 --- a/tests/theme/theme-font.spec.tsx +++ b/tests/theme/theme-font.spec.tsx @@ -12,8 +12,6 @@ const StyledFontSet = styled.div` font-size: ${Font["header-size-xs"]}; `; -// "header-size-xs": "1.125rem", - describe("StyledTypographyTest", () => { it("should apply correct typography styles based on the theme", () => { const mockTheme: ThemeSpec = { From 6b77b316cbf2b3924c0c14b8d7b9d103579d7c32 Mon Sep 17 00:00:00 2001 From: Choo Chen Wei Date: Tue, 27 Aug 2024 11:16:54 +0800 Subject: [PATCH 0385/1949] [BOOKINSG-5981][CCW] fix letter spacing typo for D2 --- src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts b/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts index 69e3b27e1..4d6529e99 100644 --- a/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts +++ b/src/spec/text-spec/base-plus-jakarta-sans-text-style-set.ts @@ -15,7 +15,7 @@ export const BasePlusSansJakartaStyleSet: TextStyleSetType = { fontSize: 2.5, fontWeight: 700, lineHeight: 3, - letterSpacing: -0.32, + letterSpacing: -0.032, }, D3: { fontFamily: FontFamily.PlusJakartaSans.Bold, From 513c483d8db49752466ec1bd706d51691b0824ae Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 27 Aug 2024 16:29:20 +0800 Subject: [PATCH 0386/1949] [BOOKINGSG-6108][JH] modified behavior when selecting end date of DateRangeInput (no refocusing start, end becomes start for invalid range) --- src/date-range-input/date-range-input.tsx | 27 +++++++++-------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/date-range-input/date-range-input.tsx b/src/date-range-input/date-range-input.tsx index e75f1b207..2db91ad07 100644 --- a/src/date-range-input/date-range-input.tsx +++ b/src/date-range-input/date-range-input.tsx @@ -316,6 +316,16 @@ export const DateRangeInput = ({ return; } + const isInvalidRange = dayjs(val).isBefore(selectedStart, "day"); + + // if date range is invalid, set selected value as start and reselect end + if (isInvalidRange) { + actions.changeStart(val); + calendarRef.current.setCalendarDate(val); + actions.reselectEnd(); + return; + } + actions.changeEnd(val); calendarRef.current.setCalendarDate(val); @@ -331,10 +341,7 @@ export const DateRangeInput = ({ /* - if next input is empty, focus it - - else if date range is invalid, clear and focus the next input - - else if date range is valid - - if next input is still pristine, focus it - - else if !withButton, confirm the selection and "blur" the field + - else if !withButton, confirm the selection and "blur" the field */ if (!selectedStart) { @@ -342,18 +349,6 @@ export const DateRangeInput = ({ return; } - const isInvalidRange = dayjs(val).isBefore(selectedStart, "day"); - - if (isInvalidRange) { - actions.reselectStart(); - return; - } - - if (!isStartDirty) { - actions.focus("start"); - return; - } - if (!withButton) { actions.done({ start: selectedStart, end: val }); onChange?.(selectedStart, val); From b2b69c14c301dca6ca449fc11df61cfc54bb12ee Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 27 Aug 2024 16:37:03 +0800 Subject: [PATCH 0387/1949] [CCUBE-1528][MAHI]Fixed up more PR changes including typing for helpers and naming convention for files --- .../specs/{font-set.ts => lifesg-font-set.ts} | 0 src/theme/font/{helper.ts => theme-helper.ts} | 2 +- src/theme/index.ts | 4 ++-- src/theme/types.ts | 2 +- ...ypography-set.ts => lifesg-typography-set.ts} | 2 +- .../typography/{helper.ts => theme-helper.ts} | 16 +++++----------- tests/theme/theme-colour.spec.tsx | 3 +++ tests/theme/theme-font.spec.tsx | 4 +++- 8 files changed, 16 insertions(+), 17 deletions(-) rename src/theme/font/specs/{font-set.ts => lifesg-font-set.ts} (100%) rename src/theme/font/{helper.ts => theme-helper.ts} (98%) rename src/theme/typography/specs/{typography-set.ts => lifesg-typography-set.ts} (99%) rename src/theme/typography/{helper.ts => theme-helper.ts} (91%) diff --git a/src/theme/font/specs/font-set.ts b/src/theme/font/specs/lifesg-font-set.ts similarity index 100% rename from src/theme/font/specs/font-set.ts rename to src/theme/font/specs/lifesg-font-set.ts diff --git a/src/theme/font/helper.ts b/src/theme/font/theme-helper.ts similarity index 98% rename from src/theme/font/helper.ts rename to src/theme/font/theme-helper.ts index 194e92da5..162437597 100644 --- a/src/theme/font/helper.ts +++ b/src/theme/font/theme-helper.ts @@ -1,6 +1,6 @@ import { StyledComponentProps, getCollection } from "../helpers"; import { FontScheme, ThemeCollectionSpec } from "../types"; -import { LifeSgFontSet } from "./specs/font-set"; +import { LifeSgFontSet } from "./specs/lifesg-font-set"; import { getValue } from "../helpers"; import { FontCollectionMap, FontSet } from "./types"; diff --git a/src/theme/index.ts b/src/theme/index.ts index 38b6abead..c2f566ad1 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,8 +1,8 @@ import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; -import { FontValues } from "./font/helper"; +import { FontValues } from "./font/theme-helper"; import { ThemeSpec } from "./types"; -import { TypographyValues } from "./typography/helper"; +import { TypographyValues } from "./typography/theme-helper"; export const Colour = { ...ColourSemantic, diff --git a/src/theme/types.ts b/src/theme/types.ts index 82186c5fe..59010a7f6 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -37,7 +37,7 @@ export interface ThemeSpecOptions { export interface ThemeSpec { colourScheme: ColourScheme; - fontScheme?: FontScheme | undefined; + fontScheme: FontScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/src/theme/typography/specs/typography-set.ts b/src/theme/typography/specs/lifesg-typography-set.ts similarity index 99% rename from src/theme/typography/specs/typography-set.ts rename to src/theme/typography/specs/lifesg-typography-set.ts index 93be28f32..d5e7edd66 100644 --- a/src/theme/typography/specs/typography-set.ts +++ b/src/theme/typography/specs/lifesg-typography-set.ts @@ -1,6 +1,6 @@ import { css } from "styled-components"; -import { getFontValues } from "../../font/helper"; +import { getFontValues } from "../../font/theme-helper"; import { FontSet } from "../../font/types"; import { TypographySet } from "../types"; diff --git a/src/theme/typography/helper.ts b/src/theme/typography/theme-helper.ts similarity index 91% rename from src/theme/typography/helper.ts rename to src/theme/typography/theme-helper.ts index c5c3b49d8..1e80f277a 100644 --- a/src/theme/typography/helper.ts +++ b/src/theme/typography/theme-helper.ts @@ -1,7 +1,7 @@ import { CSSProp, css } from "styled-components"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { FontScheme, ThemeCollectionSpec } from "../types"; -import { LifeSgTypographySet } from "./specs/typography-set"; +import { LifeSgTypographySet } from "./specs/lifesg-typography-set"; import { TypographyCollectionMap, TypographySet } from "./types"; const TypographySpec: ThemeCollectionSpec = @@ -17,7 +17,7 @@ const TypographySpec: ThemeCollectionSpec = }; export const getTypography = (key: keyof TypographySet) => { - return (props: StyledComponentProps) => { + return (props: StyledComponentProps): CSSProp | string => { const theme = props.theme; const typographySet: TypographySet = getCollection( TypographySpec, @@ -31,15 +31,9 @@ export const getTypography = (key: keyof TypographySet) => { : typographySet[key]; // If function, resolve with props - if (typeof typographyValue === "function") { - return css` - ${(typographyValue as (props: any) => string)(props)} - `; - } - - return css` - ${typographyValue} - `; + return typeof typographyValue === "function" + ? (typographyValue as (props: any) => string)(props) + : typographyValue; }; }; diff --git a/tests/theme/theme-colour.spec.tsx b/tests/theme/theme-colour.spec.tsx index 8252ef760..c96ebc188 100644 --- a/tests/theme/theme-colour.spec.tsx +++ b/tests/theme/theme-colour.spec.tsx @@ -13,6 +13,7 @@ describe("Colour Themeing Test", () => { it("should apply correct styles based on the theme", () => { const mockTheme: ThemeSpec = { colourScheme: "bookingsg", + fontScheme: "lifesg", }; const bgColor = "#1A122C"; @@ -34,6 +35,7 @@ describe("Colour Themeing Test", () => { it("should apply correct styles when overriding primitive colour token", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", + fontScheme: "lifesg", overrides: { primitiveColour: { "primary-10": "#fefefe", @@ -60,6 +62,7 @@ describe("Colour Themeing Test", () => { it("should apply correct styles when overriding semantic colour token", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", + fontScheme: "lifesg", overrides: { semanticColour: { "border-primary": "#fefefe", diff --git a/tests/theme/theme-font.spec.tsx b/tests/theme/theme-font.spec.tsx index e19d5f0b3..66dce3a63 100644 --- a/tests/theme/theme-font.spec.tsx +++ b/tests/theme/theme-font.spec.tsx @@ -1,8 +1,9 @@ import styled, { ThemeProvider } from "styled-components"; import { render } from "@testing-library/react"; -import { Font, Typo } from "../../src/theme"; + import { ThemeSpec } from "../../src/theme/types"; import "jest-styled-components"; +import { Font, Typo } from "../../src"; const StyledTypographyTest = styled.div` ${Typo["header-xxl-bold"]}; @@ -78,6 +79,7 @@ describe("StyledTypographyTest", () => { it("should apply correct font styles based on the theme", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", + fontScheme: "lifesg", }; const fontSize = "1.125rem"; From 2132ec70ac8da26f150a09c0073c68badea0c071 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 28 Aug 2024 10:00:37 +0800 Subject: [PATCH 0388/1949] [CCUBE-1528][MAHI]Fixed more PR changes cleaning up naming convention and unused imports --- src/theme/index.ts | 2 +- src/theme/types.ts | 5 +---- src/theme/typography/theme-helper.ts | 2 +- tests/theme/theme-font.spec.tsx | 4 ++-- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/theme/index.ts b/src/theme/index.ts index c2f566ad1..84b7afe5e 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -11,7 +11,7 @@ export const Colour = { export const Font = FontValues; -export const Typo = TypographyValues; +export const Typography = TypographyValues; export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", diff --git a/src/theme/types.ts b/src/theme/types.ts index 59010a7f6..bb7767613 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -14,10 +14,7 @@ export type { export type { FontSet, FontSetOptions } from "./font/types"; -export type { - TypographySet, - TypographySetOptions as TypoSetOptions, -} from "./typography/types"; +export type { TypographySet, TypographySetOptions } from "./typography/types"; export type ColourScheme = | "lifesg" diff --git a/src/theme/typography/theme-helper.ts b/src/theme/typography/theme-helper.ts index 1e80f277a..21df339c2 100644 --- a/src/theme/typography/theme-helper.ts +++ b/src/theme/typography/theme-helper.ts @@ -1,4 +1,4 @@ -import { CSSProp, css } from "styled-components"; +import { CSSProp } from "styled-components"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { FontScheme, ThemeCollectionSpec } from "../types"; import { LifeSgTypographySet } from "./specs/lifesg-typography-set"; diff --git a/tests/theme/theme-font.spec.tsx b/tests/theme/theme-font.spec.tsx index 66dce3a63..59fc81fb5 100644 --- a/tests/theme/theme-font.spec.tsx +++ b/tests/theme/theme-font.spec.tsx @@ -3,10 +3,10 @@ import { render } from "@testing-library/react"; import { ThemeSpec } from "../../src/theme/types"; import "jest-styled-components"; -import { Font, Typo } from "../../src"; +import { Font, Typography } from "../../src"; const StyledTypographyTest = styled.div` - ${Typo["header-xxl-bold"]}; + ${Typography["header-xxl-bold"]}; `; const StyledFontSet = styled.div` From 726cd96ba3699ab8cdec59aaf284d59514e91f43 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 21 Aug 2024 11:13:23 +0800 Subject: [PATCH 0389/1949] [CCUBE-1533][MAHI]Set up Animation Token and its test script --- src/theme/animation/helper.ts | 44 ++++++++++++++ .../animation/specs/lifesg-animation-set.ts | 15 +++++ src/theme/animation/types.ts | 21 +++++++ src/theme/index.ts | 5 ++ src/theme/types.ts | 4 ++ tests/theme/theme-animation.spec.tsx | 60 +++++++++++++++++++ 6 files changed, 149 insertions(+) create mode 100644 src/theme/animation/helper.ts create mode 100644 src/theme/animation/specs/lifesg-animation-set.ts create mode 100644 src/theme/animation/types.ts create mode 100644 tests/theme/theme-animation.spec.tsx diff --git a/src/theme/animation/helper.ts b/src/theme/animation/helper.ts new file mode 100644 index 000000000..ebcb4cf25 --- /dev/null +++ b/src/theme/animation/helper.ts @@ -0,0 +1,44 @@ +import { StyledComponentProps, getCollection, getValue } from "../helpers"; +import { AnimationScheme, ThemeCollectionSpec } from "../types"; +import { LifeSgAnimationSet } from "./specs/lifesg-animation-set"; +import { AnimationSet, AnimationSetCollectionsMap } from "./types"; + +const AnimationSpec: ThemeCollectionSpec< + AnimationSetCollectionsMap, + AnimationScheme +> = { + collections: { + lifesg: LifeSgAnimationSet, + }, + defaultValue: "lifesg", +}; + +export const getAnimationSet = (key: keyof AnimationSet) => { + return (props: StyledComponentProps): string => { + const theme = props.theme; + const animationSet: AnimationSet = getCollection( + AnimationSpec, + theme.animationScheme + ); + + if (theme.overrides && theme.overrides.animation) { + return getValue(animationSet, key, theme.overrides.animation); + } else { + return animationSet[key]; + } + }; +}; + +export const AnimationSetValues = { + "duration-150": getAnimationSet("duration-150"), + "duration-250": getAnimationSet("duration-250"), + "duration-350": getAnimationSet("duration-350"), + "duration-500": getAnimationSet("duration-500"), + "duration-800": getAnimationSet("duration-800"), + "duration-1000": getAnimationSet("duration-1000"), + + "ease-default": getAnimationSet("ease-default"), + "ease-standard": getAnimationSet("ease-standard"), + "ease-entrance": getAnimationSet("ease-entrance"), + "ease-exit": getAnimationSet("ease-exit"), +}; diff --git a/src/theme/animation/specs/lifesg-animation-set.ts b/src/theme/animation/specs/lifesg-animation-set.ts new file mode 100644 index 000000000..7188172bb --- /dev/null +++ b/src/theme/animation/specs/lifesg-animation-set.ts @@ -0,0 +1,15 @@ +import { AnimationSet } from "../types"; + +export const LifeSgAnimationSet: AnimationSet = { + "duration-150": "150ms", + "duration-250": "250ms", + "duration-350": "350ms", + "duration-500": "500ms", + "duration-800": "800ms", + "duration-1000": "1000ms", + + "ease-default": "cubic-bezier(0.45, 0.05, 0.55, 0.95)", + "ease-standard": "cubic-bezier(0.86, 0, 0.07, 1)", + "ease-entrance": "cubic-bezier(0.18, 0.13, 0, 1)", + "ease-exit": "cubic-bezier(1, 0, 0.8, 0.85)", +}; diff --git a/src/theme/animation/types.ts b/src/theme/animation/types.ts new file mode 100644 index 000000000..bb309e455 --- /dev/null +++ b/src/theme/animation/types.ts @@ -0,0 +1,21 @@ +import { AnimationScheme } from "../types"; + +export type AnimationSet = { + "duration-150": string; + "duration-250": string; + "duration-350": string; + "duration-500": string; + "duration-800": string; + "duration-1000": string; + + "ease-default": string; + "ease-standard": string; + "ease-entrance": string; + "ease-exit": string; +}; + +export type AnimationSetCollectionsMap = { + [key in AnimationScheme]: AnimationSet; +}; + +export type AnimationSetOptions = Partial; diff --git a/src/theme/index.ts b/src/theme/index.ts index 84b7afe5e..d9bae5052 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,3 +1,4 @@ +import { AnimationSetValues } from "./animation/helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; import { FontValues } from "./font/theme-helper"; @@ -13,6 +14,10 @@ export const Font = FontValues; export const Typography = TypographyValues; +export const AnimationSet = { + ...AnimationSetValues, +}; + export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", diff --git a/src/theme/types.ts b/src/theme/types.ts index bb7767613..bec5a8b08 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -2,6 +2,7 @@ import { PrimitiveColourSetOptions } from "./colour-primitive/types"; import { SemanticColourSetOptions } from "./colour-semantic/types"; import { TypographySetOptions } from "./typography/types"; import { FontSetOptions } from "./font/types"; +import { AnimationSetOptions } from "./animation/types"; export type { PrimitiveColourSet, @@ -24,17 +25,20 @@ export type ColourScheme = | "ccube"; export type FontScheme = "lifesg" | "bookingsg" | "rbs" | "mylegacy" | "ccube"; +export type AnimationScheme = "lifesg"; export interface ThemeSpecOptions { primitiveColour?: PrimitiveColourSetOptions | undefined; semanticColour?: SemanticColourSetOptions | undefined; font?: FontSetOptions | undefined; + animation?: AnimationSetOptions | undefined; typography?: TypographySetOptions | undefined; } export interface ThemeSpec { colourScheme: ColourScheme; fontScheme: FontScheme; + animationScheme?: AnimationScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/tests/theme/theme-animation.spec.tsx b/tests/theme/theme-animation.spec.tsx new file mode 100644 index 000000000..fdc6436c9 --- /dev/null +++ b/tests/theme/theme-animation.spec.tsx @@ -0,0 +1,60 @@ +import "jest-styled-components"; +import styled, { ThemeProvider } from "styled-components"; +import { render } from "@testing-library/react"; +import { AnimationSet } from "../../src"; +import { ThemeSpec } from "../../src/theme/types"; + +const StyledAnimationTest = styled.div` + transition: transform ${AnimationSet["duration-500"]}, + ${AnimationSet["ease-default"]}; +`; + +describe("StyledAnimationTest", () => { + it("should apply correct animation styles based on the theme", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + animationScheme: "lifesg", + }; + + const duration = "500ms"; + const easing = "cubic-bezier(0.45,0.05,0.55,0.95)"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule( + "transition", + `transform ${duration}, ${easing}` + ); + }); + + it("should apply correct animation styles when overriding animation token", () => { + const overrideTheme: ThemeSpec = { + colourScheme: "lifesg", + animationScheme: "lifesg", + overrides: { + animation: { + "duration-500": "700ms", + "ease-default": "cubic-bezier(0.25,0.1,0.25,1)", + }, + }, + }; + + const duration = "700ms"; + const easing = "cubic-bezier(0.25,0.1,0.25,1)"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule( + "transition", + `transform ${duration}, ${easing}` + ); + }); +}); From a7e7a6aac832d3d432807d704b2846d63cde025e Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Wed, 28 Aug 2024 11:14:23 +0800 Subject: [PATCH 0390/1949] [BOOKINGSG-6086][JH] change CountdownTimer to use Math.floor instead of ceil for more accurate countdowns --- src/countdown-timer/use-timer.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/countdown-timer/use-timer.tsx b/src/countdown-timer/use-timer.tsx index e1bbc791d..56fe4a7c5 100644 --- a/src/countdown-timer/use-timer.tsx +++ b/src/countdown-timer/use-timer.tsx @@ -8,7 +8,10 @@ export const useTimer = ( // ============================================================================= // CONST, STATE, REF // ============================================================================= - const [remainingSeconds, setRemainingSeconds] = useState(seconds); + // -1 to match Math.floor behavior (initial state only affects first displayed number) + const [remainingSeconds, setRemainingSeconds] = useState( + seconds - 1 + ); // ============================================================================= // EFFECTS @@ -37,7 +40,7 @@ export const useTimer = ( // HELPER FUNCTIONS // ========================================================================= const calculateRemainingSecondsFromTimestamp = (timestamp: number) => - Math.max(Math.ceil((timestamp - Date.now()) / 1000), 0); + Math.max(Math.floor((timestamp - Date.now()) / 1000), 0); return [remainingSeconds] as const; }; From 46a9b775d517d10e93e1ccfe9b532fd011085dc8 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Wed, 28 Aug 2024 11:15:27 +0800 Subject: [PATCH 0391/1949] [FILTER][JH] fix typo for toggleFilterButtonType -> Style --- stories/filter/props-table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/filter/props-table.tsx b/stories/filter/props-table.tsx index e8abfaf11..c03836d3c 100644 --- a/stories/filter/props-table.tsx +++ b/stories/filter/props-table.tsx @@ -40,7 +40,7 @@ const FILTER_DATA: ApiTableSectionProps[] = [ defaultValue: `"Filters"`, }, { - name: "toggleFilterButtonType", + name: "toggleFilterButtonStyle", description: "The style type of the filter toggle button (in mobile)", propTypes: [`"default"`, `"secondary"`, `"light"`, `"link"`], From 90d1223a9e9ea773f88bb5fd38f6c204de20ac83 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 28 Aug 2024 11:35:02 +0800 Subject: [PATCH 0392/1949] [CCUBE-1533][MAHI]Made some changes to name convention and exports --- src/theme/animation/{helper.ts => theme-helper.ts} | 0 src/theme/index.ts | 6 ++---- src/theme/types.ts | 2 ++ tests/theme/theme-animation.spec.tsx | 2 ++ 4 files changed, 6 insertions(+), 4 deletions(-) rename src/theme/animation/{helper.ts => theme-helper.ts} (100%) diff --git a/src/theme/animation/helper.ts b/src/theme/animation/theme-helper.ts similarity index 100% rename from src/theme/animation/helper.ts rename to src/theme/animation/theme-helper.ts diff --git a/src/theme/index.ts b/src/theme/index.ts index d9bae5052..178f0e6aa 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,4 +1,4 @@ -import { AnimationSetValues } from "./animation/helper"; +import { AnimationSetValues } from "./animation/theme-helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; import { FontValues } from "./font/theme-helper"; @@ -14,9 +14,7 @@ export const Font = FontValues; export const Typography = TypographyValues; -export const AnimationSet = { - ...AnimationSetValues, -}; +export const AnimationSet = AnimationSetValues; export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", diff --git a/src/theme/types.ts b/src/theme/types.ts index bec5a8b08..87ea90c3b 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -17,6 +17,8 @@ export type { FontSet, FontSetOptions } from "./font/types"; export type { TypographySet, TypographySetOptions } from "./typography/types"; +export type { AnimationSet, AnimationSetOptions } from "./animation/types"; + export type ColourScheme = | "lifesg" | "bookingsg" diff --git a/tests/theme/theme-animation.spec.tsx b/tests/theme/theme-animation.spec.tsx index fdc6436c9..606db3404 100644 --- a/tests/theme/theme-animation.spec.tsx +++ b/tests/theme/theme-animation.spec.tsx @@ -13,6 +13,7 @@ describe("StyledAnimationTest", () => { it("should apply correct animation styles based on the theme", () => { const mockTheme: ThemeSpec = { colourScheme: "lifesg", + fontScheme: "lifesg", animationScheme: "lifesg", }; @@ -34,6 +35,7 @@ describe("StyledAnimationTest", () => { it("should apply correct animation styles when overriding animation token", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", + fontScheme: "lifesg", animationScheme: "lifesg", overrides: { animation: { From 94d1bb8535e4a0ea0a02cbca328bbf399f56f858 Mon Sep 17 00:00:00 2001 From: Jian Sheng Date: Wed, 28 Aug 2024 14:22:43 +0800 Subject: [PATCH 0393/1949] [BOOKINGSG-5935][JS] prevent rendering of empty div if no title and expand/collapse button --- src/accordion/accordion.tsx | 32 ++++++++++++++++--------- stories/accordion/accordion.mdx | 6 +++++ stories/accordion/accordion.stories.tsx | 31 ++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/src/accordion/accordion.tsx b/src/accordion/accordion.tsx index c68e39b40..d6fe71c0a 100644 --- a/src/accordion/accordion.tsx +++ b/src/accordion/accordion.tsx @@ -39,20 +39,30 @@ const AccordionBase = ({ ); }; + const renderTitleWrapper = () => { + if (!title && !enableExpandAll) { + return null; + } + + return ( + + {title && ( + + {title} + + )} + {enableExpandAll && renderCollapseExpandAll()} + + ); + }; + return ( - - {title && ( - - {title} - - )} - {enableExpandAll && renderCollapseExpandAll()} - + {renderTitleWrapper()} {children} diff --git a/stories/accordion/accordion.mdx b/stories/accordion/accordion.mdx index c9598632e..c9a0e71fa 100644 --- a/stories/accordion/accordion.mdx +++ b/stories/accordion/accordion.mdx @@ -36,6 +36,12 @@ If you do not require a title in the `Accordion`, simply omit the `title` prop. +No Expand/Collapse + +If you do not require a expand/collapse button in the `Accordion`, use `enableExpandAll={false}`. + + + Component API diff --git a/stories/accordion/accordion.stories.tsx b/stories/accordion/accordion.stories.tsx index e1e6f3777..46f42180a 100644 --- a/stories/accordion/accordion.stories.tsx +++ b/stories/accordion/accordion.stories.tsx @@ -141,3 +141,34 @@ export const NoTitle: StoryObj = { ); }, }; + +export const NoExpandCollapse: StoryObj = { + render: () => { + return ( + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore + magna aliqua. Ut enim ad minim veniam, quis nostrud + exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor  + + see more here + + . + + + + ); + }, +}; From 289c8b3ae4d443795fd123b50e429a8cc86ee3fe Mon Sep 17 00:00:00 2001 From: jiansheng-gt <53549383+jiansheng-gt@users.noreply.github.com> Date: Thu, 29 Aug 2024 10:17:16 +0800 Subject: [PATCH 0394/1949] [BOOKINGSG-5935][JS] update title and description Co-authored-by: weili --- stories/accordion/accordion.mdx | 4 ++-- stories/accordion/accordion.stories.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/stories/accordion/accordion.mdx b/stories/accordion/accordion.mdx index c9a0e71fa..8442b615f 100644 --- a/stories/accordion/accordion.mdx +++ b/stories/accordion/accordion.mdx @@ -36,9 +36,9 @@ If you do not require a title in the `Accordion`, simply omit the `title` prop. -No Expand/Collapse +No Expand/Collapse All -If you do not require a expand/collapse button in the `Accordion`, use `enableExpandAll={false}`. +If you do not require a expand/collapse all button in the `Accordion`, use `enableExpandAll={false}`. diff --git a/stories/accordion/accordion.stories.tsx b/stories/accordion/accordion.stories.tsx index 46f42180a..68ac7b7bb 100644 --- a/stories/accordion/accordion.stories.tsx +++ b/stories/accordion/accordion.stories.tsx @@ -142,7 +142,7 @@ export const NoTitle: StoryObj = { }, }; -export const NoExpandCollapse: StoryObj = { +export const NoExpandCollapseAll: StoryObj = { render: () => { return ( From 334ee00394cf03fa96efca5fda108fd2c508bc8e Mon Sep 17 00:00:00 2001 From: Jian Sheng Date: Thu, 29 Aug 2024 10:19:26 +0800 Subject: [PATCH 0395/1949] [BOOKINGSG-5935][JS] fix accordion styling for mobile --- src/accordion/accordion.style.tsx | 16 +++++++++++++--- src/accordion/accordion.tsx | 7 +++++-- src/accordion/types.ts | 3 ++- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/accordion/accordion.style.tsx b/src/accordion/accordion.style.tsx index 11074a6d2..92255f04a 100644 --- a/src/accordion/accordion.style.tsx +++ b/src/accordion/accordion.style.tsx @@ -1,7 +1,7 @@ import styled, { css } from "styled-components"; import { Button } from "../button"; -import { MediaQuery } from "../media"; import { Color } from "../color"; +import { MediaQuery } from "../media"; import { Text } from "../text/text"; import { TitleStyleProps, TitleWrapperStyleProps } from "./types"; @@ -15,13 +15,23 @@ export const Content = styled.div` export const TitleWrapper = styled.div` display: flex; - flex-direction: ${(props) => (props.$hasTitle ? "row" : "column")}; - align-items: ${(props) => (props.$hasTitle ? "center" : "flex-end")}; + flex-direction: row; + align-items: center; + justify-content: flex-end; padding-bottom: 1rem; ${MediaQuery.MaxWidth.mobileL} { justify-content: flex-end; } + + ${(props) => { + if (!props.$showTitleInMobile && !props.$hasExpandAll) { + return css` + display: none; + visibility: hidden; + `; + } + }} `; export const Title = styled(Text.H2)` diff --git a/src/accordion/accordion.tsx b/src/accordion/accordion.tsx index d6fe71c0a..3fdc70a1e 100644 --- a/src/accordion/accordion.tsx +++ b/src/accordion/accordion.tsx @@ -1,4 +1,5 @@ import React, { useState } from "react"; +import { AccordionContext } from "./accordion-context"; import { AccordionItem } from "./accordion-item"; import { Content, @@ -7,7 +8,6 @@ import { TitleWrapper, } from "./accordion.style"; import { AccordionProps } from "./types"; -import { AccordionContext } from "./accordion-context"; const AccordionBase = ({ children, @@ -45,7 +45,10 @@ const AccordionBase = ({ } return ( - + {title && ( Date: Thu, 29 Aug 2024 17:22:45 +0800 Subject: [PATCH 0396/1949] [BOOKINGSG-6086][JH] refactor useTimer to be more accurate for timestamp usage --- src/countdown-timer/use-timer.tsx | 42 ++++++++++++++++--------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/countdown-timer/use-timer.tsx b/src/countdown-timer/use-timer.tsx index 56fe4a7c5..01a819b97 100644 --- a/src/countdown-timer/use-timer.tsx +++ b/src/countdown-timer/use-timer.tsx @@ -8,39 +8,41 @@ export const useTimer = ( // ============================================================================= // CONST, STATE, REF // ============================================================================= - // -1 to match Math.floor behavior (initial state only affects first displayed number) - const [remainingSeconds, setRemainingSeconds] = useState<number>( - seconds - 1 - ); + const [remainingSeconds, setRemainingSeconds] = useState<number>(seconds); // ============================================================================= // EFFECTS // ============================================================================= useEffect(() => { if (!isPlaying) return; - if (endTime) - setRemainingSeconds( - calculateRemainingSecondsFromTimestamp(endTime) - ); - const startTime = Date.now(); - const intervalId = setInterval(() => { - const countdown = calculateRemainingSecondsFromTimestamp( - endTime ?? startTime + seconds * 1000 - ); + const targetTime = endTime ?? Date.now() + seconds * 1000; + const timeoutId = runCountdown(targetTime); - setRemainingSeconds(countdown); - if (countdown <= 0) clearInterval(intervalId); - }, 1000); - - return () => clearInterval(intervalId); + return () => clearTimeout(timeoutId); }, [endTime, isPlaying, seconds]); // ========================================================================= // HELPER FUNCTIONS // ========================================================================= - const calculateRemainingSecondsFromTimestamp = (timestamp: number) => - Math.max(Math.floor((timestamp - Date.now()) / 1000), 0); + const runCountdown = (timestamp: number) => { + const updateCountdown = () => { + const msToEnd = timestamp - Date.now(); + const driftTime = msToEnd % 1000; + const countdown = Math.max(Math.round(msToEnd / 1000), 0); + + setRemainingSeconds(countdown); + if (countdown === 0) return; + + const timeoutId = setTimeout( + updateCountdown, + driftTime > 500 ? driftTime : driftTime + 1000 + ); + + return timeoutId; + }; + return updateCountdown(); + }; return [remainingSeconds] as const; }; From 8bf03626e81077c2e4ab6d55ef1ceb60467d591b Mon Sep 17 00:00:00 2001 From: Jian Sheng <jiansheng.govtech@outlook.com> Date: Fri, 30 Aug 2024 09:41:37 +0800 Subject: [PATCH 0397/1949] [BOOKINGSG-5935][JS] fix error in accordion story --- stories/accordion/accordion.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/accordion/accordion.mdx b/stories/accordion/accordion.mdx index 8442b615f..74f498cf6 100644 --- a/stories/accordion/accordion.mdx +++ b/stories/accordion/accordion.mdx @@ -40,7 +40,7 @@ If you do not require a title in the `Accordion`, simply omit the `title` prop. If you do not require a expand/collapse all button in the `Accordion`, use `enableExpandAll={false}`. -<Canvas of={AccordionStories.NoExpandCollapse} /> +<Canvas of={AccordionStories.NoExpandCollapseAll} /> <Secondary>Component API</Secondary> From 1959b0016f61d65e46aacd545e9c112e9921ea3a Mon Sep 17 00:00:00 2001 From: Jian Sheng <jiansheng.govtech@outlook.com> Date: Fri, 30 Aug 2024 09:42:35 +0800 Subject: [PATCH 0398/1949] [BOOKINGSG-5935][JS] fix accordion styling --- src/accordion/accordion.style.tsx | 5 +++-- src/accordion/accordion.tsx | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/accordion/accordion.style.tsx b/src/accordion/accordion.style.tsx index 92255f04a..bff9b093c 100644 --- a/src/accordion/accordion.style.tsx +++ b/src/accordion/accordion.style.tsx @@ -27,8 +27,9 @@ export const TitleWrapper = styled.div<TitleWrapperStyleProps>` ${(props) => { if (!props.$showTitleInMobile && !props.$hasExpandAll) { return css` - display: none; - visibility: hidden; + ${MediaQuery.MaxWidth.mobileL} { + display: none; + } `; } }} diff --git a/src/accordion/accordion.tsx b/src/accordion/accordion.tsx index 3fdc70a1e..0c045df90 100644 --- a/src/accordion/accordion.tsx +++ b/src/accordion/accordion.tsx @@ -52,7 +52,7 @@ const AccordionBase = ({ {title && ( <Title $showInMobile={showTitleInMobile} - data-testid={"accordion-title"} + data-testid="accordion-title" > {title} From 84305bf948b802248917c1c6c4122b2a90d26491 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Mon, 2 Sep 2024 10:38:26 +0800 Subject: [PATCH 0399/1949] [BOOKINGSG-6108][JH] refocus on day field if date is cleared when using keyboard input --- .../standalone-date-input/standalone-date-input.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/shared/standalone-date-input/standalone-date-input.tsx b/src/shared/standalone-date-input/standalone-date-input.tsx index f8979d46b..6ab262686 100644 --- a/src/shared/standalone-date-input/standalone-date-input.tsx +++ b/src/shared/standalone-date-input/standalone-date-input.tsx @@ -87,6 +87,15 @@ export const Component = ( setDayValue(day); setMonthValue(month); setYearValue(year); + + // re-focus on day input if all 3 inputs get cleared while typing + if ( + !day && + !month && + !year && + nodeRef.current.contains(document.activeElement) + ) + dayInputRef.current.focus(); }, [value]); useEffect(() => { From 0f03dfaeb85fe739eecaeb84609d046da4097106 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Mon, 2 Sep 2024 16:15:14 +0800 Subject: [PATCH 0400/1949] [MISC][WL] v2.7.0-canary.7 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 492428436..28f1502e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.6", + "version": "2.7.0-canary.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.6", + "version": "2.7.0-canary.7", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 1b1fe61c9..475802d7d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.6", + "version": "2.7.0-canary.7", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From b64c1f4b91879ea371de351ca1335040596f5275 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 4 Sep 2024 15:23:18 +0800 Subject: [PATCH 0401/1949] [CCUBE-1533][MAHI]Make animation compulsory and follow previous naming conventions --- src/theme/animation/theme-helper.ts | 28 ++++++++++++++-------------- src/theme/animation/types.ts | 2 +- src/theme/index.ts | 9 +++++++-- src/theme/types.ts | 2 +- tests/theme/theme-animation.spec.tsx | 6 +++--- tests/theme/theme-colour.spec.tsx | 3 +++ tests/theme/theme-font.spec.tsx | 3 +++ 7 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/theme/animation/theme-helper.ts b/src/theme/animation/theme-helper.ts index ebcb4cf25..57b05e2ff 100644 --- a/src/theme/animation/theme-helper.ts +++ b/src/theme/animation/theme-helper.ts @@ -1,10 +1,10 @@ import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { AnimationScheme, ThemeCollectionSpec } from "../types"; import { LifeSgAnimationSet } from "./specs/lifesg-animation-set"; -import { AnimationSet, AnimationSetCollectionsMap } from "./types"; +import { AnimationCollectionsMap, AnimationSet } from "./types"; const AnimationSpec: ThemeCollectionSpec< - AnimationSetCollectionsMap, + AnimationCollectionsMap, AnimationScheme > = { collections: { @@ -13,7 +13,7 @@ const AnimationSpec: ThemeCollectionSpec< defaultValue: "lifesg", }; -export const getAnimationSet = (key: keyof AnimationSet) => { +export const getAnimation = (key: keyof AnimationSet) => { return (props: StyledComponentProps): string => { const theme = props.theme; const animationSet: AnimationSet = getCollection( @@ -29,16 +29,16 @@ export const getAnimationSet = (key: keyof AnimationSet) => { }; }; -export const AnimationSetValues = { - "duration-150": getAnimationSet("duration-150"), - "duration-250": getAnimationSet("duration-250"), - "duration-350": getAnimationSet("duration-350"), - "duration-500": getAnimationSet("duration-500"), - "duration-800": getAnimationSet("duration-800"), - "duration-1000": getAnimationSet("duration-1000"), +export const AnimationValues = { + "duration-150": getAnimation("duration-150"), + "duration-250": getAnimation("duration-250"), + "duration-350": getAnimation("duration-350"), + "duration-500": getAnimation("duration-500"), + "duration-800": getAnimation("duration-800"), + "duration-1000": getAnimation("duration-1000"), - "ease-default": getAnimationSet("ease-default"), - "ease-standard": getAnimationSet("ease-standard"), - "ease-entrance": getAnimationSet("ease-entrance"), - "ease-exit": getAnimationSet("ease-exit"), + "ease-default": getAnimation("ease-default"), + "ease-standard": getAnimation("ease-standard"), + "ease-entrance": getAnimation("ease-entrance"), + "ease-exit": getAnimation("ease-exit"), }; diff --git a/src/theme/animation/types.ts b/src/theme/animation/types.ts index bb309e455..1f12c04c0 100644 --- a/src/theme/animation/types.ts +++ b/src/theme/animation/types.ts @@ -14,7 +14,7 @@ export type AnimationSet = { "ease-exit": string; }; -export type AnimationSetCollectionsMap = { +export type AnimationCollectionsMap = { [key in AnimationScheme]: AnimationSet; }; diff --git a/src/theme/index.ts b/src/theme/index.ts index 178f0e6aa..9a5eb3486 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,4 +1,4 @@ -import { AnimationSetValues } from "./animation/theme-helper"; +import { AnimationValues } from "./animation/theme-helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; import { FontValues } from "./font/theme-helper"; @@ -14,29 +14,34 @@ export const Font = FontValues; export const Typography = TypographyValues; -export const AnimationSet = AnimationSetValues; +export const Animation = AnimationValues; export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", }; export const BookingSGTheme: ThemeSpec = { colourScheme: "bookingsg", fontScheme: "bookingsg", + animationScheme: "lifesg", }; export const CcubeTheme: ThemeSpec = { colourScheme: "ccube", fontScheme: "ccube", + animationScheme: "lifesg", }; export const MyLegacyTheme: ThemeSpec = { colourScheme: "mylegacy", fontScheme: "mylegacy", + animationScheme: "lifesg", }; export const RBSTheme: ThemeSpec = { colourScheme: "rbs", fontScheme: "rbs", + animationScheme: "lifesg", }; diff --git a/src/theme/types.ts b/src/theme/types.ts index 87ea90c3b..84d02418d 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -40,7 +40,7 @@ export interface ThemeSpecOptions { export interface ThemeSpec { colourScheme: ColourScheme; fontScheme: FontScheme; - animationScheme?: AnimationScheme; + animationScheme: AnimationScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/tests/theme/theme-animation.spec.tsx b/tests/theme/theme-animation.spec.tsx index 606db3404..2e7d9b5c3 100644 --- a/tests/theme/theme-animation.spec.tsx +++ b/tests/theme/theme-animation.spec.tsx @@ -1,12 +1,12 @@ import "jest-styled-components"; import styled, { ThemeProvider } from "styled-components"; import { render } from "@testing-library/react"; -import { AnimationSet } from "../../src"; +import { Animation } from "../../src"; import { ThemeSpec } from "../../src/theme/types"; const StyledAnimationTest = styled.div` - transition: transform ${AnimationSet["duration-500"]}, - ${AnimationSet["ease-default"]}; + transition: transform ${Animation["duration-500"]}, + ${Animation["ease-default"]}; `; describe("StyledAnimationTest", () => { diff --git a/tests/theme/theme-colour.spec.tsx b/tests/theme/theme-colour.spec.tsx index c96ebc188..f09566957 100644 --- a/tests/theme/theme-colour.spec.tsx +++ b/tests/theme/theme-colour.spec.tsx @@ -14,6 +14,7 @@ describe("Colour Themeing Test", () => { const mockTheme: ThemeSpec = { colourScheme: "bookingsg", fontScheme: "lifesg", + animationScheme: "lifesg", }; const bgColor = "#1A122C"; @@ -36,6 +37,7 @@ describe("Colour Themeing Test", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", overrides: { primitiveColour: { "primary-10": "#fefefe", @@ -63,6 +65,7 @@ describe("Colour Themeing Test", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", overrides: { semanticColour: { "border-primary": "#fefefe", diff --git a/tests/theme/theme-font.spec.tsx b/tests/theme/theme-font.spec.tsx index 59fc81fb5..94221091f 100644 --- a/tests/theme/theme-font.spec.tsx +++ b/tests/theme/theme-font.spec.tsx @@ -18,6 +18,7 @@ describe("StyledTypographyTest", () => { const mockTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", }; const fontSize = "3rem"; @@ -44,6 +45,7 @@ describe("StyledTypographyTest", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", overrides: { typography: { "header-xxl-bold": { @@ -80,6 +82,7 @@ describe("StyledTypographyTest", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", }; const fontSize = "1.125rem"; From 90d91b439c8f3037d4035e13a2870eb218f8bde8 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Thu, 22 Aug 2024 14:20:52 +0800 Subject: [PATCH 0402/1949] [CCUBE-1534][MAHI]Set up border width and style tokens with its test case --- src/theme/border/helper.ts | 163 ++++++++++++++++++++ src/theme/border/specs/lifesg-border-set.ts | 16 ++ src/theme/border/types.ts | 22 +++ src/theme/index.ts | 2 + src/theme/types.ts | 6 + tests/theme/theme-border.spec.tsx | 141 +++++++++++++++++ 6 files changed, 350 insertions(+) create mode 100644 src/theme/border/helper.ts create mode 100644 src/theme/border/specs/lifesg-border-set.ts create mode 100644 src/theme/border/types.ts create mode 100644 tests/theme/theme-border.spec.tsx diff --git a/src/theme/border/helper.ts b/src/theme/border/helper.ts new file mode 100644 index 000000000..5d017c463 --- /dev/null +++ b/src/theme/border/helper.ts @@ -0,0 +1,163 @@ +import { css } from "styled-components"; +import { StyledComponentProps, getCollection, getValue } from "../helpers"; +import { BorderScheme, ThemeCollectionSpec } from "../types"; +import { BorderCollectionMap, BorderSet, StyleProps } from "./types"; +import { LifeSgBorderSet } from "./specs/lifesg-border-set"; + +const BorderSpec: ThemeCollectionSpec = { + collections: { + lifesg: LifeSgBorderSet, + }, + defaultValue: "lifesg", +}; + +export const dashedBorderStyle = + ( + thickness: number | ((props: any) => string), + color: string | ((props: any) => string) + ) => + (props: StyleProps) => { + // Resolve thickness + const resolvedThickness = + typeof thickness === "function" + ? thickness(props) + : `${thickness}px`; + + // Resolve color + const resolvedColor = + typeof color === "function" ? color(props) : color; + + const encodedColor = encodeURIComponent(resolvedColor); + const strokeWidth = parseInt(resolvedThickness) + 1; + + console.log( + "TO CHECK CSS BLOCK AND SEE IF ITS WORKING:", + ` + background-color: transparent; + height: ${resolvedThickness}; + background-repeat: repeat-x; + background-image: url('data:image/svg+xml,'); + ` + ); + + return css` + background-color: transparent; + height: ${resolvedThickness}; + background-repeat: repeat-x; + background-image: url('data:image/svg+xml,'); + `; + }; + +// export const getBorder = (key: keyof BorderSet) => { +// return (...args: any[]) => +// (props: StyledComponentProps) => { +// const theme = props.theme; +// const borderSet: BorderSet = getCollection( +// BorderSpec, +// theme.borderScheme +// ); + +// // Check for an override +// const borderValue = +// theme.overrides && theme.overrides.border +// ? getValue(borderSet, key, theme.overrides.border) +// : borderSet[key]; + +// // Log the border value and its type +// console.log("borderValue:", borderValue); +// console.log("borderValue type:", typeof borderValue); + +// // If function type check for arguments and then resolve it with props +// if (typeof borderValue === "function") { +// console.log("Arguments passed:", args); +// console.log("Props passed to function:", props); + +// const result = (borderValue as (...args: any[]) => any)( +// ...(args.length ? args : [undefined, undefined]) +// )(props); + +// console.log("Result of function call:", result); + +// return css` +// ${result} +// `; +// } + +// // If number make it return a pixel string +// if (typeof borderValue === "number") { +// const pixelBorderValue = `${borderValue}px`; +// console.log("Number borderValue:", pixelBorderValue); +// return css` +// ${pixelBorderValue} +// `; +// } + +// console.log("Final borderValue:", borderValue); +// return css` +// ${borderValue} +// `; +// }; +// }; + +export const getBorder = (key: keyof BorderSet) => { + return (...args: any[]) => + (props: StyledComponentProps) => { + const theme = props.theme; + const borderSet: BorderSet = getCollection( + BorderSpec, + theme.borderScheme + ); + + // Check for an override + const borderValue = + theme.overrides && theme.overrides.border + ? getValue(borderSet, key, theme.overrides.border) + : borderSet[key]; + + // If function type check for arguments and then resolve it with props + if (typeof borderValue === "function") { + console.log("borderValue:", borderValue); + console.log("borderValue type:", typeof borderValue); + console.log("Arguments passed:", args); + console.log("Props passed to function:", props); + + // Distinguish between props being passed as the first argument or actual arguments + const isArgsActuallyProps = + args.length === 1 && "theme" in args[0]; + const resolvedArgs = isArgsActuallyProps + ? [undefined, undefined] + : args; + + const result = (borderValue as (...args: any[]) => any)( + ...(resolvedArgs.length + ? resolvedArgs + : [undefined, undefined]) + )(props); + + console.log("Result of function call:", result); + + return css` + ${result} + `; + } + + // If number make it return a pixel string + if (typeof borderValue === "number") { + const pixelBorderValue = `${borderValue}px`; + return css` + ${pixelBorderValue} + `; + } + + console.log("Final borderValue:", borderValue); + return css` + ${borderValue} + `; + }; +}; + +export const BorderValues = { + "width-sm": getBorder("width-sm"), + solid: getBorder("solid"), + "dashed-default": getBorder("dashed-default"), +}; diff --git a/src/theme/border/specs/lifesg-border-set.ts b/src/theme/border/specs/lifesg-border-set.ts new file mode 100644 index 000000000..dcd047d3c --- /dev/null +++ b/src/theme/border/specs/lifesg-border-set.ts @@ -0,0 +1,16 @@ +import { css } from "styled-components"; +import { BorderSet } from "../types"; +import { dashedBorderStyle } from "../helper"; + +export const LifeSgBorderSet: BorderSet = { + "width-sm": 1, + + solid: "solid", + + "dashed-default": ( + thickness: number | ((props: any) => string) = 1, + color: string | ((props: any) => string) = "black" + ) => { + return dashedBorderStyle(thickness, color); + }, +}; diff --git a/src/theme/border/types.ts b/src/theme/border/types.ts new file mode 100644 index 000000000..d656acf0c --- /dev/null +++ b/src/theme/border/types.ts @@ -0,0 +1,22 @@ +import { CSSProp } from "styled-components"; +import { BorderScheme } from "../types"; + +export interface BorderSet { + "width-sm": number; + solid: string; + "dashed-default": ( + thickness?: number, + color?: string | ((props: any) => string) + ) => (props: any) => CSSProp; +} + +export interface StyleProps { + $thickness?: number | ((props: any) => string); + $color?: string | ((props: any) => string); +} + +export type BorderCollectionMap = { + [key in BorderScheme]: BorderSet; +}; + +export type BorderSetOptions = Partial; diff --git a/src/theme/index.ts b/src/theme/index.ts index 9a5eb3486..0d28281db 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,4 +1,6 @@ +import { Border } from "../time-slot-bar/time-slot-bar.styles"; import { AnimationValues } from "./animation/theme-helper"; +import { BorderValues } from "./border/helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; import { FontValues } from "./font/theme-helper"; diff --git a/src/theme/types.ts b/src/theme/types.ts index 84d02418d..aa090a842 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -3,6 +3,7 @@ import { SemanticColourSetOptions } from "./colour-semantic/types"; import { TypographySetOptions } from "./typography/types"; import { FontSetOptions } from "./font/types"; import { AnimationSetOptions } from "./animation/types"; +import { BorderSetOptions } from "./border/types"; export type { PrimitiveColourSet, @@ -19,6 +20,8 @@ export type { TypographySet, TypographySetOptions } from "./typography/types"; export type { AnimationSet, AnimationSetOptions } from "./animation/types"; +export type { BorderSet, BorderSetOptions } from "./border/types"; + export type ColourScheme = | "lifesg" | "bookingsg" @@ -28,12 +31,14 @@ export type ColourScheme = export type FontScheme = "lifesg" | "bookingsg" | "rbs" | "mylegacy" | "ccube"; export type AnimationScheme = "lifesg"; +export type BorderScheme = "lifesg"; export interface ThemeSpecOptions { primitiveColour?: PrimitiveColourSetOptions | undefined; semanticColour?: SemanticColourSetOptions | undefined; font?: FontSetOptions | undefined; animation?: AnimationSetOptions | undefined; + border?: BorderSetOptions | undefined; typography?: TypographySetOptions | undefined; } @@ -41,6 +46,7 @@ export interface ThemeSpec { colourScheme: ColourScheme; fontScheme: FontScheme; animationScheme: AnimationScheme; + borderScheme?: BorderScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/tests/theme/theme-border.spec.tsx b/tests/theme/theme-border.spec.tsx new file mode 100644 index 000000000..0e8979aaa --- /dev/null +++ b/tests/theme/theme-border.spec.tsx @@ -0,0 +1,141 @@ +import "jest-styled-components"; +import styled, { ThemeProvider } from "styled-components"; +import { render } from "@testing-library/react"; +import { ThemeSpec } from "../../src/theme/types"; +import { BorderValues } from "../../src/theme/border/helper"; + +const StyledBorderComponent = styled.div` + border: ${BorderValues["width-sm"]} ${BorderValues.solid}; + border-top: ${BorderValues["dashed-default"]}; +`; + +describe("Border Theming Test", () => { + it("should apply correct border styles based on the theme", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + borderScheme: "lifesg", + }; + + // Constants for border-top (dashed-default) + const thickness = "1px"; + const color = "black"; + const strokeWidth = 2; + // Stroke width is thickeness + 1 + + const expectedSvg = ``; + + const { container } = render( + + + + ); + + const receivedBorderStyle = getComputedStyle( + container.firstElementChild + ).border; + + expect(receivedBorderStyle).toBe("1px solid"); + + // expect(container.firstChild).toHaveStyleRule( + // "background-color", + // "transparent" + // ); + expect(container.firstChild).toHaveStyleRule("height", thickness); + expect(container.firstChild).toHaveStyleRule( + "background-repeat", + "repeat-x" + ); + expect(container.firstChild).toHaveStyleRule( + "background-image", + `url('data:image/svg+xml,${expectedSvg}')` + ); + }); + + it("should apply correct border styles when overriding border color in dashed-default", () => { + const StyledBorderComponentDash = styled.div` + border: ${BorderValues["width-sm"]} ${BorderValues.solid}; + border-top: ${BorderValues["dashed-default"](2, "red")}; + `; + + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + borderScheme: "lifesg", + }; + + const dashThickness = "2px"; + const dashColor = "red"; + const dashStrokeWidth = parseInt(dashThickness) + 1; + const dashExpectedSvg = ``; + + const { container } = render( + + + + ); + + const receivedBorderStyle = getComputedStyle( + container.firstElementChild + ).border; + + expect(receivedBorderStyle).toBe("1px solid"); + + // expect(container.firstChild).toHaveStyleRule( + // "background-color", + // "transparent" + // ); + expect(container.firstChild).toHaveStyleRule("height", dashThickness); + expect(container.firstChild).toHaveStyleRule( + "background-repeat", + "repeat-x" + ); + expect(container.firstChild).toHaveStyleRule( + "background-image", + `url('data:image/svg+xml,${dashExpectedSvg}')` + ); + }); + + it("should apply correct border styles based on the override for the border", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + borderScheme: "lifesg", + overrides: { + border: { + "width-sm": 3, + }, + }, + }; + + // Constants for border-top (dashed-default) + const thickness = "1px"; + const color = "black"; + const strokeWidth = 2; + + const expectedSvg = ``; + + const { container } = render( + + + + ); + + const receivedBorderStyle = getComputedStyle( + container.firstElementChild + ).border; + + expect(receivedBorderStyle).toBe("3px solid"); + + // expect(container.firstChild).toHaveStyleRule( + // "background-color", + // "transparent" + // ); + expect(container.firstChild).toHaveStyleRule("height", thickness); + expect(container.firstChild).toHaveStyleRule( + "background-repeat", + "repeat-x" + ); + expect(container.firstChild).toHaveStyleRule( + "background-image", + `url('data:image/svg+xml,${expectedSvg}')` + ); + }); +}); From 03115ebe990c8173f79d11b1a62c504eb577afeb Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Fri, 23 Aug 2024 14:50:56 +0800 Subject: [PATCH 0403/1949] [CCUBE-1534][MAHI]Worked around a bug for the return css styling of dashedBorderStyle --- src/theme/border/helper.ts | 61 +++---------------------------- tests/theme/theme-border.spec.tsx | 24 ++++++------ 2 files changed, 17 insertions(+), 68 deletions(-) diff --git a/src/theme/border/helper.ts b/src/theme/border/helper.ts index 5d017c463..70f59e077 100644 --- a/src/theme/border/helper.ts +++ b/src/theme/border/helper.ts @@ -41,6 +41,7 @@ export const dashedBorderStyle = ); return css` + z-index: 1; background-color: transparent; height: ${resolvedThickness}; background-repeat: repeat-x; @@ -48,57 +49,6 @@ export const dashedBorderStyle = `; }; -// export const getBorder = (key: keyof BorderSet) => { -// return (...args: any[]) => -// (props: StyledComponentProps) => { -// const theme = props.theme; -// const borderSet: BorderSet = getCollection( -// BorderSpec, -// theme.borderScheme -// ); - -// // Check for an override -// const borderValue = -// theme.overrides && theme.overrides.border -// ? getValue(borderSet, key, theme.overrides.border) -// : borderSet[key]; - -// // Log the border value and its type -// console.log("borderValue:", borderValue); -// console.log("borderValue type:", typeof borderValue); - -// // If function type check for arguments and then resolve it with props -// if (typeof borderValue === "function") { -// console.log("Arguments passed:", args); -// console.log("Props passed to function:", props); - -// const result = (borderValue as (...args: any[]) => any)( -// ...(args.length ? args : [undefined, undefined]) -// )(props); - -// console.log("Result of function call:", result); - -// return css` -// ${result} -// `; -// } - -// // If number make it return a pixel string -// if (typeof borderValue === "number") { -// const pixelBorderValue = `${borderValue}px`; -// console.log("Number borderValue:", pixelBorderValue); -// return css` -// ${pixelBorderValue} -// `; -// } - -// console.log("Final borderValue:", borderValue); -// return css` -// ${borderValue} -// `; -// }; -// }; - export const getBorder = (key: keyof BorderSet) => { return (...args: any[]) => (props: StyledComponentProps) => { @@ -114,17 +64,16 @@ export const getBorder = (key: keyof BorderSet) => { ? getValue(borderSet, key, theme.overrides.border) : borderSet[key]; - // If function type check for arguments and then resolve it with props + // If function resolve it with props if (typeof borderValue === "function") { console.log("borderValue:", borderValue); console.log("borderValue type:", typeof borderValue); console.log("Arguments passed:", args); console.log("Props passed to function:", props); - // Distinguish between props being passed as the first argument or actual arguments - const isArgsActuallyProps = - args.length === 1 && "theme" in args[0]; - const resolvedArgs = isArgsActuallyProps + // Check if props being passed as the arg + const isArgsProps = args.length === 1 && "theme" in args[0]; + const resolvedArgs = isArgsProps ? [undefined, undefined] : args; diff --git a/tests/theme/theme-border.spec.tsx b/tests/theme/theme-border.spec.tsx index 0e8979aaa..b319e673c 100644 --- a/tests/theme/theme-border.spec.tsx +++ b/tests/theme/theme-border.spec.tsx @@ -36,10 +36,10 @@ describe("Border Theming Test", () => { expect(receivedBorderStyle).toBe("1px solid"); - // expect(container.firstChild).toHaveStyleRule( - // "background-color", - // "transparent" - // ); + expect(container.firstChild).toHaveStyleRule( + "background-color", + "transparent" + ); expect(container.firstChild).toHaveStyleRule("height", thickness); expect(container.firstChild).toHaveStyleRule( "background-repeat", @@ -79,10 +79,10 @@ describe("Border Theming Test", () => { expect(receivedBorderStyle).toBe("1px solid"); - // expect(container.firstChild).toHaveStyleRule( - // "background-color", - // "transparent" - // ); + expect(container.firstChild).toHaveStyleRule( + "background-color", + "transparent" + ); expect(container.firstChild).toHaveStyleRule("height", dashThickness); expect(container.firstChild).toHaveStyleRule( "background-repeat", @@ -124,10 +124,10 @@ describe("Border Theming Test", () => { expect(receivedBorderStyle).toBe("3px solid"); - // expect(container.firstChild).toHaveStyleRule( - // "background-color", - // "transparent" - // ); + expect(container.firstChild).toHaveStyleRule( + "background-color", + "transparent" + ); expect(container.firstChild).toHaveStyleRule("height", thickness); expect(container.firstChild).toHaveStyleRule( "background-repeat", From d4919697a926e8ff6553c8a5b16a77d63868b2d1 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 28 Aug 2024 12:30:51 +0800 Subject: [PATCH 0404/1949] [CCUBE-1534][MAHI]Cleaned up helper function and edited imports and typing for border token --- src/theme/border/helper.ts | 21 ++------------------- src/theme/index.ts | 4 ++++ src/theme/types.ts | 2 +- tests/theme/theme-border.spec.tsx | 13 ++++++++----- 4 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/theme/border/helper.ts b/src/theme/border/helper.ts index 70f59e077..76ca03681 100644 --- a/src/theme/border/helper.ts +++ b/src/theme/border/helper.ts @@ -30,18 +30,9 @@ export const dashedBorderStyle = const encodedColor = encodeURIComponent(resolvedColor); const strokeWidth = parseInt(resolvedThickness) + 1; - console.log( - "TO CHECK CSS BLOCK AND SEE IF ITS WORKING:", - ` - background-color: transparent; - height: ${resolvedThickness}; - background-repeat: repeat-x; - background-image: url('data:image/svg+xml,'); - ` - ); - return css` - z-index: 1; + /* Added extra background-color styling to resolve improper wrapping of css styling when used. */ + background-color: transparent; background-color: transparent; height: ${resolvedThickness}; background-repeat: repeat-x; @@ -66,11 +57,6 @@ export const getBorder = (key: keyof BorderSet) => { // If function resolve it with props if (typeof borderValue === "function") { - console.log("borderValue:", borderValue); - console.log("borderValue type:", typeof borderValue); - console.log("Arguments passed:", args); - console.log("Props passed to function:", props); - // Check if props being passed as the arg const isArgsProps = args.length === 1 && "theme" in args[0]; const resolvedArgs = isArgsProps @@ -83,8 +69,6 @@ export const getBorder = (key: keyof BorderSet) => { : [undefined, undefined]) )(props); - console.log("Result of function call:", result); - return css` ${result} `; @@ -98,7 +82,6 @@ export const getBorder = (key: keyof BorderSet) => { `; } - console.log("Final borderValue:", borderValue); return css` ${borderValue} `; diff --git a/src/theme/index.ts b/src/theme/index.ts index 0d28281db..230bd8f8c 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -4,6 +4,8 @@ import { BorderValues } from "./border/helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; import { FontValues } from "./font/theme-helper"; +import { RadiusSetValue } from "./radius/helper"; +import { SpacingSetValue } from "./spacing/helper"; import { ThemeSpec } from "./types"; import { TypographyValues } from "./typography/theme-helper"; @@ -18,6 +20,8 @@ export const Typography = TypographyValues; export const Animation = AnimationValues; +export const BorderSet = BorderValues; + export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", diff --git a/src/theme/types.ts b/src/theme/types.ts index aa090a842..999351280 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -46,7 +46,7 @@ export interface ThemeSpec { colourScheme: ColourScheme; fontScheme: FontScheme; animationScheme: AnimationScheme; - borderScheme?: BorderScheme; + borderScheme?: BorderScheme | undefined; overrides?: ThemeSpecOptions | undefined; } diff --git a/tests/theme/theme-border.spec.tsx b/tests/theme/theme-border.spec.tsx index b319e673c..b406f8694 100644 --- a/tests/theme/theme-border.spec.tsx +++ b/tests/theme/theme-border.spec.tsx @@ -2,17 +2,18 @@ import "jest-styled-components"; import styled, { ThemeProvider } from "styled-components"; import { render } from "@testing-library/react"; import { ThemeSpec } from "../../src/theme/types"; -import { BorderValues } from "../../src/theme/border/helper"; +import { BorderSet } from "../../src"; const StyledBorderComponent = styled.div` - border: ${BorderValues["width-sm"]} ${BorderValues.solid}; - border-top: ${BorderValues["dashed-default"]}; + border: ${BorderSet["width-sm"]} ${BorderSet.solid}; + border-top: ${BorderSet["dashed-default"]}; `; describe("Border Theming Test", () => { it("should apply correct border styles based on the theme", () => { const mockTheme: ThemeSpec = { colourScheme: "lifesg", + fontScheme: "lifesg", borderScheme: "lifesg", }; @@ -53,12 +54,13 @@ describe("Border Theming Test", () => { it("should apply correct border styles when overriding border color in dashed-default", () => { const StyledBorderComponentDash = styled.div` - border: ${BorderValues["width-sm"]} ${BorderValues.solid}; - border-top: ${BorderValues["dashed-default"](2, "red")}; + border: ${BorderSet["width-sm"]} ${BorderSet.solid}; + border-top: ${BorderSet["dashed-default"](2, "red")}; `; const mockTheme: ThemeSpec = { colourScheme: "lifesg", + fontScheme: "lifesg", borderScheme: "lifesg", }; @@ -97,6 +99,7 @@ describe("Border Theming Test", () => { it("should apply correct border styles based on the override for the border", () => { const mockTheme: ThemeSpec = { colourScheme: "lifesg", + fontScheme: "lifesg", borderScheme: "lifesg", overrides: { border: { From b219b06dd28c2187581e595e242e642f4768264c Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 28 Aug 2024 12:42:34 +0800 Subject: [PATCH 0405/1949] [CCUBE-1534][MAHI]Removed wrong imports --- src/theme/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/theme/index.ts b/src/theme/index.ts index 230bd8f8c..bb87b493c 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -4,8 +4,6 @@ import { BorderValues } from "./border/helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; import { FontValues } from "./font/theme-helper"; -import { RadiusSetValue } from "./radius/helper"; -import { SpacingSetValue } from "./spacing/helper"; import { ThemeSpec } from "./types"; import { TypographyValues } from "./typography/theme-helper"; From 89ed328b74dd011a143227d2cfbef0fe710b4b6c Mon Sep 17 00:00:00 2001 From: roll Date: Sat, 17 Aug 2024 16:43:40 +0800 Subject: [PATCH 0406/1949] [V3][RL] Reorganise docs for deprecated modules --- stories/{color => v2_color}/a-color.mdx | 0 stories/{color => v2_color}/base-color.mdx | 0 stories/{color => v2_color}/bsg-color.mdx | 0 stories/{color => v2_color}/ccube-color.mdx | 0 stories/{color => v2_color}/doc-color-palette.tsx | 0 stories/{color => v2_color}/mylegacy-color.mdx | 0 stories/{color => v2_color}/oneservice-color.mdx | 0 stories/{color => v2_color}/rbs-color.mdx | 0 stories/{layout => v2_layout}/col-div-props-table.tsx | 0 stories/{layout => v2_layout}/col-div.mdx | 0 stories/{layout => v2_layout}/col-div.stories.tsx | 0 stories/{layout => v2_layout}/doc-elements.tsx | 0 stories/{layout => v2_layout}/layout.mdx | 0 stories/{layout => v2_layout}/layout.stories.tsx | 0 stories/{layout => v2_layout}/props-table.tsx | 0 stories/{text => v2_text}/a-intro.mdx | 0 stories/{text => v2_text}/a-intro.stories.tsx | 0 stories/{text => v2_text}/b-advanced.mdx | 0 stories/{text => v2_text}/b-advanced.stories.tsx | 0 stories/{text => v2_text}/c-base-collection.mdx | 0 stories/{text => v2_text}/collection-doc-elements.tsx | 0 stories/{text => v2_text}/d-oneservice-collection.mdx | 0 stories/{text => v2_text}/doc-elements.tsx | 0 stories/{text => v2_text}/props-table.tsx | 0 24 files changed, 0 insertions(+), 0 deletions(-) rename stories/{color => v2_color}/a-color.mdx (100%) rename stories/{color => v2_color}/base-color.mdx (100%) rename stories/{color => v2_color}/bsg-color.mdx (100%) rename stories/{color => v2_color}/ccube-color.mdx (100%) rename stories/{color => v2_color}/doc-color-palette.tsx (100%) rename stories/{color => v2_color}/mylegacy-color.mdx (100%) rename stories/{color => v2_color}/oneservice-color.mdx (100%) rename stories/{color => v2_color}/rbs-color.mdx (100%) rename stories/{layout => v2_layout}/col-div-props-table.tsx (100%) rename stories/{layout => v2_layout}/col-div.mdx (100%) rename stories/{layout => v2_layout}/col-div.stories.tsx (100%) rename stories/{layout => v2_layout}/doc-elements.tsx (100%) rename stories/{layout => v2_layout}/layout.mdx (100%) rename stories/{layout => v2_layout}/layout.stories.tsx (100%) rename stories/{layout => v2_layout}/props-table.tsx (100%) rename stories/{text => v2_text}/a-intro.mdx (100%) rename stories/{text => v2_text}/a-intro.stories.tsx (100%) rename stories/{text => v2_text}/b-advanced.mdx (100%) rename stories/{text => v2_text}/b-advanced.stories.tsx (100%) rename stories/{text => v2_text}/c-base-collection.mdx (100%) rename stories/{text => v2_text}/collection-doc-elements.tsx (100%) rename stories/{text => v2_text}/d-oneservice-collection.mdx (100%) rename stories/{text => v2_text}/doc-elements.tsx (100%) rename stories/{text => v2_text}/props-table.tsx (100%) diff --git a/stories/color/a-color.mdx b/stories/v2_color/a-color.mdx similarity index 100% rename from stories/color/a-color.mdx rename to stories/v2_color/a-color.mdx diff --git a/stories/color/base-color.mdx b/stories/v2_color/base-color.mdx similarity index 100% rename from stories/color/base-color.mdx rename to stories/v2_color/base-color.mdx diff --git a/stories/color/bsg-color.mdx b/stories/v2_color/bsg-color.mdx similarity index 100% rename from stories/color/bsg-color.mdx rename to stories/v2_color/bsg-color.mdx diff --git a/stories/color/ccube-color.mdx b/stories/v2_color/ccube-color.mdx similarity index 100% rename from stories/color/ccube-color.mdx rename to stories/v2_color/ccube-color.mdx diff --git a/stories/color/doc-color-palette.tsx b/stories/v2_color/doc-color-palette.tsx similarity index 100% rename from stories/color/doc-color-palette.tsx rename to stories/v2_color/doc-color-palette.tsx diff --git a/stories/color/mylegacy-color.mdx b/stories/v2_color/mylegacy-color.mdx similarity index 100% rename from stories/color/mylegacy-color.mdx rename to stories/v2_color/mylegacy-color.mdx diff --git a/stories/color/oneservice-color.mdx b/stories/v2_color/oneservice-color.mdx similarity index 100% rename from stories/color/oneservice-color.mdx rename to stories/v2_color/oneservice-color.mdx diff --git a/stories/color/rbs-color.mdx b/stories/v2_color/rbs-color.mdx similarity index 100% rename from stories/color/rbs-color.mdx rename to stories/v2_color/rbs-color.mdx diff --git a/stories/layout/col-div-props-table.tsx b/stories/v2_layout/col-div-props-table.tsx similarity index 100% rename from stories/layout/col-div-props-table.tsx rename to stories/v2_layout/col-div-props-table.tsx diff --git a/stories/layout/col-div.mdx b/stories/v2_layout/col-div.mdx similarity index 100% rename from stories/layout/col-div.mdx rename to stories/v2_layout/col-div.mdx diff --git a/stories/layout/col-div.stories.tsx b/stories/v2_layout/col-div.stories.tsx similarity index 100% rename from stories/layout/col-div.stories.tsx rename to stories/v2_layout/col-div.stories.tsx diff --git a/stories/layout/doc-elements.tsx b/stories/v2_layout/doc-elements.tsx similarity index 100% rename from stories/layout/doc-elements.tsx rename to stories/v2_layout/doc-elements.tsx diff --git a/stories/layout/layout.mdx b/stories/v2_layout/layout.mdx similarity index 100% rename from stories/layout/layout.mdx rename to stories/v2_layout/layout.mdx diff --git a/stories/layout/layout.stories.tsx b/stories/v2_layout/layout.stories.tsx similarity index 100% rename from stories/layout/layout.stories.tsx rename to stories/v2_layout/layout.stories.tsx diff --git a/stories/layout/props-table.tsx b/stories/v2_layout/props-table.tsx similarity index 100% rename from stories/layout/props-table.tsx rename to stories/v2_layout/props-table.tsx diff --git a/stories/text/a-intro.mdx b/stories/v2_text/a-intro.mdx similarity index 100% rename from stories/text/a-intro.mdx rename to stories/v2_text/a-intro.mdx diff --git a/stories/text/a-intro.stories.tsx b/stories/v2_text/a-intro.stories.tsx similarity index 100% rename from stories/text/a-intro.stories.tsx rename to stories/v2_text/a-intro.stories.tsx diff --git a/stories/text/b-advanced.mdx b/stories/v2_text/b-advanced.mdx similarity index 100% rename from stories/text/b-advanced.mdx rename to stories/v2_text/b-advanced.mdx diff --git a/stories/text/b-advanced.stories.tsx b/stories/v2_text/b-advanced.stories.tsx similarity index 100% rename from stories/text/b-advanced.stories.tsx rename to stories/v2_text/b-advanced.stories.tsx diff --git a/stories/text/c-base-collection.mdx b/stories/v2_text/c-base-collection.mdx similarity index 100% rename from stories/text/c-base-collection.mdx rename to stories/v2_text/c-base-collection.mdx diff --git a/stories/text/collection-doc-elements.tsx b/stories/v2_text/collection-doc-elements.tsx similarity index 100% rename from stories/text/collection-doc-elements.tsx rename to stories/v2_text/collection-doc-elements.tsx diff --git a/stories/text/d-oneservice-collection.mdx b/stories/v2_text/d-oneservice-collection.mdx similarity index 100% rename from stories/text/d-oneservice-collection.mdx rename to stories/v2_text/d-oneservice-collection.mdx diff --git a/stories/text/doc-elements.tsx b/stories/v2_text/doc-elements.tsx similarity index 100% rename from stories/text/doc-elements.tsx rename to stories/v2_text/doc-elements.tsx diff --git a/stories/text/props-table.tsx b/stories/v2_text/props-table.tsx similarity index 100% rename from stories/text/props-table.tsx rename to stories/v2_text/props-table.tsx From 699916e663ab1860c1c8da1ee4a1f9ca1746147c Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 19 Aug 2024 00:37:13 +0800 Subject: [PATCH 0407/1949] [V3][RL] Add docs on design tokens and theming --- .storybook/preview.ts | 1 + stories/storybook-common/doc-alert.tsx | 44 +++++++++ stories/storybook-common/index.ts | 1 + stories/theme/a-introduction.mdx | 37 +++++++ stories/theme/b-theme-introduction.mdx | 73 ++++++++++++++ stories/theme/c-theme-advanced.mdx | 132 +++++++++++++++++++++++++ 6 files changed, 288 insertions(+) create mode 100644 stories/storybook-common/doc-alert.tsx create mode 100644 stories/theme/a-introduction.mdx create mode 100644 stories/theme/b-theme-introduction.mdx create mode 100644 stories/theme/c-theme-advanced.mdx diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 3a861193a..979030c37 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -31,6 +31,7 @@ const preview: Preview = { order: [ "Getting started", ["Installation", "Themes", "Media Query", "Layout"], + "Foundations", "General", ["Animations", "Button", ["Base", "With Icon"], "*"], "Form", diff --git a/stories/storybook-common/doc-alert.tsx b/stories/storybook-common/doc-alert.tsx new file mode 100644 index 000000000..e5eee713e --- /dev/null +++ b/stories/storybook-common/doc-alert.tsx @@ -0,0 +1,44 @@ +import { LightbulbFillIcon } from "@lifesg/react-icons"; +import styled from "styled-components"; +import { Alert } from "../../src/alert"; + +interface Props { + children: React.ReactNode; +} + +export const DocAlert = ({ children }: Props) => { + return ( + + {children} + + ); +}; + +export const DocInfo = ({ children }: Props) => { + return ( + + {children} + + ); +}; + +export const DocNote = ({ children }: Props) => { + return ( + } + > + {children} + + ); +}; + +const StyledAlert = styled(Alert)` + margin-bottom: 16px; + + a { + font-size: 14px; + } +`; diff --git a/stories/storybook-common/index.ts b/stories/storybook-common/index.ts index 85d2b3e0e..ed37ee5cd 100644 --- a/stories/storybook-common/index.ts +++ b/stories/storybook-common/index.ts @@ -1,3 +1,4 @@ +export * from "./doc-alert"; export * from "./api-table"; export * from "./preview-box"; export * from "./story-container"; diff --git a/stories/theme/a-introduction.mdx b/stories/theme/a-introduction.mdx new file mode 100644 index 000000000..19636758e --- /dev/null +++ b/stories/theme/a-introduction.mdx @@ -0,0 +1,37 @@ +import { Meta } from "@storybook/blocks"; +import { DocAlert, DocInfo } from "stories/storybook-common"; + + + +# Introduction + +The Dcube Design System is built upon a core group of design tokens and components, +with first-class support for theming. + +## Design Tokens + +Design tokens are variables that store values used for styling. Examples of such +values are: + +- Colours e.g. `#ff0000`, `rgb(0,0,0)` +- Dimensions e.g. `16px`, `1rem` +- Font specifications e.g. `Open Sans` + +A design token can be an alias of another token, or even made up of multiple tokens. + +The design system offers the following types of tokens: + +- Colour +- Typography +- Breakpoint +- Shadow +- Border radius +- Z-index +- Motion + +## Themes + +A theme is a collection of design tokens. You can customise certain visual +properties of components by configuring the theme in your project. + +Learn more about themes [here](/docs/foundations-themes-introduction--docs). diff --git a/stories/theme/b-theme-introduction.mdx b/stories/theme/b-theme-introduction.mdx new file mode 100644 index 000000000..da4dd7075 --- /dev/null +++ b/stories/theme/b-theme-introduction.mdx @@ -0,0 +1,73 @@ +import { Meta } from "@storybook/blocks"; +import { DocInfo, DocNote } from "stories/storybook-common"; + + + +# Themes + + + To use themes, you will need [**Styled + Components**](https://styled-components.com/docs) + + +A theme specification is composed of several schemes, each representing a set of design tokens: + +{/* TODO: update the properties */} + +```tsx +// ThemeSpec +{ + colourScheme: "lifesg", + fontScheme: "lifesg", +} +``` + +## Usage + +There are 6 presets available. + +```tsx +// The LifeSG theme +import { LifeSGTheme } from "@lifesg/react-design-system/theme"; + +// The BookingSG theme +import { BookingSGTheme } from "@lifesg/react-design-system/theme"; + +// The CCUBE theme +import { CCubeTheme } from "@lifesg/react-design-system/theme"; + +// The MyLegacy theme +import { MyLegacyTheme } from "@lifesg/react-design-system/theme"; + +// The RBS theme +import { RBSTheme } from "@lifesg/react-design-system/theme"; + +// The OneService theme +import { OneServiceTheme } from "@lifesg/react-design-system/theme"; +``` + +To configure the theme in your project, + +1. Import the theme preset +2. Wrap your components in the `ThemeProvider` context; typically this is done at the root of the application +3. Pass in the theme object via the `theme` prop + + + If a theme is not specified, components will use LifeSG as the default. + + +```tsx +import { LifeSGTheme } from "@lifesg/react-design-system/theme"; +import { ThemeProvider } from "styled-components"; +import { Component } from "./index"; + +const App = () => { + return ( + + + + ); +}; + +export default App; +``` diff --git a/stories/theme/c-theme-advanced.mdx b/stories/theme/c-theme-advanced.mdx new file mode 100644 index 000000000..39a5abe98 --- /dev/null +++ b/stories/theme/c-theme-advanced.mdx @@ -0,0 +1,132 @@ +import { Meta } from "@storybook/blocks"; +import { DocAlert, DocInfo } from "stories/storybook-common"; + + + +# Advanced usage + + + To use themes, you will need [**Styled + Components**](https://styled-components.com/docs) + + +This section provides additional information on using themes in your project. + +## Theme customisation + +### Defining a theme + +You can mix and match the schemes to construct a custom theme specification. + +{/* TODO: update the properties */} + +```tsx +// app.tsx +import { ThemeSpec } from "@lifesg/react-design-system/theme"; +import { ThemeProvider } from "styled-components"; +import { Component } from "./index"; + +const myTheme: ThemeSpec = { + colourScheme: "ccube", + fontScheme: "bookingsg", + animationScheme: "lifesg", +}; + +const App = () => { + return ( + + + + ); +}; + +export default App; +``` + +### Extending theme presets + +There are also cases where the design style you are going for is a minor variant +of the existing presets. You can selectively modify design tokens by using the +`overrides` prop. + +For more information on defining the override value, refer to the respective +documentation for the design token. + +{/* TODO: update the properties */} + +```tsx +// app.tsx +import { LifeSGTheme, ThemeSpec } from "@lifesg/react-design-system/theme"; +import { ThemeProvider } from "styled-components"; +import { Component } from "./index"; + +const customTheme: ThemeSpec = { + ...LifeSGTheme, + overrides: { + primitiveColour: { + "primary-10": "#F3C85C", + }, + font: { + "header-size-xxl": "4rem", + "header-lh-xxl": "4.5rem", + "header-ls-xxl": "0.056rem", + }, + }, +}; + +const App = () => { + return ( + + + + ); +}; + +export default App; +``` + +## Styling individual elements + +You can change the theme on an element-specific level. Note that this does not +change all the other components in your UI. + +In this example, here is how we usually specify properties that are dependent on +the theme e.g. `Colour` + +```tsx +import { Colour } from "@lifesg/react-design-system/theme"; +import styled, { css } from "styled-components"; + +const SomeComponent = styled.div` + background: ${Colour["background-error"]}; +`; + +// Or if you extract the props +const AnotherComponent = styled.div` + ${(props) => { + return css` + background: ${Colour["background-error"](props)}; + `; + }} +`; +``` + +But with the modified props approach, here's an extra step you will need to do. + +```tsx +const SomeComponent = styled.div` + ${(props) => { + const modifiedProps = { + ...props, + theme: { + ...props.theme, + colourScheme: "bookingsg", + }, + }; + + return css` + background: ${Colour["background-error"](modifiedProps)}; + `; + }} +`; +``` From a0c609f1177613249a2a31b801de4fcdf1ed88df Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 19 Aug 2024 01:14:10 +0800 Subject: [PATCH 0408/1949] [V3][RL] Add docs on colour tokens --- public/img/colour-tokens.svg | 32 +++ .../theme/colour/a-colour-introduction.mdx | 97 +++++++ stories/theme/colour/b-colour-lifesg.mdx | 24 ++ .../doc-primitive-colour-display.tsx | 247 +++++++++++++++++ .../doc-semantic-colour-display.tsx | 248 ++++++++++++++++++ stories/theme/doc-elements/index.ts | 2 + 6 files changed, 650 insertions(+) create mode 100644 public/img/colour-tokens.svg create mode 100644 stories/theme/colour/a-colour-introduction.mdx create mode 100644 stories/theme/colour/b-colour-lifesg.mdx create mode 100644 stories/theme/doc-elements/doc-primitive-colour-display.tsx create mode 100644 stories/theme/doc-elements/doc-semantic-colour-display.tsx create mode 100644 stories/theme/doc-elements/index.ts diff --git a/public/img/colour-tokens.svg b/public/img/colour-tokens.svg new file mode 100644 index 000000000..d5ff181bf --- /dev/null +++ b/public/img/colour-tokens.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stories/theme/colour/a-colour-introduction.mdx b/stories/theme/colour/a-colour-introduction.mdx new file mode 100644 index 000000000..226cd951f --- /dev/null +++ b/stories/theme/colour/a-colour-introduction.mdx @@ -0,0 +1,97 @@ +import { Meta } from "@storybook/blocks"; +import { DocInfo } from "stories/storybook-common"; + + + +# Colours + +```tsx +import { Colour } from "@lifesg/react-design-system/theme"; +``` + +There are two types of colour tokens: **primitive** and **semantic**. Primitive +tokens define raw colour values. Semantic tokens are meaningful aliases of +primitive tokens. + +{/* TODO: Update this image */} + + + + + Use semantic tokens whenever possible to maintain a consistent look and feel + within your product. + + +## Collections + +[LifeSG](/docs/foundations-colours-lifesg--docs) | +[BookingSG](/docs/foundations-colours-bookingsg--docs) | +[RBS](/docs/foundations-colours-rbs--docs) | +[CCUBE](/docs/foundations-colours-ccube--docs) | +[MyLegacy](/docs/foundations-colours-mylegacy--docs) | +[OneService](/docs/foundations-colours-oneservice--docs) + +## Usage + +The `Colour` namespace provides semantic tokens to specify colours within style +declarations. In the case where no appropriate semantic token is available, an +escape hatch for primitive tokens can be accessed via `Colour.Primitive`. + +```tsx +import { Colour } from "@lifesg/react-design-system/theme"; +import styled, { css } from "styled-components"; + +const Container = styled.div` + color: ${Colour["text"]}; + color: ${Colour.Primitve["neutral-100"]}; + + // If you extract props, remember to wrap nested interpolations with the css helper + ${(props) => { + return css` + color: ${Colour["text"]}; + `; + }} + + // Otherwise, you have to pass the props down manually (not recommended) + ${(props) => { + return ` + color: ${Colour["text"](props)}; + `; + }} +`; +``` + +If you require the color as a constant value, you could do this: + +```tsx +import { Colour, LifeSGTheme } from "@lifesg/react-design-system/theme"; + +const textColour = Colour["text"]({ theme: LifeSGTheme }); +``` + +## Overriding + +Primitive and semantic tokens can be overriden separately. + +When you modify a primitive token, any semantic token referring to it will also +reflect the new colour. + +```tsx +import { Colour, LifeSGTheme } from "@lifesg/react-design-system/theme"; + +const customTheme: ThemeSpec = { + ...LifeSGTheme, + overrides: { + primitiveColour: { + "primary-10": "#F3C85C", // specify a custom value + }, + semanticColour: { + "text-warning": Colour.Primitive["warning-10"]; // use another primitive colour token + "text-error": "#A04747"; // or specify a custom value + } + }, +}; +``` diff --git a/stories/theme/colour/b-colour-lifesg.mdx b/stories/theme/colour/b-colour-lifesg.mdx new file mode 100644 index 000000000..eccc2328d --- /dev/null +++ b/stories/theme/colour/b-colour-lifesg.mdx @@ -0,0 +1,24 @@ +import { Meta } from "@storybook/blocks"; +import { LifeSGTheme } from "src/theme"; +import { PrimitiveColourDisplay, SemanticColourDisplay } from "../doc-elements"; + + + +# LifeSG colours + +These are the palettes used when the `colourScheme` is `"lifesg"`. + +```tsx +const theme: ThemeSpec = { + colourScheme: "lifesg", + // ...other specifications +}; +``` + +## Primitive colours + + + +## Semantic colours + + diff --git a/stories/theme/doc-elements/doc-primitive-colour-display.tsx b/stories/theme/doc-elements/doc-primitive-colour-display.tsx new file mode 100644 index 000000000..035dddf35 --- /dev/null +++ b/stories/theme/doc-elements/doc-primitive-colour-display.tsx @@ -0,0 +1,247 @@ +import { getPrimitiveColour } from "src/theme/colour-primitive/theme-helper"; +import { PrimitiveColourSet, ThemeSpec } from "src/theme/types"; +import styled, { ThemeProvider, useTheme } from "styled-components"; + +interface PrimitiveColourPalette { + tokens: (keyof PrimitiveColourSet)[]; + category: string; +} + +const PrimitiveColourPalette = ({ + tokens, + category, +}: PrimitiveColourPalette) => { + const theme = useTheme(); + return ( + + {category} + + {tokens.map((token) => { + const colour = getPrimitiveColour(token)({ theme }); + + return ( + + + {token} + {colour} + + ); + })} + + + ); +}; + +interface PrimitiveColourDisplayProps { + theme: ThemeSpec; +} + +export const PrimitiveColourDisplay = ({ + theme, +}: PrimitiveColourDisplayProps) => { + return ( + + + + + + + + + + + + + + ); +}; + +// ============================================================================= +// STYLE INTERFACE +// ============================================================================= +interface SwatchColourProps { + $colour: string; +} + +// ============================================================================= +// STYLING +// ============================================================================= +const Display = styled.div` + display: grid; + grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); + gap: 2.5rem; + flex-wrap: wrap; + + margin-bottom: 2.5rem; + + &:last-child { + margin-bottom: 1rem; + } +`; + +const Palette = styled.div``; + +const PaletteLabel = styled.div` + font-size: 1.25rem; + font-weight: bolder; + margin-bottom: 1rem; +`; + +const Swatch = styled.ul` + display: grid; + grid-template-columns: repeat(3, max-content); + margin: 0; + padding: 0; + gap: 0.5rem 1rem; +`; + +const SwatchItem = styled.li` + display: grid; + grid-column: 1 / span 3; + grid-template-columns: subgrid; + justify-items: flex-start; + align-items: center; + gap: 0.5rem; +`; + +const SwatchColour = styled.div` + height: 2.5rem; + width: 8rem; + box-shadow: rgba(0, 0, 0, 0.1) 0 1px 3px 0; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 4px; + background: repeating-linear-gradient( + 135deg, + #edefef 0px, + #edefef 10px, + #dde1e2 10px, + #dde1e2 20px + ); + background: ${(props) => props.$colour}; +`; + +const SwatchLabel = styled.span` + font-family: monospace; + font-size: 1rem; + border-radius: 4px; + padding: 0 0.5rem; +`; + +const SwatchValue = styled.span` + font-size: 0.875rem; +`; diff --git a/stories/theme/doc-elements/doc-semantic-colour-display.tsx b/stories/theme/doc-elements/doc-semantic-colour-display.tsx new file mode 100644 index 000000000..a5fc6e35e --- /dev/null +++ b/stories/theme/doc-elements/doc-semantic-colour-display.tsx @@ -0,0 +1,248 @@ +import { getSemanticColour } from "src/theme/colour-semantic/theme-helper"; +import { SemanticColourSet, ThemeSpec } from "src/theme/types"; +import styled, { ThemeProvider, useTheme } from "styled-components"; + +interface SemanticColourPalette { + tokens: (keyof SemanticColourSet)[]; +} + +const SemanticColourPalette = ({ tokens }: SemanticColourPalette) => { + const theme = useTheme(); + + return ( + + + {tokens.map((token) => { + const colour = getSemanticColour(token)({ theme }); + return ( + + + {token} + + ); + })} + + + ); +}; + +interface SemanticColourDisplayProps { + theme: ThemeSpec; +} + +export const SemanticColourDisplay = ({ + theme, +}: SemanticColourDisplayProps) => { + return ( + + Text + + + + + + + + + + Border + + + + + + + + + + Background + + + + + + + + + + + Overlay + + + + + Hyperlink + + + + + Focus ring + + + + + ); +}; + +// ============================================================================= +// STYLE INTERFACE +// ============================================================================= +interface SwatchColourProps { + $colour: string; +} + +// ============================================================================= +// STYLING +// ============================================================================= +const Display = styled.div` + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: 2.5rem; + flex-wrap: wrap; + margin-bottom: 2.5rem; + + &:last-child { + margin-bottom: 1rem; + } +`; + +const Palette = styled.div``; + +const PaletteLabel = styled.div` + font-size: 1.25rem; + font-weight: bolder; + margin-bottom: 1rem; +`; + +const Swatch = styled.ul` + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + gap: 0.5rem; +`; + +const SwatchItem = styled.li` + display: flex; + justify-items: flex-start; + align-items: center; + gap: 0.5rem; +`; + +const SwatchColour = styled.div` + flex-shrink: 0; + height: 1.5rem; + width: 1.5rem; + box-shadow: rgba(0, 0, 0, 0.1) 0 1px 3px 0; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 4px; + background: repeating-linear-gradient( + 135deg, + #edefef 0px, + #edefef 10px, + #dde1e2 10px, + #dde1e2 20px + ); + background: ${(props) => props.$colour}; +`; + +const SwatchLabel = styled.span` + font-family: monospace; + font-size: 1rem; + border-radius: 4px; + padding: 0 0.5rem; +`; diff --git a/stories/theme/doc-elements/index.ts b/stories/theme/doc-elements/index.ts new file mode 100644 index 000000000..853d72f48 --- /dev/null +++ b/stories/theme/doc-elements/index.ts @@ -0,0 +1,2 @@ +export * from "./doc-primitive-colour-display"; +export * from "./doc-semantic-colour-display"; From 4c3b111c1fb81dbc9d861f8aeb99bb3c2b88fdb6 Mon Sep 17 00:00:00 2001 From: roll Date: Thu, 5 Sep 2024 01:56:57 +0800 Subject: [PATCH 0409/1949] [V3][RL] Update storybook theme configuration --- .storybook/preview.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 979030c37..ee8c9d74f 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -3,24 +3,24 @@ import { INITIAL_VIEWPORTS } from "@storybook/addon-viewport"; import type { Preview } from "@storybook/react"; import { ThemeProvider } from "styled-components"; import { - V2_BaseTheme, - V2_BookingSGTheme, - V2_CCubeTheme, - V2_MyLegacyTheme, - V2_OneServiceTheme, - V2_RBSTheme, -} from "../src/v2_theme"; + LifeSGTheme, + BookingSGTheme, + CcubeTheme, + MyLegacyTheme, + RBSTheme, +} from "../src/theme"; const preview: Preview = { decorators: [ withThemeFromJSXProvider({ themes: { - LifeSG: V2_BaseTheme, - BookingSG: V2_BookingSGTheme, - CCube: V2_CCubeTheme, - MyLegacy: V2_MyLegacyTheme, - RBS: V2_RBSTheme, - OneService: V2_OneServiceTheme, + LifeSG: LifeSGTheme, + BookingSG: BookingSGTheme, + CCube: CcubeTheme, + MyLegacy: MyLegacyTheme, + RBS: RBSTheme, + // TODO: update when OS theme is added + // OneService: V2_OneServiceTheme, }, Provider: ThemeProvider, }), From c814fb4b26908e9de5cfa4e49852cc88a4e36170 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Thu, 5 Sep 2024 09:27:27 +0800 Subject: [PATCH 0410/1949] [CCUBE-1534][MAHI]Make borderScheme compulsory and update border set to new changes --- src/theme/border/specs/lifesg-border-set.ts | 6 +++--- src/theme/border/{helper.ts => theme-helper.ts} | 5 ++--- src/theme/border/types.ts | 3 ++- src/theme/index.ts | 7 ++++++- src/theme/types.ts | 2 +- tests/theme/theme-animation.spec.tsx | 2 ++ tests/theme/theme-border.spec.tsx | 13 ++++++++----- tests/theme/theme-colour.spec.tsx | 3 +++ tests/theme/theme-font.spec.tsx | 3 +++ 9 files changed, 30 insertions(+), 14 deletions(-) rename src/theme/border/{helper.ts => theme-helper.ts} (94%) diff --git a/src/theme/border/specs/lifesg-border-set.ts b/src/theme/border/specs/lifesg-border-set.ts index dcd047d3c..f786fcc87 100644 --- a/src/theme/border/specs/lifesg-border-set.ts +++ b/src/theme/border/specs/lifesg-border-set.ts @@ -1,9 +1,9 @@ -import { css } from "styled-components"; import { BorderSet } from "../types"; -import { dashedBorderStyle } from "../helper"; +import { dashedBorderStyle } from "../theme-helper"; export const LifeSgBorderSet: BorderSet = { - "width-sm": 1, + "width-010": 1, + "width-020": 2, solid: "solid", diff --git a/src/theme/border/helper.ts b/src/theme/border/theme-helper.ts similarity index 94% rename from src/theme/border/helper.ts rename to src/theme/border/theme-helper.ts index 76ca03681..5f67412d2 100644 --- a/src/theme/border/helper.ts +++ b/src/theme/border/theme-helper.ts @@ -31,8 +31,6 @@ export const dashedBorderStyle = const strokeWidth = parseInt(resolvedThickness) + 1; return css` - /* Added extra background-color styling to resolve improper wrapping of css styling when used. */ - background-color: transparent; background-color: transparent; height: ${resolvedThickness}; background-repeat: repeat-x; @@ -89,7 +87,8 @@ export const getBorder = (key: keyof BorderSet) => { }; export const BorderValues = { - "width-sm": getBorder("width-sm"), + "width-010": getBorder("width-010"), + "width-020": getBorder("width-020"), solid: getBorder("solid"), "dashed-default": getBorder("dashed-default"), }; diff --git a/src/theme/border/types.ts b/src/theme/border/types.ts index d656acf0c..6970b193e 100644 --- a/src/theme/border/types.ts +++ b/src/theme/border/types.ts @@ -2,7 +2,8 @@ import { CSSProp } from "styled-components"; import { BorderScheme } from "../types"; export interface BorderSet { - "width-sm": number; + "width-010": number; + "width-020": number; solid: string; "dashed-default": ( thickness?: number, diff --git a/src/theme/index.ts b/src/theme/index.ts index bb87b493c..d8cd14ebe 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,6 +1,6 @@ import { Border } from "../time-slot-bar/time-slot-bar.styles"; import { AnimationValues } from "./animation/theme-helper"; -import { BorderValues } from "./border/helper"; +import { BorderValues } from "./border/theme-helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; import { FontValues } from "./font/theme-helper"; @@ -24,28 +24,33 @@ export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", animationScheme: "lifesg", + borderScheme: "lifesg", }; export const BookingSGTheme: ThemeSpec = { colourScheme: "bookingsg", fontScheme: "bookingsg", animationScheme: "lifesg", + borderScheme: "lifesg", }; export const CcubeTheme: ThemeSpec = { colourScheme: "ccube", fontScheme: "ccube", animationScheme: "lifesg", + borderScheme: "lifesg", }; export const MyLegacyTheme: ThemeSpec = { colourScheme: "mylegacy", fontScheme: "mylegacy", animationScheme: "lifesg", + borderScheme: "lifesg", }; export const RBSTheme: ThemeSpec = { colourScheme: "rbs", fontScheme: "rbs", animationScheme: "lifesg", + borderScheme: "lifesg", }; diff --git a/src/theme/types.ts b/src/theme/types.ts index 999351280..3bdbc546f 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -46,7 +46,7 @@ export interface ThemeSpec { colourScheme: ColourScheme; fontScheme: FontScheme; animationScheme: AnimationScheme; - borderScheme?: BorderScheme | undefined; + borderScheme: BorderScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/tests/theme/theme-animation.spec.tsx b/tests/theme/theme-animation.spec.tsx index 2e7d9b5c3..05a766394 100644 --- a/tests/theme/theme-animation.spec.tsx +++ b/tests/theme/theme-animation.spec.tsx @@ -15,6 +15,7 @@ describe("StyledAnimationTest", () => { colourScheme: "lifesg", fontScheme: "lifesg", animationScheme: "lifesg", + borderScheme: "lifesg", }; const duration = "500ms"; @@ -37,6 +38,7 @@ describe("StyledAnimationTest", () => { colourScheme: "lifesg", fontScheme: "lifesg", animationScheme: "lifesg", + borderScheme: "lifesg", overrides: { animation: { "duration-500": "700ms", diff --git a/tests/theme/theme-border.spec.tsx b/tests/theme/theme-border.spec.tsx index b406f8694..f922115dc 100644 --- a/tests/theme/theme-border.spec.tsx +++ b/tests/theme/theme-border.spec.tsx @@ -5,8 +5,8 @@ import { ThemeSpec } from "../../src/theme/types"; import { BorderSet } from "../../src"; const StyledBorderComponent = styled.div` - border: ${BorderSet["width-sm"]} ${BorderSet.solid}; - border-top: ${BorderSet["dashed-default"]}; + border: ${BorderSet["width-010"]} ${BorderSet.solid}; + ${BorderSet["dashed-default"]}; `; describe("Border Theming Test", () => { @@ -14,6 +14,7 @@ describe("Border Theming Test", () => { const mockTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", borderScheme: "lifesg", }; @@ -54,13 +55,14 @@ describe("Border Theming Test", () => { it("should apply correct border styles when overriding border color in dashed-default", () => { const StyledBorderComponentDash = styled.div` - border: ${BorderSet["width-sm"]} ${BorderSet.solid}; - border-top: ${BorderSet["dashed-default"](2, "red")}; + border: ${BorderSet["width-010"]} ${BorderSet.solid}; + ${BorderSet["dashed-default"](2, "red")}; `; const mockTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", borderScheme: "lifesg", }; @@ -101,9 +103,10 @@ describe("Border Theming Test", () => { colourScheme: "lifesg", fontScheme: "lifesg", borderScheme: "lifesg", + animationScheme: "lifesg", overrides: { border: { - "width-sm": 3, + "width-010": 3, }, }, }; diff --git a/tests/theme/theme-colour.spec.tsx b/tests/theme/theme-colour.spec.tsx index f09566957..13adc68a5 100644 --- a/tests/theme/theme-colour.spec.tsx +++ b/tests/theme/theme-colour.spec.tsx @@ -15,6 +15,7 @@ describe("Colour Themeing Test", () => { colourScheme: "bookingsg", fontScheme: "lifesg", animationScheme: "lifesg", + borderScheme: "lifesg", }; const bgColor = "#1A122C"; @@ -38,6 +39,7 @@ describe("Colour Themeing Test", () => { colourScheme: "lifesg", fontScheme: "lifesg", animationScheme: "lifesg", + borderScheme: "lifesg", overrides: { primitiveColour: { "primary-10": "#fefefe", @@ -66,6 +68,7 @@ describe("Colour Themeing Test", () => { colourScheme: "lifesg", fontScheme: "lifesg", animationScheme: "lifesg", + borderScheme: "lifesg", overrides: { semanticColour: { "border-primary": "#fefefe", diff --git a/tests/theme/theme-font.spec.tsx b/tests/theme/theme-font.spec.tsx index 94221091f..e73f1a2cb 100644 --- a/tests/theme/theme-font.spec.tsx +++ b/tests/theme/theme-font.spec.tsx @@ -19,6 +19,7 @@ describe("StyledTypographyTest", () => { colourScheme: "lifesg", fontScheme: "lifesg", animationScheme: "lifesg", + borderScheme: "lifesg", }; const fontSize = "3rem"; @@ -46,6 +47,7 @@ describe("StyledTypographyTest", () => { colourScheme: "lifesg", fontScheme: "lifesg", animationScheme: "lifesg", + borderScheme: "lifesg", overrides: { typography: { "header-xxl-bold": { @@ -83,6 +85,7 @@ describe("StyledTypographyTest", () => { colourScheme: "lifesg", fontScheme: "lifesg", animationScheme: "lifesg", + borderScheme: "lifesg", }; const fontSize = "1.125rem"; From bc9f254c71e13f63669d6a4660acb76510ff0c47 Mon Sep 17 00:00:00 2001 From: roll Date: Fri, 6 Sep 2024 10:14:51 +0800 Subject: [PATCH 0411/1949] [V3][RL] Prioritise semantic colours in docs --- stories/theme/colour/b-colour-lifesg.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/stories/theme/colour/b-colour-lifesg.mdx b/stories/theme/colour/b-colour-lifesg.mdx index eccc2328d..3b51a0fcf 100644 --- a/stories/theme/colour/b-colour-lifesg.mdx +++ b/stories/theme/colour/b-colour-lifesg.mdx @@ -15,10 +15,10 @@ const theme: ThemeSpec = { }; ``` -## Primitive colours - - - ## Semantic colours + +## Primitive colours + + From bf10eb2433b9a77739d6d073991f40c495e7e4ba Mon Sep 17 00:00:00 2001 From: roll Date: Fri, 6 Sep 2024 10:15:29 +0800 Subject: [PATCH 0412/1949] [V3][RL] Clean up imports, remove unnecessary styling --- stories/storybook-common/doc-alert.tsx | 4 ---- stories/theme/a-introduction.mdx | 1 - stories/theme/c-theme-advanced.mdx | 2 +- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/stories/storybook-common/doc-alert.tsx b/stories/storybook-common/doc-alert.tsx index e5eee713e..1c6e05d7f 100644 --- a/stories/storybook-common/doc-alert.tsx +++ b/stories/storybook-common/doc-alert.tsx @@ -37,8 +37,4 @@ export const DocNote = ({ children }: Props) => { const StyledAlert = styled(Alert)` margin-bottom: 16px; - - a { - font-size: 14px; - } `; diff --git a/stories/theme/a-introduction.mdx b/stories/theme/a-introduction.mdx index 19636758e..5e26a7141 100644 --- a/stories/theme/a-introduction.mdx +++ b/stories/theme/a-introduction.mdx @@ -1,5 +1,4 @@ import { Meta } from "@storybook/blocks"; -import { DocAlert, DocInfo } from "stories/storybook-common"; diff --git a/stories/theme/c-theme-advanced.mdx b/stories/theme/c-theme-advanced.mdx index 39a5abe98..a4616adea 100644 --- a/stories/theme/c-theme-advanced.mdx +++ b/stories/theme/c-theme-advanced.mdx @@ -1,5 +1,5 @@ import { Meta } from "@storybook/blocks"; -import { DocAlert, DocInfo } from "stories/storybook-common"; +import { DocInfo } from "stories/storybook-common"; From fe51740d3c8a79a62f2204126d2ee964cc06a405 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Mon, 9 Sep 2024 11:50:31 +0800 Subject: [PATCH 0413/1949] [CCUBE-1534][MAHI]Ensure stricter typing and also use Colour token for default and added a helper function to aid colour encoding --- src/theme/border/specs/lifesg-border-set.ts | 10 ++++-- src/theme/border/theme-helper.ts | 37 ++++++++++----------- src/theme/border/types.ts | 12 +++---- tests/theme/theme-border.spec.tsx | 4 +-- 4 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/theme/border/specs/lifesg-border-set.ts b/src/theme/border/specs/lifesg-border-set.ts index f786fcc87..80f33ce34 100644 --- a/src/theme/border/specs/lifesg-border-set.ts +++ b/src/theme/border/specs/lifesg-border-set.ts @@ -1,5 +1,7 @@ import { BorderSet } from "../types"; import { dashedBorderStyle } from "../theme-helper"; +import { StyledComponentProps } from "../../helpers"; +import { Colour } from "../../index"; export const LifeSgBorderSet: BorderSet = { "width-010": 1, @@ -8,9 +10,11 @@ export const LifeSgBorderSet: BorderSet = { solid: "solid", "dashed-default": ( - thickness: number | ((props: any) => string) = 1, - color: string | ((props: any) => string) = "black" + thickness: number | ((props: StyledComponentProps) => number) = 1, + colour: + | string + | ((props: StyledComponentProps) => string) = Colour.border ) => { - return dashedBorderStyle(thickness, color); + return dashedBorderStyle(thickness, colour); }, }; diff --git a/src/theme/border/theme-helper.ts b/src/theme/border/theme-helper.ts index 5f67412d2..2fa1e8080 100644 --- a/src/theme/border/theme-helper.ts +++ b/src/theme/border/theme-helper.ts @@ -1,7 +1,7 @@ import { css } from "styled-components"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { BorderScheme, ThemeCollectionSpec } from "../types"; -import { BorderCollectionMap, BorderSet, StyleProps } from "./types"; +import { BorderCollectionMap, BorderSet } from "./types"; import { LifeSgBorderSet } from "./specs/lifesg-border-set"; const BorderSpec: ThemeCollectionSpec = { @@ -10,31 +10,35 @@ const BorderSpec: ThemeCollectionSpec = { }, defaultValue: "lifesg", }; +// to check if hex colour +const isHexColor = (color: string): boolean => { + return /^#([0-9A-F]{3}){1,2}$/i.test(color); +}; export const dashedBorderStyle = ( - thickness: number | ((props: any) => string), - color: string | ((props: any) => string) + thickness: number | ((props: StyledComponentProps) => number), + colour: string | ((props: StyledComponentProps) => string) ) => - (props: StyleProps) => { + (props: StyledComponentProps) => { // Resolve thickness const resolvedThickness = - typeof thickness === "function" - ? thickness(props) - : `${thickness}px`; + typeof thickness === "function" ? thickness(props) : thickness; // Resolve color const resolvedColor = - typeof color === "function" ? color(props) : color; + typeof colour === "function" ? colour(props) : colour; - const encodedColor = encodeURIComponent(resolvedColor); - const strokeWidth = parseInt(resolvedThickness) + 1; + const encodedColor = isHexColor(resolvedColor) + ? resolvedColor + : encodeURIComponent(resolvedColor); + const strokeWidth = resolvedThickness + 1; return css` background-color: transparent; - height: ${resolvedThickness}; + height: ${resolvedThickness}px; background-repeat: repeat-x; - background-image: url('data:image/svg+xml,'); + background-image: url('data:image/svg+xml,'); `; }; @@ -74,15 +78,10 @@ export const getBorder = (key: keyof BorderSet) => { // If number make it return a pixel string if (typeof borderValue === "number") { - const pixelBorderValue = `${borderValue}px`; - return css` - ${pixelBorderValue} - `; + return `${borderValue}px`; } - return css` - ${borderValue} - `; + return borderValue; }; }; diff --git a/src/theme/border/types.ts b/src/theme/border/types.ts index 6970b193e..dbc268a53 100644 --- a/src/theme/border/types.ts +++ b/src/theme/border/types.ts @@ -1,19 +1,15 @@ import { CSSProp } from "styled-components"; import { BorderScheme } from "../types"; +import { StyledComponentProps } from "../helpers"; export interface BorderSet { "width-010": number; "width-020": number; solid: string; "dashed-default": ( - thickness?: number, - color?: string | ((props: any) => string) - ) => (props: any) => CSSProp; -} - -export interface StyleProps { - $thickness?: number | ((props: any) => string); - $color?: string | ((props: any) => string); + thickness?: number | ((props: StyledComponentProps) => number), + colour?: string | ((props: StyledComponentProps) => string) + ) => (props: StyledComponentProps) => CSSProp; } export type BorderCollectionMap = { diff --git a/tests/theme/theme-border.spec.tsx b/tests/theme/theme-border.spec.tsx index f922115dc..127d3b448 100644 --- a/tests/theme/theme-border.spec.tsx +++ b/tests/theme/theme-border.spec.tsx @@ -20,7 +20,7 @@ describe("Border Theming Test", () => { // Constants for border-top (dashed-default) const thickness = "1px"; - const color = "black"; + const color = "#DDE1E2"; const strokeWidth = 2; // Stroke width is thickeness + 1 @@ -113,7 +113,7 @@ describe("Border Theming Test", () => { // Constants for border-top (dashed-default) const thickness = "1px"; - const color = "black"; + const color = "#DDE1E2"; const strokeWidth = 2; const expectedSvg = ``; From 92cff68176a34716a6f8416329fd64f66a42ff5a Mon Sep 17 00:00:00 2001 From: roll Date: Fri, 6 Sep 2024 10:06:56 +0800 Subject: [PATCH 0414/1949] [V3][RL] Set font family, add formlabel font tokens --- src/theme/font/specs/lifesg-font-set.ts | 6 ++++++ src/theme/font/theme-helper.ts | 6 ++++++ src/theme/font/types.ts | 8 ++++++++ src/theme/typography/specs/lifesg-typography-set.ts | 9 +++++---- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/theme/font/specs/lifesg-font-set.ts b/src/theme/font/specs/lifesg-font-set.ts index 0d36122f8..ebf6586f1 100644 --- a/src/theme/font/specs/lifesg-font-set.ts +++ b/src/theme/font/specs/lifesg-font-set.ts @@ -46,4 +46,10 @@ export const LifeSgFontSet: FontSet = { "formlabel-size-baseline": "1rem", "formlabel-size-lg": "1.125rem", + + "formlabel-lh-baseline": "1.5rem", + "formlabel-lh-lg": "1.625rem", + + "formlabel-ls-baseline": "0.014rem", + "formlabel-ls-lg": "0rem", }; diff --git a/src/theme/font/theme-helper.ts b/src/theme/font/theme-helper.ts index 162437597..97972f393 100644 --- a/src/theme/font/theme-helper.ts +++ b/src/theme/font/theme-helper.ts @@ -75,4 +75,10 @@ export const FontValues: { "formlabel-size-baseline": getFontValues("formlabel-size-baseline"), "formlabel-size-lg": getFontValues("formlabel-size-lg"), + + "formlabel-lh-baseline": getFontValues("formlabel-lh-baseline"), + "formlabel-lh-lg": getFontValues("formlabel-lh-lg"), + + "formlabel-ls-baseline": getFontValues("formlabel-ls-baseline"), + "formlabel-ls-lg": getFontValues("formlabel-ls-lg"), }; diff --git a/src/theme/font/types.ts b/src/theme/font/types.ts index 859da8185..bbd36f225 100644 --- a/src/theme/font/types.ts +++ b/src/theme/font/types.ts @@ -61,4 +61,12 @@ export type FontSet = { // Form label sizes "formlabel-size-baseline": string; "formlabel-size-lg": string; + + // Form label line heights + "formlabel-lh-baseline": string; + "formlabel-lh-lg": string; + + // Form label letter spacing + "formlabel-ls-baseline": string; + "formlabel-ls-lg": string; }; diff --git a/src/theme/typography/specs/lifesg-typography-set.ts b/src/theme/typography/specs/lifesg-typography-set.ts index d5e7edd66..f3cf525c8 100644 --- a/src/theme/typography/specs/lifesg-typography-set.ts +++ b/src/theme/typography/specs/lifesg-typography-set.ts @@ -10,6 +10,7 @@ const generateTypographyCSS = ( lineHeightKey: keyof FontSet, letterSpacingKey: keyof FontSet ) => css` + font-family: ${getFontValues("font-family")}; font-size: ${getFontValues(fontSizeKey)}; font-weight: ${getFontValues(fontWeightKey)}; line-height: ${getFontValues(lineHeightKey)}; @@ -260,13 +261,13 @@ export const LifeSgTypographySet: TypographySet = { "formlabel-baseline-semibold": generateTypographyCSS( "formlabel-size-baseline", "weight-semibold", - "formlabel-size-baseline", - "body-ls-baseline" + "formlabel-lh-baseline", + "formlabel-ls-baseline" ), "formlabel-lg-semibold": generateTypographyCSS( "formlabel-size-lg", "weight-semibold", - "formlabel-size-lg", - "body-ls-lg" + "formlabel-lh-lg", + "formlabel-ls-lg" ), }; From 848abf32fa8d9e439b6aca910b65e92be09efecd Mon Sep 17 00:00:00 2001 From: roll Date: Fri, 6 Sep 2024 10:08:20 +0800 Subject: [PATCH 0415/1949] [V3][RL] Add typography docs --- stories/storybook-common/doc-alert.tsx | 34 ++- .../doc-elements/doc-typography-display.tsx | 227 ++++++++++++++++++ stories/theme/doc-elements/index.ts | 1 + .../typography/a-typography-introduction.mdx | 93 +++++++ .../theme/typography/b-typography-lifesg.mdx | 18 ++ 5 files changed, 368 insertions(+), 5 deletions(-) create mode 100644 stories/theme/doc-elements/doc-typography-display.tsx create mode 100644 stories/theme/typography/a-typography-introduction.mdx create mode 100644 stories/theme/typography/b-typography-lifesg.mdx diff --git a/stories/storybook-common/doc-alert.tsx b/stories/storybook-common/doc-alert.tsx index 1c6e05d7f..f16bab930 100644 --- a/stories/storybook-common/doc-alert.tsx +++ b/stories/storybook-common/doc-alert.tsx @@ -4,31 +4,55 @@ import { Alert } from "../../src/alert"; interface Props { children: React.ReactNode; + storybookLink?: string; } -export const DocAlert = ({ children }: Props) => { +export const DocAlert = ({ children, storybookLink }: Props) => { return ( - + {children} ); }; -export const DocInfo = ({ children }: Props) => { +export const DocInfo = ({ children, storybookLink }: Props) => { return ( - + {children} ); }; -export const DocNote = ({ children }: Props) => { +export const DocNote = ({ children, storybookLink }: Props) => { return ( } + actionLink={ + storybookLink + ? { href: storybookLink, children: "View documentation" } + : undefined + } > {children} diff --git a/stories/theme/doc-elements/doc-typography-display.tsx b/stories/theme/doc-elements/doc-typography-display.tsx new file mode 100644 index 000000000..7fd2a9e52 --- /dev/null +++ b/stories/theme/doc-elements/doc-typography-display.tsx @@ -0,0 +1,227 @@ +import { Typography } from "src/theme"; +import { FontSet, ThemeSpec, TypographySet } from "src/theme/types"; +import styled, { ThemeProvider, useTheme } from "styled-components"; +import { getFontValues } from "../../../src/theme/font/theme-helper"; + +interface TypographyCollectionProps { + tokens: (keyof TypographySet)[]; + fontSizeToken: keyof FontSet; + lineHeightToken: keyof FontSet; + letterSpacingToken: keyof FontSet; +} + +const TypographyCollection = ({ + tokens, + fontSizeToken, + lineHeightToken, + letterSpacingToken, +}: TypographyCollectionProps) => { + const theme = useTheme(); + const fontSize = getFontValues(fontSizeToken)({ theme }); + const lineHeight = getFontValues(lineHeightToken)({ theme }); + const letterSpacing = getFontValues(letterSpacingToken)({ theme }); + + return ( + +
    + {tokens.map((token) => { + return ( + + {token} + + ); + })} +
    +
    {fontSize}
    +
    {lineHeight}
    +
    {letterSpacing}
    +
    + ); +}; + +interface TypographyDisplayProps { + theme: ThemeSpec; +} + +export const TypographyDisplay = ({ theme }: TypographyDisplayProps) => { + return ( + + + +
    Token
    +
    Font size
    +
    Line height
    +
    Letter spacing
    +
    + + + + + + + + + + + + +
    +
    + ); +}; + +// ============================================================================= +// STYLE INTERFACE +// ============================================================================= +interface TextPreviewProps { + $token: string; +} + +// ============================================================================= +// STYLING +// ============================================================================= +const Display = styled.div` + display: grid; + grid-template-columns: repeat(4, minmax(max-content, 1fr)); + flex-wrap: wrap; + + margin-bottom: 2.5rem; + + &:last-child { + margin-bottom: 1rem; + } + + overflow-x: auto; +`; + +const Row = styled.div` + display: grid; + grid-column: 1 / span 4; + grid-template-columns: subgrid; + justify-items: flex-start; + align-items: flex-start; + gap: 1rem; + margin-bottom: 2.5rem; +`; + +const HeaderRow = styled(Row)` + margin-bottom: 1rem; + font-weight: bold; + padding-bottom: 0.5rem; + border-bottom: 1px solid #dde1e2; +`; + +const TextPreview = styled.div` + ${(props) => Typography[props.$token](props)} + margin-right: 3rem; +`; diff --git a/stories/theme/doc-elements/index.ts b/stories/theme/doc-elements/index.ts index 853d72f48..ea0fce178 100644 --- a/stories/theme/doc-elements/index.ts +++ b/stories/theme/doc-elements/index.ts @@ -1,2 +1,3 @@ export * from "./doc-primitive-colour-display"; export * from "./doc-semantic-colour-display"; +export * from "./doc-typography-display"; diff --git a/stories/theme/typography/a-typography-introduction.mdx b/stories/theme/typography/a-typography-introduction.mdx new file mode 100644 index 000000000..cccb03ebc --- /dev/null +++ b/stories/theme/typography/a-typography-introduction.mdx @@ -0,0 +1,93 @@ +import { Meta } from "@storybook/blocks"; +import { DocInfo, DocNote } from "stories/storybook-common"; + + + +# Typography + +```tsx +import { Font, Typography } from "@lifesg/react-design-system/theme"; +``` + +The **font** tokens define these font styling properties: + +- font family +- font size +- font weight +- line height +- letter spacing + +A **typography** token is a combination of these font tokens. + +## Collections + +[LifeSG](/docs/foundations-typography-lifesg--docs) | +[BookingSG](/docs/foundations-typography-bookingsg--docs) | +[RBS](/docs/foundations-typography-rbs--docs) | +[CCUBE](/docs/foundations-typography-ccube--docs) | +[MyLegacy](/docs/foundations-typography-mylegacy--docs) | +[OneService](/docs/foundations-typography-oneservice--docs) + +## Usage + +{/* TODO: update link to Typography component docs */} + + + In most cases, you can simply use the `Typography` component to render text + elements + + +The `Typography` namespace provides tokens to apply text styling within style +declarations. You will rarely need to use the `Font` tokens directly. + +```tsx +import { Typography } from "@lifesg/react-design-system/theme"; +import styled, { css } from "styled-components"; + +// A common use case is to initialise text style in a parent container to be inherited by child elements +const Container = styled.div` + ${Typography["header-xxl-bold"]} +`; + +// A common use case is to match an image, such as an icon, to the text size +const Icon = styled.svg` + height: ${Font["header-size-xxl"]}; +`; +``` + + + For inline icons, you can use the `em` and `lh` units instead to scale them + based on font + + +## Overriding + +When you modify a font token, any typography token referring to it will also +reflect the new specification. + +Font tokens should be `rem`-based to scale with the user's preferred font size. + +While not recommended, typography tokens can be overridden separately. You are +responsible for ensuring all relevant properties are included. + +```tsx +import { LifeSGTheme } from "@lifesg/react-design-system/theme"; + +const customTheme: ThemeSpec = { + ...LifeSGTheme, + overrides: { + font: { + "header-size-xxl": "5rem", // specify a custom value + }, + typography: { + "header-body-light": css` + font-family: serif; + font-size: 1rem; + font-weight: 300; + line-height: 1.4rem; + letter-spacing: 0; + `, // specify a custom set of styles + }, + }, +}; +``` diff --git a/stories/theme/typography/b-typography-lifesg.mdx b/stories/theme/typography/b-typography-lifesg.mdx new file mode 100644 index 000000000..3266b39cb --- /dev/null +++ b/stories/theme/typography/b-typography-lifesg.mdx @@ -0,0 +1,18 @@ +import { Meta } from "@storybook/blocks"; +import { LifeSGTheme } from "src/theme"; +import { TypographyDisplay } from "../doc-elements"; + + + +# LifeSG typography + +This is the font set used when the `fontScheme` is `"lifesg"`. + +```tsx +const theme: ThemeSpec = { + fontScheme: "lifesg", + // ...other specifications +}; +``` + + From d770712cf7413425e6d19135e761208a2d563b30 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 10 Sep 2024 12:26:56 +0800 Subject: [PATCH 0416/1949] [CCUBE-1534][MAHI]Fix circular dep potential issue and ensure encoding for all colours --- src/theme/border/specs/lifesg-border-set.ts | 4 ++-- src/theme/border/theme-helper.ts | 8 +------- tests/theme/theme-border.spec.tsx | 4 ++-- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/theme/border/specs/lifesg-border-set.ts b/src/theme/border/specs/lifesg-border-set.ts index 80f33ce34..c7a7e8d3a 100644 --- a/src/theme/border/specs/lifesg-border-set.ts +++ b/src/theme/border/specs/lifesg-border-set.ts @@ -1,7 +1,7 @@ import { BorderSet } from "../types"; import { dashedBorderStyle } from "../theme-helper"; import { StyledComponentProps } from "../../helpers"; -import { Colour } from "../../index"; +import { ColourSemantic } from "../../colour-semantic/theme-helper"; export const LifeSgBorderSet: BorderSet = { "width-010": 1, @@ -13,7 +13,7 @@ export const LifeSgBorderSet: BorderSet = { thickness: number | ((props: StyledComponentProps) => number) = 1, colour: | string - | ((props: StyledComponentProps) => string) = Colour.border + | ((props: StyledComponentProps) => string) = ColourSemantic.border ) => { return dashedBorderStyle(thickness, colour); }, diff --git a/src/theme/border/theme-helper.ts b/src/theme/border/theme-helper.ts index 2fa1e8080..d0a883893 100644 --- a/src/theme/border/theme-helper.ts +++ b/src/theme/border/theme-helper.ts @@ -10,10 +10,6 @@ const BorderSpec: ThemeCollectionSpec = { }, defaultValue: "lifesg", }; -// to check if hex colour -const isHexColor = (color: string): boolean => { - return /^#([0-9A-F]{3}){1,2}$/i.test(color); -}; export const dashedBorderStyle = ( @@ -29,9 +25,7 @@ export const dashedBorderStyle = const resolvedColor = typeof colour === "function" ? colour(props) : colour; - const encodedColor = isHexColor(resolvedColor) - ? resolvedColor - : encodeURIComponent(resolvedColor); + const encodedColor = encodeURIComponent(resolvedColor); const strokeWidth = resolvedThickness + 1; return css` diff --git a/tests/theme/theme-border.spec.tsx b/tests/theme/theme-border.spec.tsx index 127d3b448..5abbdc88c 100644 --- a/tests/theme/theme-border.spec.tsx +++ b/tests/theme/theme-border.spec.tsx @@ -20,7 +20,7 @@ describe("Border Theming Test", () => { // Constants for border-top (dashed-default) const thickness = "1px"; - const color = "#DDE1E2"; + const color = "%23DDE1E2"; const strokeWidth = 2; // Stroke width is thickeness + 1 @@ -113,7 +113,7 @@ describe("Border Theming Test", () => { // Constants for border-top (dashed-default) const thickness = "1px"; - const color = "#DDE1E2"; + const color = "%23DDE1E2"; const strokeWidth = 2; const expectedSvg = ``; From d59fc0a7746d91b5ed8023b40f06071e25ed4abf Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Tue, 10 Sep 2024 16:04:28 +0800 Subject: [PATCH 0417/1949] [CCUBE-1534][MAHI]Remove wrong import and change naming conv for consistency --- src/theme/index.ts | 3 +-- tests/theme/theme-border.spec.tsx | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/theme/index.ts b/src/theme/index.ts index d8cd14ebe..fbc70ee57 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,4 +1,3 @@ -import { Border } from "../time-slot-bar/time-slot-bar.styles"; import { AnimationValues } from "./animation/theme-helper"; import { BorderValues } from "./border/theme-helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; @@ -18,7 +17,7 @@ export const Typography = TypographyValues; export const Animation = AnimationValues; -export const BorderSet = BorderValues; +export const Border = BorderValues; export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", diff --git a/tests/theme/theme-border.spec.tsx b/tests/theme/theme-border.spec.tsx index 5abbdc88c..3f0c84667 100644 --- a/tests/theme/theme-border.spec.tsx +++ b/tests/theme/theme-border.spec.tsx @@ -2,11 +2,11 @@ import "jest-styled-components"; import styled, { ThemeProvider } from "styled-components"; import { render } from "@testing-library/react"; import { ThemeSpec } from "../../src/theme/types"; -import { BorderSet } from "../../src"; +import { Border } from "../../src"; const StyledBorderComponent = styled.div` - border: ${BorderSet["width-010"]} ${BorderSet.solid}; - ${BorderSet["dashed-default"]}; + border: ${Border["width-010"]} ${Border.solid}; + ${Border["dashed-default"]}; `; describe("Border Theming Test", () => { @@ -55,8 +55,8 @@ describe("Border Theming Test", () => { it("should apply correct border styles when overriding border color in dashed-default", () => { const StyledBorderComponentDash = styled.div` - border: ${BorderSet["width-010"]} ${BorderSet.solid}; - ${BorderSet["dashed-default"](2, "red")}; + border: ${Border["width-010"]} ${Border.solid}; + ${Border["dashed-default"](2, "red")}; `; const mockTheme: ThemeSpec = { From c9707af7ad665bd58b34dabd6e767d3aafdbf555 Mon Sep 17 00:00:00 2001 From: qroll Date: Tue, 10 Sep 2024 18:31:01 +0800 Subject: [PATCH 0418/1949] [MISC][RL] Bump v2.7.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 28f1502e1..46c27fb30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.7", + "version": "2.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.7", + "version": "2.7.0", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 475802d7d..c48b4a130 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.7", + "version": "2.7.0", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 36e550324c5aede7f42595df9459b7cd1a049d75 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 28 Aug 2024 13:00:02 +0800 Subject: [PATCH 0419/1949] [CCUBE-1535][MAHI]Set Up Spacing and Radius tokens --- src/theme/index.ts | 8 ++ src/theme/radius/specs/lifesg-radius-set.ts | 10 ++ src/theme/radius/theme-helper.ts | 36 +++++++ src/theme/radius/types.ts | 16 ++++ src/theme/spacing/specs/lifesg-spacing-set.ts | 24 +++++ src/theme/spacing/theme-helper.ts | 50 ++++++++++ src/theme/spacing/types.ts | 30 ++++++ src/theme/types.ts | 12 +++ tests/theme/theme-radius.spec.tsx | 96 +++++++++++++++++++ tests/theme/theme-spacing.spec.tsx | 83 ++++++++++++++++ 10 files changed, 365 insertions(+) create mode 100644 src/theme/radius/specs/lifesg-radius-set.ts create mode 100644 src/theme/radius/theme-helper.ts create mode 100644 src/theme/radius/types.ts create mode 100644 src/theme/spacing/specs/lifesg-spacing-set.ts create mode 100644 src/theme/spacing/theme-helper.ts create mode 100644 src/theme/spacing/types.ts create mode 100644 tests/theme/theme-radius.spec.tsx create mode 100644 tests/theme/theme-spacing.spec.tsx diff --git a/src/theme/index.ts b/src/theme/index.ts index fbc70ee57..8827151ef 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -3,6 +3,8 @@ import { BorderValues } from "./border/theme-helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; import { FontValues } from "./font/theme-helper"; +import { RadiusSetValue } from "./radius/theme-helper"; +import { SpacingSetValue } from "./spacing/theme-helper"; import { ThemeSpec } from "./types"; import { TypographyValues } from "./typography/theme-helper"; @@ -19,6 +21,12 @@ export const Animation = AnimationValues; export const Border = BorderValues; +export const BorderSet = BorderValues; + +export const Spacing = SpacingSetValue; + +export const Radius = RadiusSetValue; + export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", diff --git a/src/theme/radius/specs/lifesg-radius-set.ts b/src/theme/radius/specs/lifesg-radius-set.ts new file mode 100644 index 000000000..26eac6008 --- /dev/null +++ b/src/theme/radius/specs/lifesg-radius-set.ts @@ -0,0 +1,10 @@ +import { RadiusSet } from "../types"; + +export const LifeSgRadiusSet: RadiusSet = { + none: "0px", + xs: "2px", + sm: "4px", + md: "8px", + lg: "12px", + full: "9999px", +}; diff --git a/src/theme/radius/theme-helper.ts b/src/theme/radius/theme-helper.ts new file mode 100644 index 000000000..3a329eb50 --- /dev/null +++ b/src/theme/radius/theme-helper.ts @@ -0,0 +1,36 @@ +import { StyledComponentProps, getCollection, getValue } from "../helpers"; +import { RadiusScheme, ThemeCollectionSpec } from "../types"; +import { LifeSgRadiusSet } from "./specs/lifesg-radius-set"; +import { RadiusCollectionsMap, RadiusSet } from "./types"; + +const RadiusSpec: ThemeCollectionSpec = { + collections: { + lifesg: LifeSgRadiusSet, + }, + defaultValue: "lifesg", +}; + +export const getSpaceValue = (key: keyof RadiusSet) => { + return (props: StyledComponentProps): string => { + const theme = props.theme; + const spacingset: RadiusSet = getCollection( + RadiusSpec, + theme.spacingScheme + ); + + if (theme.overrides && theme.overrides.radius) { + return getValue(spacingset, key, theme.overrides.radius); + } else { + return spacingset[key]; + } + }; +}; + +export const RadiusSetValue = { + none: getSpaceValue("none"), + xs: getSpaceValue("xs"), + sm: getSpaceValue("sm"), + md: getSpaceValue("md"), + lg: getSpaceValue("lg"), + full: getSpaceValue("full"), +}; diff --git a/src/theme/radius/types.ts b/src/theme/radius/types.ts new file mode 100644 index 000000000..960a79751 --- /dev/null +++ b/src/theme/radius/types.ts @@ -0,0 +1,16 @@ +import { RadiusScheme } from "../types"; + +export type RadiusSet = { + none: string; + xs: string; + sm: string; + md: string; + lg: string; + full: string; +}; + +export type RadiusSetSetOptions = Partial; + +export type RadiusCollectionsMap = { + [key in RadiusScheme]: RadiusSet; +}; diff --git a/src/theme/spacing/specs/lifesg-spacing-set.ts b/src/theme/spacing/specs/lifesg-spacing-set.ts new file mode 100644 index 000000000..fd04f59cd --- /dev/null +++ b/src/theme/spacing/specs/lifesg-spacing-set.ts @@ -0,0 +1,24 @@ +import { SpacingSetType } from "../types"; + +export const LifeSgSpacingSet: SpacingSetType = { + "spacing-0": "0rem", + "spacing-4": "0.25rem", + "spacing-8": "0.5rem", + "spacing-12": "0.75rem", + "spacing-16": "1rem", + "spacing-20": "1.25rem", + "spacing-24": "1.5rem", + "spacing-32": "2rem", + "spacing-40": "2.5rem", + "spacing-48": "3rem", + "spacing-64": "4rem", + "spacing-72": "4.5rem", + + "layout-xs": "8px", + "layout-sm": "16px", + "layout-md": "24px", + "layout-lg": "32px", + "layout-xl": "48px", + "layout-xxl": "64px", + "layout-xxxl": "128px", +}; diff --git a/src/theme/spacing/theme-helper.ts b/src/theme/spacing/theme-helper.ts new file mode 100644 index 000000000..89e3ee473 --- /dev/null +++ b/src/theme/spacing/theme-helper.ts @@ -0,0 +1,50 @@ +import { StyledComponentProps, getCollection, getValue } from "../helpers"; +import { SpacingScheme, ThemeCollectionSpec } from "../types"; +import { LifeSgSpacingSet } from "./specs/lifesg-spacing-set"; +import { SpacingCollectionsMap, SpacingSetType } from "./types"; + +const SpacingSpec: ThemeCollectionSpec = { + collections: { + lifesg: LifeSgSpacingSet, + }, + defaultValue: "lifesg", +}; + +export const getSpaceValue = (key: keyof SpacingSetType) => { + return (props: StyledComponentProps): string => { + const theme = props.theme; + const spacingset: SpacingSetType = getCollection( + SpacingSpec, + theme.spacingScheme + ); + + if (theme.overrides && theme.overrides.spacing) { + return getValue(spacingset, key, theme.overrides.spacing); + } else { + return spacingset[key]; + } + }; +}; + +export const SpacingSetValue = { + "spacing-0": getSpaceValue("spacing-0"), + "spacing-4": getSpaceValue("spacing-4"), + "spacing-8": getSpaceValue("spacing-8"), + "spacing-12": getSpaceValue("spacing-12"), + "spacing-16": getSpaceValue("spacing-16"), + "spacing-20": getSpaceValue("spacing-20"), + "spacing-24": getSpaceValue("spacing-24"), + "spacing-32": getSpaceValue("spacing-32"), + "spacing-40": getSpaceValue("spacing-40"), + "spacing-48": getSpaceValue("spacing-48"), + "spacing-64": getSpaceValue("spacing-64"), + "spacing-72": getSpaceValue("spacing-72"), + + "layout-xs": getSpaceValue("layout-xs"), + "layout-sm": getSpaceValue("layout-sm"), + "layout-md": getSpaceValue("layout-md"), + "layout-lg": getSpaceValue("layout-lg"), + "layout-xl": getSpaceValue("layout-xl"), + "layout-xxl": getSpaceValue("layout-xxl"), + "layout-xxxl": getSpaceValue("layout-xxxl"), +}; diff --git a/src/theme/spacing/types.ts b/src/theme/spacing/types.ts new file mode 100644 index 000000000..70c1df341 --- /dev/null +++ b/src/theme/spacing/types.ts @@ -0,0 +1,30 @@ +import { SpacingScheme } from "../types"; + +export type SpacingSetType = { + "spacing-0": string; + "spacing-4": string; + "spacing-8": string; + "spacing-12": string; + "spacing-16": string; + "spacing-20": string; + "spacing-24": string; + "spacing-32": string; + "spacing-40": string; + "spacing-48": string; + "spacing-64": string; + "spacing-72": string; + + "layout-xs": string; + "layout-sm": string; + "layout-md": string; + "layout-lg": string; + "layout-xl": string; + "layout-xxl": string; + "layout-xxxl": string; +}; + +export type SpacingSetOptions = Partial; + +export type SpacingCollectionsMap = { + [key in SpacingScheme]: SpacingSetType; +}; diff --git a/src/theme/types.ts b/src/theme/types.ts index 3bdbc546f..36b6d66df 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -4,6 +4,8 @@ import { TypographySetOptions } from "./typography/types"; import { FontSetOptions } from "./font/types"; import { AnimationSetOptions } from "./animation/types"; import { BorderSetOptions } from "./border/types"; +import { SpacingSetOptions } from "./spacing/types"; +import { RadiusSetSetOptions } from "./radius/types"; export type { PrimitiveColourSet, @@ -22,6 +24,10 @@ export type { AnimationSet, AnimationSetOptions } from "./animation/types"; export type { BorderSet, BorderSetOptions } from "./border/types"; +export type { RadiusSet, RadiusSetSetOptions } from "./radius/types"; + +export type { SpacingSetType, SpacingSetOptions } from "./spacing/types"; + export type ColourScheme = | "lifesg" | "bookingsg" @@ -32,13 +38,17 @@ export type ColourScheme = export type FontScheme = "lifesg" | "bookingsg" | "rbs" | "mylegacy" | "ccube"; export type AnimationScheme = "lifesg"; export type BorderScheme = "lifesg"; +export type SpacingScheme = "lifesg"; +export type RadiusScheme = "lifesg"; export interface ThemeSpecOptions { primitiveColour?: PrimitiveColourSetOptions | undefined; semanticColour?: SemanticColourSetOptions | undefined; font?: FontSetOptions | undefined; animation?: AnimationSetOptions | undefined; + spacing?: SpacingSetOptions | undefined; border?: BorderSetOptions | undefined; + radius?: RadiusSetSetOptions | undefined; typography?: TypographySetOptions | undefined; } @@ -47,6 +57,8 @@ export interface ThemeSpec { fontScheme: FontScheme; animationScheme: AnimationScheme; borderScheme: BorderScheme; + spacingScheme?: SpacingScheme | undefined; + radiusScheme?: RadiusScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/tests/theme/theme-radius.spec.tsx b/tests/theme/theme-radius.spec.tsx new file mode 100644 index 000000000..ff0c6cb92 --- /dev/null +++ b/tests/theme/theme-radius.spec.tsx @@ -0,0 +1,96 @@ +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import styled, { ThemeProvider } from "styled-components"; +import { ThemeSpec } from "../../src/theme/types"; +import { Radius } from "../../src"; + +const RadiusTestComponent = styled.div` + border-radius: ${Radius.sm}; +`; + +describe("Radius Theming Test", () => { + it("should apply correct border-radius based on the theme", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + radiusScheme: "lifesg", + }; + + const radiusValue = "4px"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule( + "border-radius", + radiusValue + ); + }); + + it("should apply correct border-radius when overriding radius token", () => { + const overrideTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + radiusScheme: "lifesg", + overrides: { + radius: { + sm: "6px", + }, + }, + }; + + const radiusValue = "6px"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule( + "border-radius", + radiusValue + ); + }); + + it("should apply correct border-radius when overriding multiple radius tokens", () => { + const RadiusTestComponent2 = styled.div` + border-radius: ${Radius.sm}; + line-height: ${Radius.md}; + `; + + const overrideTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + radiusScheme: "lifesg", + overrides: { + radius: { + sm: "6px", + md: "10px", + }, + }, + }; + + const radiusValue = "6px"; + const radiusValue2 = "10px"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule( + "border-radius", + radiusValue + ); + + expect(container.firstChild).toHaveStyleRule( + "line-height", + radiusValue2 + ); + }); +}); diff --git a/tests/theme/theme-spacing.spec.tsx b/tests/theme/theme-spacing.spec.tsx new file mode 100644 index 000000000..224c9f9e1 --- /dev/null +++ b/tests/theme/theme-spacing.spec.tsx @@ -0,0 +1,83 @@ +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import styled, { ThemeProvider } from "styled-components"; +import { ThemeSpec } from "../../src/theme/types"; +import { Spacing } from "../../src"; + +const SpacingTestComponent = styled.div` + margin: ${Spacing["spacing-16"]}; + padding: ${Spacing["layout-lg"]}; +`; + +describe("Spacing Themeing Test", () => { + it("should apply correct spacing based on the theme", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + spacingScheme: "lifesg", + }; + + const marginValue = "1rem"; + const paddingValue = "32px"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule("margin", marginValue); + expect(container.firstChild).toHaveStyleRule("padding", paddingValue); + }); + + it("should apply correct spacing when overriding spacing token", () => { + const overrideTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + spacingScheme: "lifesg", + overrides: { + spacing: { + "spacing-16": "2rem", + }, + }, + }; + + const marginValue = "2rem"; + const paddingValue = "32px"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule("margin", marginValue); + expect(container.firstChild).toHaveStyleRule("padding", paddingValue); + }); + + it("should apply correct spacing when overriding spacing token", () => { + const overrideTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + spacingScheme: "lifesg", + overrides: { + spacing: { + "spacing-16": "3rem", + "layout-lg": "40px", + }, + }, + }; + + const marginValue = "3rem"; + const paddingValue = "40px"; + + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule("margin", marginValue); + expect(container.firstChild).toHaveStyleRule("padding", paddingValue); + }); +}); From c0d2b35ce7af60104555c6351ad72e8e1ad112ca Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 11 Sep 2024 09:49:25 +0800 Subject: [PATCH 0420/1949] [CCUBE-1535][MAHI]remove unneccasary files and added fix for test script for theme --- tests/theme/theme-radius.spec.tsx | 6 ++++++ tests/theme/theme-spacing.spec.tsx | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/tests/theme/theme-radius.spec.tsx b/tests/theme/theme-radius.spec.tsx index ff0c6cb92..f6de7553f 100644 --- a/tests/theme/theme-radius.spec.tsx +++ b/tests/theme/theme-radius.spec.tsx @@ -13,6 +13,8 @@ describe("Radius Theming Test", () => { const mockTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", radiusScheme: "lifesg", }; @@ -34,6 +36,8 @@ describe("Radius Theming Test", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", radiusScheme: "lifesg", overrides: { radius: { @@ -65,6 +69,8 @@ describe("Radius Theming Test", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", radiusScheme: "lifesg", overrides: { radius: { diff --git a/tests/theme/theme-spacing.spec.tsx b/tests/theme/theme-spacing.spec.tsx index 224c9f9e1..fbf01dcb8 100644 --- a/tests/theme/theme-spacing.spec.tsx +++ b/tests/theme/theme-spacing.spec.tsx @@ -14,6 +14,8 @@ describe("Spacing Themeing Test", () => { const mockTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", spacingScheme: "lifesg", }; @@ -34,6 +36,8 @@ describe("Spacing Themeing Test", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", spacingScheme: "lifesg", overrides: { spacing: { @@ -59,6 +63,8 @@ describe("Spacing Themeing Test", () => { const overrideTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", spacingScheme: "lifesg", overrides: { spacing: { From 409a2cb9e2c8dfc65172ff98feba2a15a4c0d8b1 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 11 Sep 2024 11:19:08 +0800 Subject: [PATCH 0421/1949] [CCUBE-1535][MAHI]Make radius and border scheme compulsory and fix up some naming convention --- src/theme/index.ts | 20 +++++--- src/theme/radius/theme-helper.ts | 16 +++---- src/theme/radius/types.ts | 2 +- src/theme/spacing/specs/lifesg-spacing-set.ts | 4 +- src/theme/spacing/theme-helper.ts | 46 +++++++++---------- src/theme/spacing/types.ts | 6 +-- src/theme/types.ts | 18 +++++--- tests/theme/theme-animation.spec.tsx | 4 ++ tests/theme/theme-border.spec.tsx | 6 +++ tests/theme/theme-colour.spec.tsx | 6 +++ tests/theme/theme-font.spec.tsx | 6 +++ tests/theme/theme-radius.spec.tsx | 3 ++ tests/theme/theme-spacing.spec.tsx | 3 ++ 13 files changed, 91 insertions(+), 49 deletions(-) diff --git a/src/theme/index.ts b/src/theme/index.ts index 8827151ef..6e4c1b4d8 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -3,8 +3,8 @@ import { BorderValues } from "./border/theme-helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; import { ColourSemantic } from "./colour-semantic/theme-helper"; import { FontValues } from "./font/theme-helper"; -import { RadiusSetValue } from "./radius/theme-helper"; -import { SpacingSetValue } from "./spacing/theme-helper"; +import { RadiusValues } from "./radius/theme-helper"; +import { SpacingValues } from "./spacing/theme-helper"; import { ThemeSpec } from "./types"; import { TypographyValues } from "./typography/theme-helper"; @@ -21,17 +21,17 @@ export const Animation = AnimationValues; export const Border = BorderValues; -export const BorderSet = BorderValues; +export const Spacing = SpacingValues; -export const Spacing = SpacingSetValue; - -export const Radius = RadiusSetValue; +export const Radius = RadiusValues; export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; export const BookingSGTheme: ThemeSpec = { @@ -39,6 +39,8 @@ export const BookingSGTheme: ThemeSpec = { fontScheme: "bookingsg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; export const CcubeTheme: ThemeSpec = { @@ -46,6 +48,8 @@ export const CcubeTheme: ThemeSpec = { fontScheme: "ccube", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; export const MyLegacyTheme: ThemeSpec = { @@ -53,6 +57,8 @@ export const MyLegacyTheme: ThemeSpec = { fontScheme: "mylegacy", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; export const RBSTheme: ThemeSpec = { @@ -60,4 +66,6 @@ export const RBSTheme: ThemeSpec = { fontScheme: "rbs", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; diff --git a/src/theme/radius/theme-helper.ts b/src/theme/radius/theme-helper.ts index 3a329eb50..97a337518 100644 --- a/src/theme/radius/theme-helper.ts +++ b/src/theme/radius/theme-helper.ts @@ -10,7 +10,7 @@ const RadiusSpec: ThemeCollectionSpec = { defaultValue: "lifesg", }; -export const getSpaceValue = (key: keyof RadiusSet) => { +export const getSpace = (key: keyof RadiusSet) => { return (props: StyledComponentProps): string => { const theme = props.theme; const spacingset: RadiusSet = getCollection( @@ -26,11 +26,11 @@ export const getSpaceValue = (key: keyof RadiusSet) => { }; }; -export const RadiusSetValue = { - none: getSpaceValue("none"), - xs: getSpaceValue("xs"), - sm: getSpaceValue("sm"), - md: getSpaceValue("md"), - lg: getSpaceValue("lg"), - full: getSpaceValue("full"), +export const RadiusValues = { + none: getSpace("none"), + xs: getSpace("xs"), + sm: getSpace("sm"), + md: getSpace("md"), + lg: getSpace("lg"), + full: getSpace("full"), }; diff --git a/src/theme/radius/types.ts b/src/theme/radius/types.ts index 960a79751..f780e69d4 100644 --- a/src/theme/radius/types.ts +++ b/src/theme/radius/types.ts @@ -9,7 +9,7 @@ export type RadiusSet = { full: string; }; -export type RadiusSetSetOptions = Partial; +export type RadiusSetOptions = Partial; export type RadiusCollectionsMap = { [key in RadiusScheme]: RadiusSet; diff --git a/src/theme/spacing/specs/lifesg-spacing-set.ts b/src/theme/spacing/specs/lifesg-spacing-set.ts index fd04f59cd..7ff73ff5c 100644 --- a/src/theme/spacing/specs/lifesg-spacing-set.ts +++ b/src/theme/spacing/specs/lifesg-spacing-set.ts @@ -1,6 +1,6 @@ -import { SpacingSetType } from "../types"; +import { SpacingSet } from "../types"; -export const LifeSgSpacingSet: SpacingSetType = { +export const LifeSgSpacingSet: SpacingSet = { "spacing-0": "0rem", "spacing-4": "0.25rem", "spacing-8": "0.5rem", diff --git a/src/theme/spacing/theme-helper.ts b/src/theme/spacing/theme-helper.ts index 89e3ee473..a1379409a 100644 --- a/src/theme/spacing/theme-helper.ts +++ b/src/theme/spacing/theme-helper.ts @@ -1,7 +1,7 @@ import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { SpacingScheme, ThemeCollectionSpec } from "../types"; import { LifeSgSpacingSet } from "./specs/lifesg-spacing-set"; -import { SpacingCollectionsMap, SpacingSetType } from "./types"; +import { SpacingCollectionsMap, SpacingSet } from "./types"; const SpacingSpec: ThemeCollectionSpec = { collections: { @@ -10,10 +10,10 @@ const SpacingSpec: ThemeCollectionSpec = { defaultValue: "lifesg", }; -export const getSpaceValue = (key: keyof SpacingSetType) => { +export const getSpace = (key: keyof SpacingSet) => { return (props: StyledComponentProps): string => { const theme = props.theme; - const spacingset: SpacingSetType = getCollection( + const spacingset: SpacingSet = getCollection( SpacingSpec, theme.spacingScheme ); @@ -26,25 +26,25 @@ export const getSpaceValue = (key: keyof SpacingSetType) => { }; }; -export const SpacingSetValue = { - "spacing-0": getSpaceValue("spacing-0"), - "spacing-4": getSpaceValue("spacing-4"), - "spacing-8": getSpaceValue("spacing-8"), - "spacing-12": getSpaceValue("spacing-12"), - "spacing-16": getSpaceValue("spacing-16"), - "spacing-20": getSpaceValue("spacing-20"), - "spacing-24": getSpaceValue("spacing-24"), - "spacing-32": getSpaceValue("spacing-32"), - "spacing-40": getSpaceValue("spacing-40"), - "spacing-48": getSpaceValue("spacing-48"), - "spacing-64": getSpaceValue("spacing-64"), - "spacing-72": getSpaceValue("spacing-72"), +export const SpacingValues = { + "spacing-0": getSpace("spacing-0"), + "spacing-4": getSpace("spacing-4"), + "spacing-8": getSpace("spacing-8"), + "spacing-12": getSpace("spacing-12"), + "spacing-16": getSpace("spacing-16"), + "spacing-20": getSpace("spacing-20"), + "spacing-24": getSpace("spacing-24"), + "spacing-32": getSpace("spacing-32"), + "spacing-40": getSpace("spacing-40"), + "spacing-48": getSpace("spacing-48"), + "spacing-64": getSpace("spacing-64"), + "spacing-72": getSpace("spacing-72"), - "layout-xs": getSpaceValue("layout-xs"), - "layout-sm": getSpaceValue("layout-sm"), - "layout-md": getSpaceValue("layout-md"), - "layout-lg": getSpaceValue("layout-lg"), - "layout-xl": getSpaceValue("layout-xl"), - "layout-xxl": getSpaceValue("layout-xxl"), - "layout-xxxl": getSpaceValue("layout-xxxl"), + "layout-xs": getSpace("layout-xs"), + "layout-sm": getSpace("layout-sm"), + "layout-md": getSpace("layout-md"), + "layout-lg": getSpace("layout-lg"), + "layout-xl": getSpace("layout-xl"), + "layout-xxl": getSpace("layout-xxl"), + "layout-xxxl": getSpace("layout-xxxl"), }; diff --git a/src/theme/spacing/types.ts b/src/theme/spacing/types.ts index 70c1df341..e158ca63f 100644 --- a/src/theme/spacing/types.ts +++ b/src/theme/spacing/types.ts @@ -1,6 +1,6 @@ import { SpacingScheme } from "../types"; -export type SpacingSetType = { +export type SpacingSet = { "spacing-0": string; "spacing-4": string; "spacing-8": string; @@ -23,8 +23,8 @@ export type SpacingSetType = { "layout-xxxl": string; }; -export type SpacingSetOptions = Partial; +export type SpacingSetOptions = Partial; export type SpacingCollectionsMap = { - [key in SpacingScheme]: SpacingSetType; + [key in SpacingScheme]: SpacingSet; }; diff --git a/src/theme/types.ts b/src/theme/types.ts index 36b6d66df..e7c14d9dc 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -5,7 +5,7 @@ import { FontSetOptions } from "./font/types"; import { AnimationSetOptions } from "./animation/types"; import { BorderSetOptions } from "./border/types"; import { SpacingSetOptions } from "./spacing/types"; -import { RadiusSetSetOptions } from "./radius/types"; +import { RadiusSetOptions } from "./radius/types"; export type { PrimitiveColourSet, @@ -24,9 +24,15 @@ export type { AnimationSet, AnimationSetOptions } from "./animation/types"; export type { BorderSet, BorderSetOptions } from "./border/types"; -export type { RadiusSet, RadiusSetSetOptions } from "./radius/types"; +export type { + RadiusSet, + RadiusSetOptions as RadiusSetSetOptions, +} from "./radius/types"; -export type { SpacingSetType, SpacingSetOptions } from "./spacing/types"; +export type { + SpacingSet as SpacingSetType, + SpacingSetOptions, +} from "./spacing/types"; export type ColourScheme = | "lifesg" @@ -48,7 +54,7 @@ export interface ThemeSpecOptions { animation?: AnimationSetOptions | undefined; spacing?: SpacingSetOptions | undefined; border?: BorderSetOptions | undefined; - radius?: RadiusSetSetOptions | undefined; + radius?: RadiusSetOptions | undefined; typography?: TypographySetOptions | undefined; } @@ -57,8 +63,8 @@ export interface ThemeSpec { fontScheme: FontScheme; animationScheme: AnimationScheme; borderScheme: BorderScheme; - spacingScheme?: SpacingScheme | undefined; - radiusScheme?: RadiusScheme; + spacingScheme: SpacingScheme; + radiusScheme: RadiusScheme; overrides?: ThemeSpecOptions | undefined; } diff --git a/tests/theme/theme-animation.spec.tsx b/tests/theme/theme-animation.spec.tsx index 05a766394..2c9d38663 100644 --- a/tests/theme/theme-animation.spec.tsx +++ b/tests/theme/theme-animation.spec.tsx @@ -16,6 +16,8 @@ describe("StyledAnimationTest", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; const duration = "500ms"; @@ -39,6 +41,8 @@ describe("StyledAnimationTest", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", overrides: { animation: { "duration-500": "700ms", diff --git a/tests/theme/theme-border.spec.tsx b/tests/theme/theme-border.spec.tsx index 3f0c84667..613d6251c 100644 --- a/tests/theme/theme-border.spec.tsx +++ b/tests/theme/theme-border.spec.tsx @@ -16,6 +16,8 @@ describe("Border Theming Test", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; // Constants for border-top (dashed-default) @@ -64,6 +66,8 @@ describe("Border Theming Test", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; const dashThickness = "2px"; @@ -104,6 +108,8 @@ describe("Border Theming Test", () => { fontScheme: "lifesg", borderScheme: "lifesg", animationScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", overrides: { border: { "width-010": 3, diff --git a/tests/theme/theme-colour.spec.tsx b/tests/theme/theme-colour.spec.tsx index 13adc68a5..f6df87457 100644 --- a/tests/theme/theme-colour.spec.tsx +++ b/tests/theme/theme-colour.spec.tsx @@ -16,6 +16,8 @@ describe("Colour Themeing Test", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; const bgColor = "#1A122C"; @@ -40,6 +42,8 @@ describe("Colour Themeing Test", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", overrides: { primitiveColour: { "primary-10": "#fefefe", @@ -69,6 +73,8 @@ describe("Colour Themeing Test", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", overrides: { semanticColour: { "border-primary": "#fefefe", diff --git a/tests/theme/theme-font.spec.tsx b/tests/theme/theme-font.spec.tsx index e73f1a2cb..f47b252bd 100644 --- a/tests/theme/theme-font.spec.tsx +++ b/tests/theme/theme-font.spec.tsx @@ -20,6 +20,8 @@ describe("StyledTypographyTest", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; const fontSize = "3rem"; @@ -48,6 +50,8 @@ describe("StyledTypographyTest", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", overrides: { typography: { "header-xxl-bold": { @@ -86,6 +90,8 @@ describe("StyledTypographyTest", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", }; const fontSize = "1.125rem"; diff --git a/tests/theme/theme-radius.spec.tsx b/tests/theme/theme-radius.spec.tsx index f6de7553f..5fe570838 100644 --- a/tests/theme/theme-radius.spec.tsx +++ b/tests/theme/theme-radius.spec.tsx @@ -15,6 +15,7 @@ describe("Radius Theming Test", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", radiusScheme: "lifesg", }; @@ -38,6 +39,7 @@ describe("Radius Theming Test", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", radiusScheme: "lifesg", overrides: { radius: { @@ -71,6 +73,7 @@ describe("Radius Theming Test", () => { fontScheme: "lifesg", animationScheme: "lifesg", borderScheme: "lifesg", + spacingScheme: "lifesg", radiusScheme: "lifesg", overrides: { radius: { diff --git a/tests/theme/theme-spacing.spec.tsx b/tests/theme/theme-spacing.spec.tsx index fbf01dcb8..c53d2efc7 100644 --- a/tests/theme/theme-spacing.spec.tsx +++ b/tests/theme/theme-spacing.spec.tsx @@ -17,6 +17,7 @@ describe("Spacing Themeing Test", () => { animationScheme: "lifesg", borderScheme: "lifesg", spacingScheme: "lifesg", + radiusScheme: "lifesg", }; const marginValue = "1rem"; @@ -39,6 +40,7 @@ describe("Spacing Themeing Test", () => { animationScheme: "lifesg", borderScheme: "lifesg", spacingScheme: "lifesg", + radiusScheme: "lifesg", overrides: { spacing: { "spacing-16": "2rem", @@ -66,6 +68,7 @@ describe("Spacing Themeing Test", () => { animationScheme: "lifesg", borderScheme: "lifesg", spacingScheme: "lifesg", + radiusScheme: "lifesg", overrides: { spacing: { "spacing-16": "3rem", From 3e4177ede7c0ae1026cb22a7a358a32da5a0641d Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 11 Sep 2024 11:48:49 +0800 Subject: [PATCH 0422/1949] [CCUBE-1547][MAHI]Set up breakpoint tokens and mediaquery helper function --- .../breakpoint/specs/lifesg-breakpoint-set.ts | 41 ++++++++++ src/theme/breakpoint/theme-helper.ts | 74 +++++++++++++++++++ src/theme/breakpoint/types.ts | 45 +++++++++++ src/theme/index.ts | 8 ++ src/theme/mediaquery/mediaquery-helper.ts | 42 +++++++++++ src/theme/types.ts | 6 ++ tests/theme/theme-animation.spec.tsx | 2 + tests/theme/theme-border.spec.tsx | 3 + tests/theme/theme-breakpoint.spec.tsx | 54 ++++++++++++++ tests/theme/theme-colour.spec.tsx | 3 + tests/theme/theme-font.spec.tsx | 3 + tests/theme/theme-media.spec.tsx | 59 +++++++++++++++ tests/theme/theme-radius.spec.tsx | 3 + tests/theme/theme-spacing.spec.tsx | 3 + 14 files changed, 346 insertions(+) create mode 100644 src/theme/breakpoint/specs/lifesg-breakpoint-set.ts create mode 100644 src/theme/breakpoint/theme-helper.ts create mode 100644 src/theme/breakpoint/types.ts create mode 100644 src/theme/mediaquery/mediaquery-helper.ts create mode 100644 tests/theme/theme-breakpoint.spec.tsx create mode 100644 tests/theme/theme-media.spec.tsx diff --git a/src/theme/breakpoint/specs/lifesg-breakpoint-set.ts b/src/theme/breakpoint/specs/lifesg-breakpoint-set.ts new file mode 100644 index 000000000..b4c244765 --- /dev/null +++ b/src/theme/breakpoint/specs/lifesg-breakpoint-set.ts @@ -0,0 +1,41 @@ +import { MediaWidth } from "../types"; + +export const LifeSgMediaWidths: MediaWidth = { + "xxs-min": 0, + "xxs-max": 320, + "xs-min": 321, + "xs-max": 375, + "sm-min": 376, + "sm-max": 420, + "md-min": 421, + "md-max": 767, + "lg-min": 768, + "lg-max": 1023, + "xl-min": 1024, + "xl-max": 1440, + "xxl-min": 1441, + + "xxs-column": 8, + "xs-column": 8, + "sm-column": 8, + "md-column": 8, + "lg-column": 12, + "xl-column": 12, + "xxl-column": 12, + + "xxs-gutter": 16, + "xs-gutter": 16, + "sm-gutter": 16, + "md-gutter": 16, + "lg-gutter": 32, + "xl-gutter": 32, + "xxl-gutter": 32, + + "xxs-margin": 24, + "xs-margin": 24, + "sm-margin": 24, + "md-margin": 24, + "lg-margin": 48, + "xl-margin": 48, + "xxl-margin": 48, +}; diff --git a/src/theme/breakpoint/theme-helper.ts b/src/theme/breakpoint/theme-helper.ts new file mode 100644 index 000000000..67a12f87d --- /dev/null +++ b/src/theme/breakpoint/theme-helper.ts @@ -0,0 +1,74 @@ +import { StyledComponentProps, getCollection, getValue } from "../helpers"; +import { BreakpointScheme, ThemeCollectionSpec } from "../types"; +import { LifeSgMediaWidths } from "./specs/lifesg-breakpoint-set"; +import { BreakPointCollectionsMap, MediaWidth } from "./types"; + +const BreakpointSpec: ThemeCollectionSpec< + BreakPointCollectionsMap, + BreakpointScheme +> = { + collections: { + lifesg: LifeSgMediaWidths, + }, + defaultValue: "lifesg", +}; + +export const getBreakpoint = (key: keyof MediaWidth) => { + return (props: StyledComponentProps): number => { + const theme = props.theme; + const breakpointSet: MediaWidth = getCollection( + BreakpointSpec, + theme?.breakpointScheme + ); + + let value: number | undefined; + + if (theme?.overrides?.breakpoint) { + value = getValue(breakpointSet, key, theme.overrides.breakpoint); + } else { + value = breakpointSet[key]; + } + + return value; + }; +}; + +export const BreakpointValues = { + "xxs-min": getBreakpoint("xxs-min"), + "xxs-max": getBreakpoint("xxs-max"), + "xs-min": getBreakpoint("xs-min"), + "xs-max": getBreakpoint("xs-max"), + "sm-min": getBreakpoint("sm-min"), + "sm-max": getBreakpoint("sm-max"), + "md-min": getBreakpoint("md-min"), + "md-max": getBreakpoint("md-max"), + "lg-min": getBreakpoint("lg-min"), + "lg-max": getBreakpoint("lg-max"), + "xl-min": getBreakpoint("xl-min"), + "xl-max": getBreakpoint("xl-max"), + "xxl-min": getBreakpoint("xxl-min"), + + "xxs-column": getBreakpoint("xxs-column"), + "xs-column": getBreakpoint("xs-column"), + "sm-column": getBreakpoint("sm-column"), + "md-column": getBreakpoint("md-column"), + "lg-column": getBreakpoint("lg-column"), + "xl-column": getBreakpoint("xl-column"), + "xxl-column": getBreakpoint("xxl-column"), + + "xxs-gutter": getBreakpoint("xxs-gutter"), + "xs-gutter": getBreakpoint("xs-gutter"), + "sm-gutter": getBreakpoint("sm-gutter"), + "md-gutter": getBreakpoint("md-gutter"), + "lg-gutter": getBreakpoint("lg-gutter"), + "xl-gutter": getBreakpoint("xl-gutter"), + "xxl-gutter": getBreakpoint("xxl-gutter"), + + "xxs-margin": getBreakpoint("xxs-margin"), + "xs-margin": getBreakpoint("xs-margin"), + "sm-margin": getBreakpoint("sm-margin"), + "md-margin": getBreakpoint("md-margin"), + "lg-margin": getBreakpoint("lg-margin"), + "xl-margin": getBreakpoint("xl-margin"), + "xxl-margin": getBreakpoint("xxl-margin"), +}; diff --git a/src/theme/breakpoint/types.ts b/src/theme/breakpoint/types.ts new file mode 100644 index 000000000..a784e6dda --- /dev/null +++ b/src/theme/breakpoint/types.ts @@ -0,0 +1,45 @@ +import { StyledComponentProps } from "../helpers"; +import { BreakpointScheme } from "../types"; + +export interface MediaWidth { + "xxs-min": number; + "xxs-max": number; + "xs-min": number; + "xs-max": number; + "sm-min": number; + "sm-max": number; + "md-min": number; + "md-max": number; + "lg-min": number; + "lg-max": number; + "xl-min": number; + "xl-max": number; + "xxl-min": number; + "xxs-column": number; + "xs-column": number; + "sm-column": number; + "md-column": number; + "lg-column": number; + "xl-column": number; + "xxl-column": number; + "xxs-gutter": number; + "xs-gutter": number; + "sm-gutter": number; + "md-gutter": number; + "lg-gutter": number; + "xl-gutter": number; + "xxl-gutter": number; + "xxs-margin": number; + "xs-margin": number; + "sm-margin": number; + "md-margin": number; + "lg-margin": number; + "xl-margin": number; + "xxl-margin": number; +} + +export type BreakPointCollectionsMap = { + [key in BreakpointScheme]: MediaWidth; +}; + +export type BreakPointSetOptions = Partial; diff --git a/src/theme/index.ts b/src/theme/index.ts index 6e4c1b4d8..18f232dab 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,3 +1,4 @@ +import { BreakpointValues } from "./breakpoint/theme-helper"; import { AnimationValues } from "./animation/theme-helper"; import { BorderValues } from "./border/theme-helper"; import { PrimitiveColour } from "./colour-primitive/theme-helper"; @@ -25,6 +26,8 @@ export const Spacing = SpacingValues; export const Radius = RadiusValues; +export const Breakpoint = BreakpointValues; + export const LifeSGTheme: ThemeSpec = { colourScheme: "lifesg", fontScheme: "lifesg", @@ -32,6 +35,7 @@ export const LifeSGTheme: ThemeSpec = { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; export const BookingSGTheme: ThemeSpec = { @@ -41,6 +45,7 @@ export const BookingSGTheme: ThemeSpec = { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; export const CcubeTheme: ThemeSpec = { @@ -50,6 +55,7 @@ export const CcubeTheme: ThemeSpec = { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; export const MyLegacyTheme: ThemeSpec = { @@ -59,6 +65,7 @@ export const MyLegacyTheme: ThemeSpec = { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; export const RBSTheme: ThemeSpec = { @@ -68,4 +75,5 @@ export const RBSTheme: ThemeSpec = { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; diff --git a/src/theme/mediaquery/mediaquery-helper.ts b/src/theme/mediaquery/mediaquery-helper.ts new file mode 100644 index 000000000..13cb190d9 --- /dev/null +++ b/src/theme/mediaquery/mediaquery-helper.ts @@ -0,0 +1,42 @@ +import { BreakpointValues } from "../breakpoint/theme-helper"; +import { StyledComponentProps } from "../helpers"; + +// Two separate types for max and min breakpoints +type MaxWidthBreakpoints = "xxs" | "xs" | "sm" | "md" | "lg" | "xl"; +type MinWidthBreakpoints = MaxWidthBreakpoints | "xxl"; + +const createMediaQueryFunction = ( + type: "max-width" | "min-width", + key: T +) => { + const mappedKey = type === "max-width" ? `${key}-max` : `${key}-min`; + const breakpointFunction = + BreakpointValues[mappedKey as keyof typeof BreakpointValues]; + + return (props: StyledComponentProps) => { + const value = breakpointFunction(props); + return `@media screen and (${type}: ${value}px)`; + }; +}; + +const getMediaQuerySpec = ( + type: "max-width" | "min-width" +): Record string> => { + // Conditional breakpoints for max and min widths + const breakpoints = ( + type === "max-width" + ? ["xxs", "xs", "sm", "md", "lg", "xl"] + : ["xxs", "xs", "sm", "md", "lg", "xl", "xxl"] + ) as T[]; + + return breakpoints.reduce((accumulator, key) => { + accumulator[key] = createMediaQueryFunction(type, key); + return accumulator; + }, {} as Record string>); +}; + +// Export with typing +export const MediaQuery = { + MaxWidth: getMediaQuerySpec("max-width"), + MinWidth: getMediaQuerySpec("min-width"), +}; diff --git a/src/theme/types.ts b/src/theme/types.ts index e7c14d9dc..b56024d44 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -6,6 +6,7 @@ import { AnimationSetOptions } from "./animation/types"; import { BorderSetOptions } from "./border/types"; import { SpacingSetOptions } from "./spacing/types"; import { RadiusSetOptions } from "./radius/types"; +import { BreakPointSetOptions } from "./breakpoint/types"; export type { PrimitiveColourSet, @@ -46,6 +47,7 @@ export type AnimationScheme = "lifesg"; export type BorderScheme = "lifesg"; export type SpacingScheme = "lifesg"; export type RadiusScheme = "lifesg"; +export type BreakpointScheme = "lifesg"; export interface ThemeSpecOptions { primitiveColour?: PrimitiveColourSetOptions | undefined; @@ -55,6 +57,7 @@ export interface ThemeSpecOptions { spacing?: SpacingSetOptions | undefined; border?: BorderSetOptions | undefined; radius?: RadiusSetOptions | undefined; + breakpoint?: BreakPointSetOptions | undefined; typography?: TypographySetOptions | undefined; } @@ -65,7 +68,10 @@ export interface ThemeSpec { borderScheme: BorderScheme; spacingScheme: SpacingScheme; radiusScheme: RadiusScheme; + breakpointScheme: BreakpointScheme; overrides?: ThemeSpecOptions | undefined; + + maxColumns?: any; } export interface ThemeCollectionSpec { diff --git a/tests/theme/theme-animation.spec.tsx b/tests/theme/theme-animation.spec.tsx index 2c9d38663..cdd2ee6d6 100644 --- a/tests/theme/theme-animation.spec.tsx +++ b/tests/theme/theme-animation.spec.tsx @@ -18,6 +18,7 @@ describe("StyledAnimationTest", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; const duration = "500ms"; @@ -43,6 +44,7 @@ describe("StyledAnimationTest", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", overrides: { animation: { "duration-500": "700ms", diff --git a/tests/theme/theme-border.spec.tsx b/tests/theme/theme-border.spec.tsx index 613d6251c..febfe6e2b 100644 --- a/tests/theme/theme-border.spec.tsx +++ b/tests/theme/theme-border.spec.tsx @@ -18,6 +18,7 @@ describe("Border Theming Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; // Constants for border-top (dashed-default) @@ -68,6 +69,7 @@ describe("Border Theming Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; const dashThickness = "2px"; @@ -110,6 +112,7 @@ describe("Border Theming Test", () => { animationScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", overrides: { border: { "width-010": 3, diff --git a/tests/theme/theme-breakpoint.spec.tsx b/tests/theme/theme-breakpoint.spec.tsx new file mode 100644 index 000000000..3a4542cc4 --- /dev/null +++ b/tests/theme/theme-breakpoint.spec.tsx @@ -0,0 +1,54 @@ +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import styled, { ThemeProvider } from "styled-components"; +import { Breakpoint } from "../../src"; +import { ThemeSpec } from "../../src/theme/types"; + +const StyledComponentTest = styled.div` + background-color: red; + + @media (min-width: ${Breakpoint["xs-min"]}px) { + background-color: blue; + } + + @media (min-width: ${Breakpoint["xs-max"]}px) { + background-color: green; + } +`; + +describe("Media Width Breakpoints Test", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", + }; + it("should apply correct styles based on media width", () => { + const { container } = render( + + + + ); + + expect(container.firstChild).toHaveStyleRule("background-color", "red"); + + expect(container.firstChild).toHaveStyleRule( + "background-color", + "blue", + { + media: `(min-width: 321px)`, + } + ); + + expect(container.firstChild).toHaveStyleRule( + "background-color", + "green", + { + media: `(min-width: 375px)`, + } + ); + }); +}); diff --git a/tests/theme/theme-colour.spec.tsx b/tests/theme/theme-colour.spec.tsx index f6df87457..1beca5d2c 100644 --- a/tests/theme/theme-colour.spec.tsx +++ b/tests/theme/theme-colour.spec.tsx @@ -18,6 +18,7 @@ describe("Colour Themeing Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; const bgColor = "#1A122C"; @@ -44,6 +45,7 @@ describe("Colour Themeing Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", overrides: { primitiveColour: { "primary-10": "#fefefe", @@ -75,6 +77,7 @@ describe("Colour Themeing Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", overrides: { semanticColour: { "border-primary": "#fefefe", diff --git a/tests/theme/theme-font.spec.tsx b/tests/theme/theme-font.spec.tsx index f47b252bd..15bc08cef 100644 --- a/tests/theme/theme-font.spec.tsx +++ b/tests/theme/theme-font.spec.tsx @@ -22,6 +22,7 @@ describe("StyledTypographyTest", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; const fontSize = "3rem"; @@ -52,6 +53,7 @@ describe("StyledTypographyTest", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", overrides: { typography: { "header-xxl-bold": { @@ -92,6 +94,7 @@ describe("StyledTypographyTest", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; const fontSize = "1.125rem"; diff --git a/tests/theme/theme-media.spec.tsx b/tests/theme/theme-media.spec.tsx new file mode 100644 index 000000000..be054c60a --- /dev/null +++ b/tests/theme/theme-media.spec.tsx @@ -0,0 +1,59 @@ +import styled, { ThemeProvider } from "styled-components"; +import { Breakpoint } from "../../src"; +import { MediaQuery } from "../../src/theme/mediaquery/mediaquery-helper"; +import { ThemeSpec } from "../../src/theme/types"; +import { render } from "@testing-library/react"; +import "jest-styled-components"; + +const StyledComponentTest = styled.div` + background-color: red; + + ${MediaQuery.MinWidth.xs} { + background-color: yellow; + } + + ${MediaQuery.MaxWidth.xs} { + background-color: purple; + } +`; +describe("MediaQuery Helper Function Test", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", + }; + + const xsMin = "321px"; + const xsMax = "375px"; + const mdMin = "421px"; + const lgMin = "768px"; + + it("should apply correct styles based on media query spec", () => { + const { container } = render( + + + + ); + expect(container.firstChild).toHaveStyleRule("background-color", "red"); + + expect(container.firstChild).toHaveStyleRule( + "background-color", + "yellow", + { + media: `screen and (min-width: ${xsMin})`, + } + ); + + expect(container.firstChild).toHaveStyleRule( + "background-color", + "purple", + { + media: `screen and (max-width: ${xsMax})`, + } + ); + }); +}); diff --git a/tests/theme/theme-radius.spec.tsx b/tests/theme/theme-radius.spec.tsx index 5fe570838..1afce50bc 100644 --- a/tests/theme/theme-radius.spec.tsx +++ b/tests/theme/theme-radius.spec.tsx @@ -17,6 +17,7 @@ describe("Radius Theming Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; const radiusValue = "4px"; @@ -41,6 +42,7 @@ describe("Radius Theming Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", overrides: { radius: { sm: "6px", @@ -75,6 +77,7 @@ describe("Radius Theming Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", overrides: { radius: { sm: "6px", diff --git a/tests/theme/theme-spacing.spec.tsx b/tests/theme/theme-spacing.spec.tsx index c53d2efc7..f393abfca 100644 --- a/tests/theme/theme-spacing.spec.tsx +++ b/tests/theme/theme-spacing.spec.tsx @@ -18,6 +18,7 @@ describe("Spacing Themeing Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", }; const marginValue = "1rem"; @@ -41,6 +42,7 @@ describe("Spacing Themeing Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", overrides: { spacing: { "spacing-16": "2rem", @@ -69,6 +71,7 @@ describe("Spacing Themeing Test", () => { borderScheme: "lifesg", spacingScheme: "lifesg", radiusScheme: "lifesg", + breakpointScheme: "lifesg", overrides: { spacing: { "spacing-16": "3rem", From 07354f1495d866177f10364334866a183c9a41f6 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 12 Sep 2024 15:48:31 +0800 Subject: [PATCH 0423/1949] [DROPDOWN-LIST][JH] add topScrollItem prop for auto scroll positioning, allow enter for selecting option --- src/shared/dropdown-list-v2/dropdown-list.tsx | 17 +++++++++++++++++ src/shared/dropdown-list-v2/types.ts | 2 ++ 2 files changed, 19 insertions(+) diff --git a/src/shared/dropdown-list-v2/dropdown-list.tsx b/src/shared/dropdown-list-v2/dropdown-list.tsx index fe521e26b..4eb14256f 100644 --- a/src/shared/dropdown-list-v2/dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/dropdown-list.tsx @@ -44,6 +44,7 @@ export const DropdownList = ({ variant = "default", listboxId, width, + topScrollItem, onSelectItem, onSelectAll, onDismiss, @@ -151,6 +152,7 @@ export const DropdownList = ({ } break; case "Space": + case "Enter": if ( document.activeElement === listItemRefs.current[focusedIndex] @@ -203,6 +205,21 @@ export const DropdownList = ({ // ========================================================================= useEventListener("keydown", handleKeyboardPress); + useEffect(() => { + if (topScrollItem === undefined) return; + + // Delay to ensure render is complete + setTimeout(() => { + const index = listItems.indexOf(topScrollItem); + const focusedItem = listItemRefs.current[index]; + // Align the item to top of scrollable container + if (nodeRef.current) { + nodeRef.current.scrollTop = focusedItem?.offsetTop; + } + setFocusedIndex(index); + }, 0); + }, [listItemRefs, listItems, setFocusedIndex, topScrollItem]); + useEffect(() => { if (mounted) { // only run on mount diff --git a/src/shared/dropdown-list-v2/types.ts b/src/shared/dropdown-list-v2/types.ts index ed3c2ef90..38b85b2d7 100644 --- a/src/shared/dropdown-list-v2/types.ts +++ b/src/shared/dropdown-list-v2/types.ts @@ -65,6 +65,8 @@ export interface DropdownListProps labelDisplayType?: LabelDisplayType | undefined; /** Specifies the variant type. Small type will have shorter height. Values: "default" | "small" */ variant?: DropdownVariantType | undefined; + /** Specifies the item for which the dropdown’s scroll position will be automatically adjusted */ + topScrollItem?: T | undefined; onSelectItem?: ((item: T, extractedValue: V) => void) | undefined; onSelectAll?: (() => void) | undefined; From f3e9b68197dbc6fd79a702909b77ce80b3193598 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 12 Sep 2024 15:52:31 +0800 Subject: [PATCH 0424/1949] [BOOKINGSG-6120][JH] add timeRangePickerAlt component --- src/form/form-time-range-picker.tsx | 32 +- src/time-range-picker/index.ts | 1 + .../time-range-picker-alt.tsx | 349 ++++++++++++++++++ .../time-range-picker.styles.tsx | 21 +- src/time-range-picker/types.ts | 22 ++ src/util/time-helper.ts | 141 +++++++ 6 files changed, 547 insertions(+), 19 deletions(-) create mode 100644 src/time-range-picker/time-range-picker-alt.tsx diff --git a/src/form/form-time-range-picker.tsx b/src/form/form-time-range-picker.tsx index 050e99ade..6ec5d1522 100644 --- a/src/form/form-time-range-picker.tsx +++ b/src/form/form-time-range-picker.tsx @@ -1,4 +1,4 @@ -import { TimeRangePicker } from "../time-range-picker"; +import { TimeRangePicker, TimeRangePickerAlt } from "../time-range-picker"; import { FormWrapper } from "./form-wrapper"; import { FormTimeRangePickerProps } from "./types"; @@ -8,12 +8,35 @@ export const FormTimeRangePicker = ({ id = "form-timepicker", "data-error-testid": errorTestId, "data-testid": testId, + variant, layoutType, mobileCols, tabletCols, desktopCols, ...otherProps }: FormTimeRangePickerProps): JSX.Element => { + const renderTimeRangePicker = () => { + if (variant === "alt") { + return ( + + ); + } else { + return ( + + ); + } + }; + return ( - + {renderTimeRangePicker()} ); }; diff --git a/src/time-range-picker/index.ts b/src/time-range-picker/index.ts index 7dbecdc74..4236ece86 100644 --- a/src/time-range-picker/index.ts +++ b/src/time-range-picker/index.ts @@ -1,2 +1,3 @@ export * from "./time-range-picker"; +export * from "./time-range-picker-alt"; export * from "./types"; diff --git a/src/time-range-picker/time-range-picker-alt.tsx b/src/time-range-picker/time-range-picker-alt.tsx new file mode 100644 index 000000000..f7e176f4d --- /dev/null +++ b/src/time-range-picker/time-range-picker-alt.tsx @@ -0,0 +1,349 @@ +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { ClearIcon } from "../input/input.style"; +import { + ClearIconContainer, + SelectorInput, + TimeContainer, + Wrapper, +} from "./time-range-picker.styles"; +import { DropdownList } from "../shared/dropdown-list-v2/dropdown-list"; +import { DropdownListState } from "../shared/dropdown-list-v2"; +import { ElementWithDropdown } from "../shared/dropdown-wrapper"; +import { ErrorMessage } from "../form/form-label.style"; +import { RangeInputInnerContainer } from "../shared/range-input-inner-container"; +import { TimeHelper } from "../util/time-helper"; +import { + TimeRangePickerProps, + TimeRangePickerValue, +} from "../time-range-picker/types"; + +type TimeRangeInputType = "start" | "end"; + +export const TimeRangePickerAlt = ({ + id, + disabled = false, + error, + value, + format = "12hr", + readOnly, + onChange, + onFocus, + onBlur, + alignment = "left", + dropdownZIndex, + startLimit, + endLimit, + interval = 15, + ...otherProps +}: TimeRangePickerProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const [activeTimeSelector, setActiveTimeSelector] = + useState(null); + const [startTimeVal, setStartTimeVal] = useState(""); + const [endTimeVal, setEndTimeVal] = useState(""); + const [initialStartTimeVal, setInitialStartTimeVal] = useState(""); + const [initialEndTimeVal, setInitialEndTimeVal] = useState(""); + const [validationError, setValidationError] = useState(""); + + const nodeRef = useRef(); + const startInputRef = useRef(); + const endInputRef = useRef(); + + const startOptions = useMemo( + () => + TimeHelper.generateTimings(interval, format, startLimit, endLimit), + [interval, format, startLimit, endLimit] + ); + const endOptions = useMemo( + () => + TimeHelper.generateTimings( + interval, + format, + initialStartTimeVal || startLimit, + endLimit + ), + [initialStartTimeVal, interval, format, startLimit, endLimit] + ); + + // ========================================================================= + // EFFECTS + // ========================================================================= + const parseInput = useCallback( + (input: string): string | undefined => { + return TimeHelper.parseInput(input, format); + }, + [format] + ); + + useEffect(() => { + if (value) { + const start = parseInput(value.start); + const end = parseInput(value.end); + + setStartTimeVal(start); + setEndTimeVal(end); + setInitialStartTimeVal(start); + setInitialEndTimeVal(end); + } + }, [value, parseInput]); + + // Validation + useEffect(() => { + const start = parseInput(startTimeVal); + const end = parseInput(endTimeVal); + + if (start === undefined) { + setValidationError("Invalid start time"); + } else if (end === undefined) { + setValidationError("Invalid end time"); + } else if ( + start !== "" && + end !== "" && + TimeHelper.to24Hour(end) < TimeHelper.to24Hour(start) + ) { + setValidationError("End time must be after start time"); + } else { + setValidationError(""); + } + }, [startTimeVal, endTimeVal, parseInput]); + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + const handleInputFocus = (selector: TimeRangeInputType) => { + if (!disabled && !readOnly && !activeTimeSelector) { + setActiveTimeSelector(selector); + onFocus && onFocus(); + } + }; + + const handleInputClick = (selector: TimeRangeInputType) => { + if (!disabled && !readOnly) { + setActiveTimeSelector(selector); + (selector === "start" + ? startInputRef + : endInputRef + ).current.select(); + } + }; + + function handleKeyDownEvent(event: React.KeyboardEvent) { + switch (event.code) { + case "Enter": + if (activeTimeSelector === "start") { + handleStartTime(parseInput(startTimeVal)); + } else if (activeTimeSelector === "end") { + handleEndTime(parseInput(endTimeVal)); + endInputRef.current.blur(); + } + break; + default: + break; + } + } + + const handleStartTime = (input: string, goToNextInput = true) => { + const value = input == undefined ? initialStartTimeVal : input; + + setStartTimeVal(value); + + // If start time is after end time, clear end time + const isInvalidRange = value > endTimeVal; + if (isInvalidRange && goToNextInput) setEndTimeVal(""); + + const timeValue: TimeRangePickerValue = { + start: value, + end: isInvalidRange ? "" : endTimeVal, + }; + + if (value !== initialStartTimeVal) onChange && onChange(timeValue); + + if (goToNextInput) { + setActiveTimeSelector("end"); + endInputRef.current.select(); + } else { + setActiveTimeSelector(null); + onBlur && onBlur(); + } + + setInitialStartTimeVal(value); + }; + + const handleEndTime = (input: string) => { + const value = input == undefined ? initialEndTimeVal : input; + + setEndTimeVal(value); + + const timeValue: TimeRangePickerValue = { + start: startTimeVal, + end: value, + }; + + if (value !== initialEndTimeVal) onChange && onChange(timeValue); + + setActiveTimeSelector(null); + onBlur && onBlur(); + + setInitialEndTimeVal(value); + }; + + const handleClear = (event: React.MouseEvent) => { + event.stopPropagation(); + setStartTimeVal(""); + setEndTimeVal(""); + setInitialStartTimeVal(""); + setInitialEndTimeVal(""); + + const timeValue: TimeRangePickerValue = { + start: "", + end: "", + }; + + onChange && onChange(timeValue); + setActiveTimeSelector(null); + }; + + const handleOnBlur = () => { + if (activeTimeSelector === "start") { + handleStartTime(parseInput(startTimeVal), false); + } else if (activeTimeSelector === "end") { + handleEndTime(parseInput(endTimeVal)); + } + }; + + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= + const renderClearButton = () => { + if ( + !readOnly && + !disabled && + (startTimeVal?.length > 0 || endTimeVal?.length > 0) + ) { + return ( + + + + ); + } + }; + + const renderDropdown = () => { + if (activeTimeSelector === "start") { + return ( + + ); + } else if (activeTimeSelector === "end") { + return ( + + ); + } + }; + + const renderElement = () => ( + + + {/* From */} + handleInputFocus("start")} + placeholder={ + activeTimeSelector === "start" ? "hh:mm" : "From" + } + onChange={(e) => setStartTimeVal(e.target.value)} + value={startTimeVal} + disabled={disabled} + readOnly={readOnly} + data-testid={ + otherProps["data-testid"] + ? `${otherProps["data-testid"]}-timepicker-selector` + : "timepicker-selector" + } + onClick={() => handleInputClick("start")} + onKeyDown={handleKeyDownEvent} + autoComplete="off" + /> + {/* To */} + handleInputFocus("end")} + placeholder={activeTimeSelector === "end" ? "hh:mm" : "To"} + onChange={(e) => setEndTimeVal(e.target.value)} + value={endTimeVal} + disabled={disabled} + readOnly={readOnly} + data-testid={ + otherProps["data-testid"] + ? `${otherProps["data-testid"]}-timepicker-selector` + : "timepicker-selector" + } + onClick={() => handleInputClick("end")} + onKeyDown={handleKeyDownEvent} + autoComplete="off" + /> + + {renderClearButton()} + + ); + + const renderError = () => + // Only display internal error message if user does not provide one + !error && + validationError && ( + + {validationError} + + ); + + return ( + + + + + {renderError()} + + ); +}; diff --git a/src/time-range-picker/time-range-picker.styles.tsx b/src/time-range-picker/time-range-picker.styles.tsx index af9a3ecc6..27db0f583 100644 --- a/src/time-range-picker/time-range-picker.styles.tsx +++ b/src/time-range-picker/time-range-picker.styles.tsx @@ -1,19 +1,9 @@ -import { ArrowRightIcon } from "@lifesg/react-icons/arrow-right"; -import styled, { css } from "styled-components"; -import { Color } from "../color"; +import styled from "styled-components"; import { BasicInput, InputWrapper, } from "../shared/input-wrapper/input-wrapper"; - -// ============================================================================= -// STYLE INTERFACE -// ============================================================================= - -interface IndicatorStyleProps { - $position: "start" | "end" | "none"; - $error: boolean; -} +import { ClearContainer } from "../input/input.style"; // ============================================================================= // STYLING @@ -32,3 +22,10 @@ export const SelectorInput = styled(BasicInput)` width: 100%; flex: 1; `; + +export const ClearIconContainer = styled(ClearContainer)` + position: absolute; + right: 0; + padding-left: 0.5rem; + margin-right: 0; +`; diff --git a/src/time-range-picker/types.ts b/src/time-range-picker/types.ts index 23ba6ae73..ffa474114 100644 --- a/src/time-range-picker/types.ts +++ b/src/time-range-picker/types.ts @@ -1,3 +1,5 @@ +import { DropdownAlignmentType } from "../shared/dropdown-wrapper"; + export type TimeRangePickerFormat = "12hr" | "24hr"; export interface TimeRangePickerValue { @@ -20,6 +22,8 @@ export interface TimeRangePickerProps { * 24 hour uses "hh:mm" e.g. `{ start: "13:00", end: "14:00" }` * * 12 hour uses "hh:mmA" e.g. `{ start: "01:00PM", end: "02:00PM" }` + * + * Note: alt variant uses "h:mma" instead. */ value?: TimeRangePickerValue | undefined; /** @@ -29,6 +33,22 @@ export interface TimeRangePickerProps { disabled?: boolean | undefined; readOnly?: boolean | undefined; error?: boolean | undefined; + + /** + * Alt variant-specific attributes + */ + variant?: "alt" | undefined; + /** Specifies the interval (minutes) between each dropdown option */ + interval?: number | undefined; + /** Specifies the starting time for the dropdown options */ + startLimit?: string | undefined; + /** Specifies the ending time for the dropdown options */ + endLimit?: string | undefined; + /** Specifies the alignment of the dropdown to the left or right of the reference element */ + alignment?: DropdownAlignmentType | undefined; + /** Specifies the z-index of the dropdown element */ + dropdownZIndex?: number | undefined; + /** * Called when a selection is made. Returns an object with `start` and * `end` values as an empty string or a string based format. @@ -47,3 +67,5 @@ export interface TimeRangePickerProps { */ onBlur?: (() => void) | undefined; } + +export interface TimeRangePickerAltProps extends TimeRangePickerProps {} diff --git a/src/util/time-helper.ts b/src/util/time-helper.ts index 822089068..2cfd3a1fd 100644 --- a/src/util/time-helper.ts +++ b/src/util/time-helper.ts @@ -193,6 +193,147 @@ export namespace TimeHelper { seconds, }; }; + + // Converts h:mma/hh:mma to 24hr (eg. 13:00) + export const to24Hour = (time: string) => { + if (time.includes("am") || time.includes("pm")) { + const [t, p] = time.split(/(am|pm)/i); + const [hr, m] = t.split(":").map(Number); + let h = hr; + if (p === "pm" && h < 12) h += 12; + if (p === "am" && h === 12) h = 0; + return `${h.toString().padStart(2, "0")}:${m + .toString() + .padStart(2, "0")}`; + } + return time; // No conversion if string alr has am/pm + }; + + // Generates an array of timings based on given startTime/interval/format + export const generateTimings = ( + interval: number, // In minutes + format: TimeFormat = "12hr", + startTime?: string | undefined, + endTime?: string | undefined // Inclusive + ): string[] => { + const timings = []; + let currentMinutes = 0; + let endMinutes = 1440 - interval; // Do not include next day's 12am + + const convertToMinutes = (time: string) => { + const [startHourMin, ampm] = time.toLowerCase().split(/(am|pm)/); + const [startHoursRaw, startMinutes] = startHourMin + .split(":") + .map(Number); + let startHours = startHoursRaw; + + if (ampm === "pm" && startHours !== 12) { + startHours += 12; // Convert PM hours to 24-hour format + } + if (ampm === "am" && startHours === 12) { + startHours = 0; // Convert 12am to 0 hours + } + + return startHours * 60 + startMinutes; + }; + + // Convert startTime (h:mma) to minutes + if (startTime) { + currentMinutes = convertToMinutes(startTime); + } + if (endTime) { + endMinutes = convertToMinutes(endTime); + } + + while (currentMinutes <= endMinutes) { + let hours = Math.floor(currentMinutes / 60); + const minutes = currentMinutes % 60; + + if (format === "12hr") { + const ampm = hours >= 12 ? "pm" : "am"; + + hours = hours % 12; + hours = hours ? hours : 12; // Convert hour 0 to 12 + + const timeString = `${hours}:${minutes + .toString() + .padStart(2, "0")}${ampm}`; + timings.push(timeString); + } else { + const timeString = `${hours + .toString() + .padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`; + timings.push(timeString); + } + + currentMinutes += interval; + } + + return timings; + }; + + // Return undefined = invalid field, "" = empty field, else returns h:mma + export const parseInput = ( + input: string, + format: TimeFormat = "12hr" + ): string | undefined => { + if (input === "") return input; + + const sanitizedInput = input.trim().toLowerCase(); + const timeRegex = /^(?:(\d{1,2})([:.])?(\d{2})?)?(a|p|am|pm)?$/; + const match = timeRegex.exec(sanitizedInput); + + if (!match) return; + + let hours = parseInt(match[1] || "0", 10); + const minutes = parseInt(match[3] || "0", 10); + let period = match[4]; + + // Ensure hours/mins are valid + if (hours > 24 || minutes > 59) return; + + // Convert single-character periods to full am/pm + if (period === "a") { + period = "am"; + } else if (period === "p") { + period = "pm"; + } + + if (format === "24hr") { + // Convert 12-hour input to 24-hour format if period is present + if (period === "pm" && hours < 12) { + hours += 12; + } else if ((period === "am" && hours === 12) || hours === 24) { + hours = 0; // Midnight case + } + + // Return time in 24-hour format (HH:mm) + return `${hours.toString().padStart(2, "0")}:${minutes + .toString() + .padStart(2, "0")}`; + } + + // Handle 24-hour times or AM/PM conversion + if (period) { + if (hours === 0 || hours === 24) { + period = "am"; + hours = 12; + } else if (hours > 12) { + period = "pm"; + hours -= 12; + } + } else { + period = hours < 12 || hours === 24 ? "am" : "pm"; + hours = hours % 12 || 12; + } + + // Format the time as h:mma + const formattedTime = `${hours}:${minutes + .toString() + .padStart(2, "0")}${period}`; + + return formattedTime; + }; } // ============================================================================= From db56d3a6a248a7c5e93f15fca758f71516e50fd4 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 12 Sep 2024 15:54:42 +0800 Subject: [PATCH 0425/1949] [BOOKINGSG-6120][JH] add timeRangePickerAlt stories & props --- .../form-time-range-picker.mdx | 12 +++++ .../form-time-range-picker.stories.tsx | 52 +++++++++++++++++++ .../form-time-range-picker/props-table.tsx | 44 ++++++++++++++++ 3 files changed, 108 insertions(+) diff --git a/stories/form/form-time-range-picker/form-time-range-picker.mdx b/stories/form/form-time-range-picker/form-time-range-picker.mdx index 80f8a09b3..58b992830 100644 --- a/stories/form/form-time-range-picker/form-time-range-picker.mdx +++ b/stories/form/form-time-range-picker/form-time-range-picker.mdx @@ -38,6 +38,18 @@ import { TimeRangePicker } from "@lifesg/react-design-system/TimeRangePicker"; +Alternate variant + +You can also use an `alt` variant that allows users to either select a time from a dropdown list of options, or manually type in a time which is automatically parsed and converted into a valid time format (h:mma for `12hr`, hh:mm for `24hr`). + +This alternate variant can also be used as a standalone: + +```tsx +import { TimeRangePickerAlt } from "@lifesg/react-design-system/TimeRangePicker"; +``` + + + Component API diff --git a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx index b2ccef561..b462bdb14 100644 --- a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx +++ b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx @@ -115,3 +115,55 @@ export const StandaloneUsage: StoryObj = { ); }, }; + +export const AltVariant: StoryObj = { + render: () => { + const emptyTime = { start: "", end: "" }; + const [time1, setTime1] = useState(emptyTime); + const [time2, setTime2] = useState(emptyTime); + const [time3, setTime3] = useState(emptyTime); + const [time4, setTime4] = useState(emptyTime); + const [time5, setTime5] = useState({ start: "2:00pm", end: "1:00pm" }); + + return ( + + + setTime1(value)} + variant="alt" + /> + setTime2(value)} + variant="alt" + interval={60} + /> + setTime3(value)} + variant="alt" + format="24hr" + /> + setTime4(value)} + variant="alt" + startLimit="10:00am" + endLimit="2:00pm" + /> + setTime5(value)} + variant="alt" + /> + + + ); + }, +}; diff --git a/stories/form/form-time-range-picker/props-table.tsx b/stories/form/form-time-range-picker/props-table.tsx index 3677b033a..61d576ccf 100644 --- a/stories/form/form-time-range-picker/props-table.tsx +++ b/stories/form/form-time-range-picker/props-table.tsx @@ -8,6 +8,8 @@ const TIME_FORMAT = ( 24 hour uses {quote("hh:mm")} e.g. {code(quote("13:00"))}
    12 hour uses {quote("hh:mmA")} e.g. {code(quote("01:00PM"))} +
    + Note: alt variant uses {quote("h:mma")} instead ); @@ -86,6 +88,48 @@ const DATA: ApiTableSectionProps[] = [ }, ], }, + { + name: "TimeRangePickerAlt specific props", + attributes: [ + { + name: "variant", + description: + "Specifies the variant for the component, uses the default TimeRangePicker if undefined", + propTypes: [`"alt"`], + }, + { + name: "interval", + description: + "The interval (minutes) between each dropdown option", + propTypes: ["number"], + defaultValue: "15", + }, + { + name: "startLimit", + description: "The starting time for the dropdown options", + propTypes: ["string"], + }, + { + name: "endLimit", + description: "The ending time for the dropdown options", + propTypes: ["string"], + }, + { + name: "alignment", + description: + "Specifies if the dropdown is aligned to the left or right of the main field", + propTypes: [`"left"`, `"right"`], + defaultValue: `"left"`, + }, + { + name: "dropdownZIndex", + description: + "The custom z-index of the dropdown. Try specifying this if you encounter z-index conflicts.", + propTypes: ["number"], + defaultValue: "50", + }, + ], + }, { name: "TimeRangePickerValue", attributes: [ From a65b98cb28895a2c28b4b9dc84f3cf02264cf2a3 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Thu, 12 Sep 2024 16:32:01 +0800 Subject: [PATCH 0426/1949] [MISC][WL] extend the hiding date range input action buttons to mobile if withButton=false --- src/date-range-input/date-range-input.tsx | 10 +--------- .../form-date-range-input.stories.tsx | 6 +++--- stories/form/form-date-range-input/props-table.tsx | 2 -- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/date-range-input/date-range-input.tsx b/src/date-range-input/date-range-input.tsx index 2db91ad07..512ff86fa 100644 --- a/src/date-range-input/date-range-input.tsx +++ b/src/date-range-input/date-range-input.tsx @@ -1,7 +1,5 @@ import dayjs from "dayjs"; import { useEffect, useRef, useState } from "react"; -import { useMediaQuery } from "react-responsive"; -import { MediaWidths } from "../media"; import { DropdownRenderProps, ElementWithDropdown, @@ -63,7 +61,7 @@ export const DateRangeInput = ({ onFocus, onBlur, onYearMonthDisplayChange, - withButton: _withButton = true, + withButton = true, variant = "range", numberOfDays = 7, readOnly, @@ -188,17 +186,11 @@ export const DateRangeInput = ({ const calendarRef = useRef(); const startInputRef = useRef(); const endInputRef = useRef(); - const isMobile = useMediaQuery({ - maxWidth: MediaWidths.mobileL, - }); const shouldWrap = useContainerQuery({ maxWidth: MOBILE_WRAP_WIDTH, targetRef: nodeRef, }); - // show button if it is mobile view - const withButton = _withButton || isMobile; - // ============================================================================= // EFFECTS // ============================================================================= diff --git a/stories/form/form-date-range-input/form-date-range-input.stories.tsx b/stories/form/form-date-range-input/form-date-range-input.stories.tsx index c1107acd6..0b53220fa 100644 --- a/stories/form/form-date-range-input/form-date-range-input.stories.tsx +++ b/stories/form/form-date-range-input/form-date-range-input.stories.tsx @@ -38,7 +38,7 @@ export const Default: StoryObj = { hideInputKeyboard /> = { }} /> @@ -136,7 +136,7 @@ export const FixedRangeInput: StoryObj = { numberOfDays={14} /> diff --git a/stories/form/form-date-range-input/props-table.tsx b/stories/form/form-date-range-input/props-table.tsx index 1955aefbe..8fcc75c8d 100644 --- a/stories/form/form-date-range-input/props-table.tsx +++ b/stories/form/form-date-range-input/props-table.tsx @@ -152,8 +152,6 @@ const DATA: ApiTableSectionProps[] = [ <> Specifies if the {quote("Done")} and {quote("Cancel")} action buttons should be rendered -
    - Note: It appears by default in mobile viewports ), propTypes: ["boolean"], From cd5c94778438257ef48ea70cd0306dfaa367689d Mon Sep 17 00:00:00 2001 From: roll Date: Sun, 8 Sep 2024 20:54:56 +0800 Subject: [PATCH 0427/1949] [V3][RL] Add animation docs --- .../animation/a-animation-introduction.mdx | 64 +++++++ .../theme/animation/b-animation-lifesg.mdx | 18 ++ .../doc-elements/doc-animation-display.tsx | 180 ++++++++++++++++++ stories/theme/doc-elements/index.ts | 1 + 4 files changed, 263 insertions(+) create mode 100644 stories/theme/animation/a-animation-introduction.mdx create mode 100644 stories/theme/animation/b-animation-lifesg.mdx create mode 100644 stories/theme/doc-elements/doc-animation-display.tsx diff --git a/stories/theme/animation/a-animation-introduction.mdx b/stories/theme/animation/a-animation-introduction.mdx new file mode 100644 index 000000000..4917b3909 --- /dev/null +++ b/stories/theme/animation/a-animation-introduction.mdx @@ -0,0 +1,64 @@ +import { Meta } from "@storybook/blocks"; +import { DocInfo, DocNote } from "stories/storybook-common"; + + + +# Animation + +```tsx +import { Animation } from "@lifesg/react-design-system/theme"; +``` + +Animations help to signal a change in state. + +For positioning, movement, or property changes, use CSS animations or transitions. +The design system provides tokens to control **duration** and **speed**. + +For content that can be expanded or collapsed, use the `react-spring` +[library](https://www.npmjs.com/package/react-spring) to animate height or width. + +## Collections + +[LifeSG](/docs/foundations-motion-lifesg--docs) + +## Usage + +Apply the `Animation` tokens when defining a transition or animation. + +```tsx +import { Animation } from "@lifesg/react-design-system/theme"; +import styled, { css } from "styled-components"; + +const Container = styled.div` + color: lightgrey; + + &:hover { + color: darkgrey; + } + + transition: color ${Animation["duration-150"]} ${Animation["ease-default"]}; + animation: spinning ${Animation["duration-150"]} ${Animation["ease-default"]}; +`; +``` + +## Overriding + +The token values are based on CSS animation and transition properties, which are +documented here: + +- [duration](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-duration) +- [easing](https://developer.mozilla.org/en-US/docs/Web/CSS/easing-function) + +```tsx +import { LifeSGTheme } from "@lifesg/react-design-system/theme"; + +const customTheme: ThemeSpec = { + ...LifeSGTheme, + overrides: { + animation: { + "duration-150": "1s", // specify a custom time-based value + "ease-default": "steps(10, jump-both)", // specify a custom easing + }, + }, +}; +``` diff --git a/stories/theme/animation/b-animation-lifesg.mdx b/stories/theme/animation/b-animation-lifesg.mdx new file mode 100644 index 000000000..4ebe92baa --- /dev/null +++ b/stories/theme/animation/b-animation-lifesg.mdx @@ -0,0 +1,18 @@ +import { Meta } from "@storybook/blocks"; +import { LifeSGTheme } from "src/theme"; +import { AnimationDisplay } from "../doc-elements"; + + + +# LifeSG animation + +This is the animation set used when the `animationScheme` is `"lifesg"`. + +```tsx +const theme: ThemeSpec = { + animationScheme: "lifesg", + // ...other specifications +}; +``` + + diff --git a/stories/theme/doc-elements/doc-animation-display.tsx b/stories/theme/doc-elements/doc-animation-display.tsx new file mode 100644 index 000000000..6f8f04b46 --- /dev/null +++ b/stories/theme/doc-elements/doc-animation-display.tsx @@ -0,0 +1,180 @@ +import { AnimationSet, ThemeSpec } from "src/theme/types"; +import styled, { ThemeProvider, keyframes, useTheme } from "styled-components"; +import { getAnimation } from "../../../src/theme/animation/theme-helper"; + +interface AnimationDisplayProps { + theme: ThemeSpec; +} + +export const AnimationDisplay = ({ theme }: AnimationDisplayProps) => { + return ( + + + +
    Token
    +
    Value
    +
    Usage
    +
    + + For very small and short interactions. +
    + e.g. check boxes, toggles, radio buttons +
    + + For small interactions. +
    + e.g. buttons, fades +
    + + For small expansion or short distance movements. +
    + e.g. micro-interactions, icons +
    + + For elements that traverse a medium area of the screen. +
    + e.g. expansion, search bar, toast{" "} +
    + + For larger expansion that fills up a big part of the screen. +
    + e.g. important system notifications, cards +
    + + For large scale elements or transitions. +
    + e.g. background dimming{" "} +
    + + For “non-moving” elements. +
    + e.g. opacity, colour transition +
    + + For elements that are visible throughout the motion. +
    + e.g. dropdown, error motion, progress bar +
    + + When an element is introduced into view. +
    + e.g. modal, toast +
    + + When an element is removed from view. +
    + e.g. closing a modal +
    +
    +
    + ); +}; + +interface AnimationCollectionProps { + token: keyof AnimationSet; + children: React.ReactNode; +} + +const DurationCollection = ({ token, children }: AnimationCollectionProps) => { + const theme = useTheme(); + const value = getAnimation(token)({ theme }); + + return ( + +
    + {token} +
    +
    {value}
    +
    {children}
    +
    + ); +}; + +const TimingCollection = ({ token, children }: AnimationCollectionProps) => { + const theme = useTheme(); + const value = getAnimation(token)({ theme }); + + return ( + +
    + {token} +
    +
    {value}
    +
    +
    {children}
    + + + +
    +
    + ); +}; + +// ============================================================================= +// STYLE INTERFACE +// ============================================================================= +interface AnimationProps { + $timing: string; +} + +// ============================================================================= +// STYLING +// ============================================================================= +const Display = styled.div` + display: grid; + grid-template-columns: max-content max-content minmax(250px, 1fr); + flex-wrap: wrap; + + margin-bottom: 2.5rem; + + &:last-child { + margin-bottom: 1rem; + } + + overflow-x: auto; +`; + +const Row = styled.div` + display: grid; + grid-column: 1 / -1; + grid-template-columns: subgrid; + justify-items: flex-start; + align-items: flex-start; + gap: 0 3rem; + margin-bottom: 2rem; +`; + +const HeaderRow = styled(Row)` + margin-bottom: 1rem; + font-weight: bold; + padding-bottom: 0.5rem; + border-bottom: 1px solid #dde1e2; +`; + +const AnimationContainer = styled.div` + position: relative; + margin-top: 1rem; + height: 1rem; + max-width: 500px; +`; + +const slideAnimation = keyframes` + 0% { left: 0; } + 100% { left: calc(100% - 1rem); } +`; + +const AnimationCircle = styled.div` + position: absolute; + height: 1rem; + width: 1rem; + border-radius: 50%; + background: tomato; + top: 50%; + transform: translateY(-50%); + + animation-name: ${slideAnimation}; + animation-duration: 3s; + animation-iteration-count: infinite; + animation-timing-function: ${(props) => props.$timing}; + animation-direction: normal; +`; diff --git a/stories/theme/doc-elements/index.ts b/stories/theme/doc-elements/index.ts index 853d72f48..5808994ca 100644 --- a/stories/theme/doc-elements/index.ts +++ b/stories/theme/doc-elements/index.ts @@ -1,2 +1,3 @@ +export * from "./doc-animation-display"; export * from "./doc-primitive-colour-display"; export * from "./doc-semantic-colour-display"; From 40f31949deea7a02fdcc675706e013540bbe4870 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Fri, 13 Sep 2024 00:39:13 +0800 Subject: [PATCH 0428/1949] [BOOKINGSG-6120][JH] refactor file structure and variant name to card/dropdown --- src/form/form-time-range-picker.tsx | 32 +-- .../card-picker/card-picker.tsx | 208 +++++++++++++++++ ...ge-picker.styles.tsx => common.styles.tsx} | 8 - .../dropdown-picker.tsx} | 32 +-- src/time-range-picker/index.ts | 1 - src/time-range-picker/time-range-picker.tsx | 216 +----------------- src/time-range-picker/types.ts | 10 +- .../form-time-range-picker.mdx | 12 +- .../form-time-range-picker.stories.tsx | 14 +- .../form-time-range-picker/props-table.tsx | 11 +- 10 files changed, 256 insertions(+), 288 deletions(-) create mode 100644 src/time-range-picker/card-picker/card-picker.tsx rename src/time-range-picker/{time-range-picker.styles.tsx => common.styles.tsx} (73%) rename src/time-range-picker/{time-range-picker-alt.tsx => dropdown-picker/dropdown-picker.tsx} (93%) diff --git a/src/form/form-time-range-picker.tsx b/src/form/form-time-range-picker.tsx index 6ec5d1522..050e99ade 100644 --- a/src/form/form-time-range-picker.tsx +++ b/src/form/form-time-range-picker.tsx @@ -1,4 +1,4 @@ -import { TimeRangePicker, TimeRangePickerAlt } from "../time-range-picker"; +import { TimeRangePicker } from "../time-range-picker"; import { FormWrapper } from "./form-wrapper"; import { FormTimeRangePickerProps } from "./types"; @@ -8,35 +8,12 @@ export const FormTimeRangePicker = ({ id = "form-timepicker", "data-error-testid": errorTestId, "data-testid": testId, - variant, layoutType, mobileCols, tabletCols, desktopCols, ...otherProps }: FormTimeRangePickerProps): JSX.Element => { - const renderTimeRangePicker = () => { - if (variant === "alt") { - return ( - - ); - } else { - return ( - - ); - } - }; - return ( - {renderTimeRangePicker()} + ); }; diff --git a/src/time-range-picker/card-picker/card-picker.tsx b/src/time-range-picker/card-picker/card-picker.tsx new file mode 100644 index 000000000..08c0da27d --- /dev/null +++ b/src/time-range-picker/card-picker/card-picker.tsx @@ -0,0 +1,208 @@ +import { useEffect, useRef, useState } from "react"; +import { useEventListener } from "../../util/use-event-listener"; +import { RangeInputInnerContainer } from "../../shared/range-input-inner-container"; +import { SelectorInput, TimeContainer, Wrapper } from "../common.styles"; +import { TimeHelper } from "../../util/time-helper"; +import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; +import { TimepickerDropdown } from "../../shared/timepicker-dropdown/timepicker-dropdown"; + +export const CardPicker = ({ + id, + disabled = false, + error, + value, + format = "24hr", + readOnly, + onChange, + onFocus, + onBlur, + ...otherProps +}: TimeRangePickerProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const [showStartTimeSelector, setShowStartTimeSelector] = + useState(false); + const [showEndTimeSelector, setShowEndTimeSelector] = + useState(false); + const [startTimeVal, setStartTimeVal] = useState(""); + const [endTimeVal, setEndTimeVal] = useState(""); + + const nodeRef = useRef(); + + // ============================================================================= + // EFFECTS + // ============================================================================= + useEffect(() => { + if (value) { + setStartTimeVal(value.start); + setEndTimeVal(value.end); + } + }, []); + + useEventListener("mousedown", handleMouseDownEvent, "document"); + useEventListener("keyup", handleKeyUpEvent, "document"); + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + const handleStartTimeFocus = () => { + if (!disabled && !readOnly && !showStartTimeSelector) { + setShowEndTimeSelector(false); + setShowStartTimeSelector(true); + runOnFocusHandler(); + } + }; + + const handleEndTimeFocus = () => { + if (!disabled && !readOnly && !showEndTimeSelector) { + setShowStartTimeSelector(false); + setShowEndTimeSelector(true); + runOnFocusHandler(); + } + }; + + function handleMouseDownEvent(event: MouseEvent) { + if (!disabled) { + runOutsideFocusHandler(event); + } + } + + function handleKeyUpEvent(event: KeyboardEvent) { + switch (event.code) { + case "Tab": + runOutsideFocusHandler(event); + break; + default: + break; + } + } + + const handleSelectionDropdownCancel = () => { + runOnBlurHandler(); + }; + + const handleStartTime = (value: string) => { + setShowStartTimeSelector(false); + setShowEndTimeSelector(true); + setStartTimeVal(value); + + const timeValue: TimeRangePickerValue = { + start: value, + end: endTimeVal, + }; + + onChange && onChange(timeValue); + }; + + const handleEndTime = (value: string) => { + setShowEndTimeSelector(false); + setEndTimeVal(value); + + const timeValue: TimeRangePickerValue = { + start: startTimeVal, + end: value, + }; + + onChange && onChange(timeValue); + + if (startTimeVal == "") { + setShowStartTimeSelector(true); + } else { + onBlur && onBlur(); + } + }; + + // ============================================================================= + // HELPER FUNCTIONS + // ============================================================================= + const runOnFocusHandler = () => { + if (!showStartTimeSelector && !showEndTimeSelector) { + onFocus && onFocus(); + } + }; + + const runOnBlurHandler = () => { + setShowStartTimeSelector(false); + setShowEndTimeSelector(false); + onBlur && onBlur(); + }; + + const runOutsideFocusHandler = (event: MouseEvent | KeyboardEvent) => { + if (nodeRef && !nodeRef.current.contains(event.target as any)) { + if (showEndTimeSelector || showStartTimeSelector) { + runOnBlurHandler(); + } + } + }; + + return ( + + + + {/* From */} + + {/* To */} + + + + + + + ); +}; diff --git a/src/time-range-picker/time-range-picker.styles.tsx b/src/time-range-picker/common.styles.tsx similarity index 73% rename from src/time-range-picker/time-range-picker.styles.tsx rename to src/time-range-picker/common.styles.tsx index 27db0f583..f42c02378 100644 --- a/src/time-range-picker/time-range-picker.styles.tsx +++ b/src/time-range-picker/common.styles.tsx @@ -3,7 +3,6 @@ import { BasicInput, InputWrapper, } from "../shared/input-wrapper/input-wrapper"; -import { ClearContainer } from "../input/input.style"; // ============================================================================= // STYLING @@ -22,10 +21,3 @@ export const SelectorInput = styled(BasicInput)` width: 100%; flex: 1; `; - -export const ClearIconContainer = styled(ClearContainer)` - position: absolute; - right: 0; - padding-left: 0.5rem; - margin-right: 0; -`; diff --git a/src/time-range-picker/time-range-picker-alt.tsx b/src/time-range-picker/dropdown-picker/dropdown-picker.tsx similarity index 93% rename from src/time-range-picker/time-range-picker-alt.tsx rename to src/time-range-picker/dropdown-picker/dropdown-picker.tsx index f7e176f4d..f280cde9a 100644 --- a/src/time-range-picker/time-range-picker-alt.tsx +++ b/src/time-range-picker/dropdown-picker/dropdown-picker.tsx @@ -1,25 +1,17 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { ClearIcon } from "../input/input.style"; -import { - ClearIconContainer, - SelectorInput, - TimeContainer, - Wrapper, -} from "./time-range-picker.styles"; -import { DropdownList } from "../shared/dropdown-list-v2/dropdown-list"; -import { DropdownListState } from "../shared/dropdown-list-v2"; -import { ElementWithDropdown } from "../shared/dropdown-wrapper"; -import { ErrorMessage } from "../form/form-label.style"; -import { RangeInputInnerContainer } from "../shared/range-input-inner-container"; -import { TimeHelper } from "../util/time-helper"; -import { - TimeRangePickerProps, - TimeRangePickerValue, -} from "../time-range-picker/types"; +import { SelectorInput, TimeContainer, Wrapper } from "../common.styles"; +import { DropdownList } from "../../shared/dropdown-list-v2/dropdown-list"; +import { DropdownListState } from "../../shared/dropdown-list-v2"; +import { ElementWithDropdown } from "../../shared/dropdown-wrapper"; +import { ErrorMessage } from "../../form/form-label.style"; +import { RangeInputInnerContainer } from "../../shared/range-input-inner-container"; +import { TimeHelper } from "../../util/time-helper"; +import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; +import { ClearContainer, ClearIcon } from "../../input/input.style"; type TimeRangeInputType = "start" | "end"; -export const TimeRangePickerAlt = ({ +export const DropdownPicker = ({ id, disabled = false, error, @@ -223,13 +215,13 @@ export const TimeRangePickerAlt = ({ (startTimeVal?.length > 0 || endTimeVal?.length > 0) ) { return ( - - + ); } }; diff --git a/src/time-range-picker/index.ts b/src/time-range-picker/index.ts index 4236ece86..7dbecdc74 100644 --- a/src/time-range-picker/index.ts +++ b/src/time-range-picker/index.ts @@ -1,3 +1,2 @@ export * from "./time-range-picker"; -export * from "./time-range-picker-alt"; export * from "./types"; diff --git a/src/time-range-picker/time-range-picker.tsx b/src/time-range-picker/time-range-picker.tsx index e5fcb61e9..d99464c9c 100644 --- a/src/time-range-picker/time-range-picker.tsx +++ b/src/time-range-picker/time-range-picker.tsx @@ -1,212 +1,14 @@ -import { useEffect, useRef, useState } from "react"; -import { RangeInputInnerContainer } from "../shared/range-input-inner-container"; -import { TimepickerDropdown } from "../shared/timepicker-dropdown/timepicker-dropdown"; -import { TimeHelper } from "../util/time-helper"; -import { useEventListener } from "../util/use-event-listener"; -import { - SelectorInput, - TimeContainer, - Wrapper, -} from "./time-range-picker.styles"; -import { TimeRangePickerProps, TimeRangePickerValue } from "./types"; +import { CardPicker } from "./card-picker/card-picker"; +import { DropdownPicker } from "./dropdown-picker/dropdown-picker"; +import { TimeRangePickerProps } from "./types"; export const TimeRangePicker = ({ - id, - disabled = false, - error, - value, - format = "24hr", - readOnly, - onChange, - onFocus, - onBlur, + variant = "card", ...otherProps -}: TimeRangePickerProps) => { - // ============================================================================= - // CONST, STATE, REF - // ============================================================================= - const [showStartTimeSelector, setShowStartTimeSelector] = - useState(false); - const [showEndTimeSelector, setShowEndTimeSelector] = - useState(false); - const [startTimeVal, setStartTimeVal] = useState(""); - const [endTimeVal, setEndTimeVal] = useState(""); - - const nodeRef = useRef(); - - // ============================================================================= - // EFFECTS - // ============================================================================= - useEffect(() => { - if (value) { - setStartTimeVal(value.start); - setEndTimeVal(value.end); - } - }, []); - - useEventListener("mousedown", handleMouseDownEvent, "document"); - useEventListener("keyup", handleKeyUpEvent, "document"); - - // ============================================================================= - // EVENT HANDLERS - // ============================================================================= - const handleStartTimeFocus = () => { - if (!disabled && !readOnly && !showStartTimeSelector) { - setShowEndTimeSelector(false); - setShowStartTimeSelector(true); - runOnFocusHandler(); - } - }; - - const handleEndTimeFocus = () => { - if (!disabled && !readOnly && !showEndTimeSelector) { - setShowStartTimeSelector(false); - setShowEndTimeSelector(true); - runOnFocusHandler(); - } - }; - - function handleMouseDownEvent(event: MouseEvent) { - if (!disabled) { - runOutsideFocusHandler(event); - } - } - - function handleKeyUpEvent(event: KeyboardEvent) { - switch (event.code) { - case "Tab": - runOutsideFocusHandler(event); - break; - default: - break; - } +}: TimeRangePickerProps): JSX.Element => { + if (variant === "card") { + return ; + } else if (variant === "dropdown") { + return ; } - - const handleSelectionDropdownCancel = () => { - runOnBlurHandler(); - }; - - const handleStartTime = (value: string) => { - setShowStartTimeSelector(false); - setShowEndTimeSelector(true); - setStartTimeVal(value); - - const timeValue: TimeRangePickerValue = { - start: value, - end: endTimeVal, - }; - - onChange && onChange(timeValue); - }; - - const handleEndTime = (value: string) => { - setShowEndTimeSelector(false); - setEndTimeVal(value); - - const timeValue: TimeRangePickerValue = { - start: startTimeVal, - end: value, - }; - - onChange && onChange(timeValue); - - if (startTimeVal == "") { - setShowStartTimeSelector(true); - } else { - onBlur && onBlur(); - } - }; - - // ============================================================================= - // HELPER FUNCTIONS - // ============================================================================= - const runOnFocusHandler = () => { - if (!showStartTimeSelector && !showEndTimeSelector) { - onFocus && onFocus(); - } - }; - - const runOnBlurHandler = () => { - setShowStartTimeSelector(false); - setShowEndTimeSelector(false); - onBlur && onBlur(); - }; - - const runOutsideFocusHandler = (event: MouseEvent | KeyboardEvent) => { - if (nodeRef && !nodeRef.current.contains(event.target as any)) { - if (showEndTimeSelector || showStartTimeSelector) { - runOnBlurHandler(); - } - } - }; - - return ( - - - - {/* From */} - - {/* To */} - - - - - - - ); }; diff --git a/src/time-range-picker/types.ts b/src/time-range-picker/types.ts index ffa474114..50427be90 100644 --- a/src/time-range-picker/types.ts +++ b/src/time-range-picker/types.ts @@ -1,6 +1,7 @@ import { DropdownAlignmentType } from "../shared/dropdown-wrapper"; export type TimeRangePickerFormat = "12hr" | "24hr"; +export type TimeRangePickerVariant = "card" | "dropdown"; export interface TimeRangePickerValue { start: string; @@ -23,7 +24,7 @@ export interface TimeRangePickerProps { * * 12 hour uses "hh:mmA" e.g. `{ start: "01:00PM", end: "02:00PM" }` * - * Note: alt variant uses "h:mma" instead. + * Note: dropdown variant uses "h:mma" instead. */ value?: TimeRangePickerValue | undefined; /** @@ -35,9 +36,10 @@ export interface TimeRangePickerProps { error?: boolean | undefined; /** - * Alt variant-specific attributes + * Dropdown variant-specific attributes */ - variant?: "alt" | undefined; + /** Specifies the variant for the time range picker */ + variant?: TimeRangePickerVariant | undefined; /** Specifies the interval (minutes) between each dropdown option */ interval?: number | undefined; /** Specifies the starting time for the dropdown options */ @@ -67,5 +69,3 @@ export interface TimeRangePickerProps { */ onBlur?: (() => void) | undefined; } - -export interface TimeRangePickerAltProps extends TimeRangePickerProps {} diff --git a/stories/form/form-time-range-picker/form-time-range-picker.mdx b/stories/form/form-time-range-picker/form-time-range-picker.mdx index 58b992830..0eba91571 100644 --- a/stories/form/form-time-range-picker/form-time-range-picker.mdx +++ b/stories/form/form-time-range-picker/form-time-range-picker.mdx @@ -38,17 +38,11 @@ import { TimeRangePicker } from "@lifesg/react-design-system/TimeRangePicker"; -Alternate variant +Dropdown variant -You can also use an `alt` variant that allows users to either select a time from a dropdown list of options, or manually type in a time which is automatically parsed and converted into a valid time format (h:mma for `12hr`, hh:mm for `24hr`). +You can also use an `dropdown` variant that allows users to either select a time from a dropdown list of options, or manually type in a time which is automatically parsed and converted into a valid time format (h:mma for `12hr`, hh:mm for `24hr`). -This alternate variant can also be used as a standalone: - -```tsx -import { TimeRangePickerAlt } from "@lifesg/react-design-system/TimeRangePicker"; -``` - - + Component API diff --git a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx index b462bdb14..00ed76d47 100644 --- a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx +++ b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx @@ -116,7 +116,7 @@ export const StandaloneUsage: StoryObj = { }, }; -export const AltVariant: StoryObj = { +export const DropdownVariant: StoryObj = { render: () => { const emptyTime = { start: "", end: "" }; const [time1, setTime1] = useState(emptyTime); @@ -129,30 +129,30 @@ export const AltVariant: StoryObj = { setTime1(value)} - variant="alt" + variant="dropdown" /> setTime2(value)} - variant="alt" + variant="dropdown" interval={60} /> setTime3(value)} - variant="alt" + variant="dropdown" format="24hr" /> setTime4(value)} - variant="alt" + variant="dropdown" startLimit="10:00am" endLimit="2:00pm" /> @@ -160,7 +160,7 @@ export const AltVariant: StoryObj = { label="Automatic time range error validation" value={time5} onChange={(value) => setTime5(value)} - variant="alt" + variant="dropdown" /> diff --git a/stories/form/form-time-range-picker/props-table.tsx b/stories/form/form-time-range-picker/props-table.tsx index 61d576ccf..7377b2b3a 100644 --- a/stories/form/form-time-range-picker/props-table.tsx +++ b/stories/form/form-time-range-picker/props-table.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { ApiTable, code, quote } from "../../storybook-common/api-table"; import { ApiTableSectionProps } from "../../storybook-common/api-table/types"; import { SHARED_FORM_PROPS_DATA } from "../shared-props-data"; @@ -9,7 +8,7 @@ const TIME_FORMAT = (
    12 hour uses {quote("hh:mmA")} e.g. {code(quote("01:00PM"))}
    - Note: alt variant uses {quote("h:mma")} instead + Note: dropdown variant uses {quote("h:mma")} instead ); @@ -89,13 +88,13 @@ const DATA: ApiTableSectionProps[] = [ ], }, { - name: "TimeRangePickerAlt specific props", + name: "Dropdown variant specific props", attributes: [ { name: "variant", - description: - "Specifies the variant for the component, uses the default TimeRangePicker if undefined", - propTypes: [`"alt"`], + description: "Specifies the variant for the component", + propTypes: [`"card", "dropdown"`], + defaultValue: `"card"`, }, { name: "interval", From eaa1006d028bbfc910668d1139041e673ba493ec Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Fri, 13 Sep 2024 12:32:02 +0800 Subject: [PATCH 0429/1949] [CCUBE-1547][MAHI]Change typing to number for specs and adjust some naming convention and change spacing specs from rem to px --- .../breakpoint/specs/lifesg-breakpoint-set.ts | 4 +- src/theme/breakpoint/theme-helper.ts | 10 ++--- src/theme/breakpoint/types.ts | 6 +-- .../media-query-helper.ts} | 13 +++++-- src/theme/radius/specs/lifesg-radius-set.ts | 12 +++--- src/theme/radius/theme-helper.ts | 20 +++++----- src/theme/radius/types.ts | 12 +++--- src/theme/spacing/specs/lifesg-spacing-set.ts | 38 +++++++++---------- src/theme/spacing/theme-helper.ts | 4 +- src/theme/spacing/types.ts | 38 +++++++++---------- src/theme/types.ts | 10 +---- tests/theme/theme-media.spec.tsx | 2 +- tests/theme/theme-radius.spec.tsx | 6 +-- tests/theme/theme-spacing.spec.tsx | 12 +++--- 14 files changed, 93 insertions(+), 94 deletions(-) rename src/theme/{mediaquery/mediaquery-helper.ts => media-query/media-query-helper.ts} (83%) diff --git a/src/theme/breakpoint/specs/lifesg-breakpoint-set.ts b/src/theme/breakpoint/specs/lifesg-breakpoint-set.ts index b4c244765..c8fc0e6ad 100644 --- a/src/theme/breakpoint/specs/lifesg-breakpoint-set.ts +++ b/src/theme/breakpoint/specs/lifesg-breakpoint-set.ts @@ -1,6 +1,6 @@ -import { MediaWidth } from "../types"; +import { BreakpointSet } from "../types"; -export const LifeSgMediaWidths: MediaWidth = { +export const LifeSgBreakpointSet: BreakpointSet = { "xxs-min": 0, "xxs-max": 320, "xs-min": 321, diff --git a/src/theme/breakpoint/theme-helper.ts b/src/theme/breakpoint/theme-helper.ts index 67a12f87d..52c41daac 100644 --- a/src/theme/breakpoint/theme-helper.ts +++ b/src/theme/breakpoint/theme-helper.ts @@ -1,22 +1,22 @@ import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { BreakpointScheme, ThemeCollectionSpec } from "../types"; -import { LifeSgMediaWidths } from "./specs/lifesg-breakpoint-set"; -import { BreakPointCollectionsMap, MediaWidth } from "./types"; +import { LifeSgBreakpointSet } from "./specs/lifesg-breakpoint-set"; +import { BreakPointCollectionsMap, BreakpointSet } from "./types"; const BreakpointSpec: ThemeCollectionSpec< BreakPointCollectionsMap, BreakpointScheme > = { collections: { - lifesg: LifeSgMediaWidths, + lifesg: LifeSgBreakpointSet, }, defaultValue: "lifesg", }; -export const getBreakpoint = (key: keyof MediaWidth) => { +export const getBreakpoint = (key: keyof BreakpointSet) => { return (props: StyledComponentProps): number => { const theme = props.theme; - const breakpointSet: MediaWidth = getCollection( + const breakpointSet: BreakpointSet = getCollection( BreakpointSpec, theme?.breakpointScheme ); diff --git a/src/theme/breakpoint/types.ts b/src/theme/breakpoint/types.ts index a784e6dda..6f3135ad7 100644 --- a/src/theme/breakpoint/types.ts +++ b/src/theme/breakpoint/types.ts @@ -1,7 +1,7 @@ import { StyledComponentProps } from "../helpers"; import { BreakpointScheme } from "../types"; -export interface MediaWidth { +export interface BreakpointSet { "xxs-min": number; "xxs-max": number; "xs-min": number; @@ -39,7 +39,7 @@ export interface MediaWidth { } export type BreakPointCollectionsMap = { - [key in BreakpointScheme]: MediaWidth; + [key in BreakpointScheme]: BreakpointSet; }; -export type BreakPointSetOptions = Partial; +export type BreakPointSetOptions = Partial; diff --git a/src/theme/mediaquery/mediaquery-helper.ts b/src/theme/media-query/media-query-helper.ts similarity index 83% rename from src/theme/mediaquery/mediaquery-helper.ts rename to src/theme/media-query/media-query-helper.ts index 13cb190d9..8151620ae 100644 --- a/src/theme/mediaquery/mediaquery-helper.ts +++ b/src/theme/media-query/media-query-helper.ts @@ -1,12 +1,17 @@ import { BreakpointValues } from "../breakpoint/theme-helper"; import { StyledComponentProps } from "../helpers"; -// Two separate types for max and min breakpoints +// Typings for MedaiQuery type MaxWidthBreakpoints = "xxs" | "xs" | "sm" | "md" | "lg" | "xl"; type MinWidthBreakpoints = MaxWidthBreakpoints | "xxl"; +type MediaQueryMinMax = "max-width" | "min-width"; +type MediaQuerySpec = Record< + T, + (props: StyledComponentProps) => string +>; const createMediaQueryFunction = ( - type: "max-width" | "min-width", + type: MediaQueryMinMax, key: T ) => { const mappedKey = type === "max-width" ? `${key}-max` : `${key}-min`; @@ -21,7 +26,7 @@ const createMediaQueryFunction = ( const getMediaQuerySpec = ( type: "max-width" | "min-width" -): Record string> => { +): MediaQuerySpec => { // Conditional breakpoints for max and min widths const breakpoints = ( type === "max-width" @@ -32,7 +37,7 @@ const getMediaQuerySpec = ( return breakpoints.reduce((accumulator, key) => { accumulator[key] = createMediaQueryFunction(type, key); return accumulator; - }, {} as Record string>); + }, {} as MediaQuerySpec); }; // Export with typing diff --git a/src/theme/radius/specs/lifesg-radius-set.ts b/src/theme/radius/specs/lifesg-radius-set.ts index 26eac6008..93ae89f9e 100644 --- a/src/theme/radius/specs/lifesg-radius-set.ts +++ b/src/theme/radius/specs/lifesg-radius-set.ts @@ -1,10 +1,10 @@ import { RadiusSet } from "../types"; export const LifeSgRadiusSet: RadiusSet = { - none: "0px", - xs: "2px", - sm: "4px", - md: "8px", - lg: "12px", - full: "9999px", + none: 0, + xs: 2, + sm: 4, + md: 8, + lg: 12, + full: 9999, }; diff --git a/src/theme/radius/theme-helper.ts b/src/theme/radius/theme-helper.ts index 97a337518..47488599f 100644 --- a/src/theme/radius/theme-helper.ts +++ b/src/theme/radius/theme-helper.ts @@ -10,27 +10,27 @@ const RadiusSpec: ThemeCollectionSpec = { defaultValue: "lifesg", }; -export const getSpace = (key: keyof RadiusSet) => { +export const getRadius = (key: keyof RadiusSet) => { return (props: StyledComponentProps): string => { const theme = props.theme; const spacingset: RadiusSet = getCollection( RadiusSpec, - theme.spacingScheme + theme.radiusScheme ); if (theme.overrides && theme.overrides.radius) { - return getValue(spacingset, key, theme.overrides.radius); + return `${getValue(spacingset, key, theme.overrides.radius)}px`; } else { - return spacingset[key]; + return `${spacingset[key]}px`; } }; }; export const RadiusValues = { - none: getSpace("none"), - xs: getSpace("xs"), - sm: getSpace("sm"), - md: getSpace("md"), - lg: getSpace("lg"), - full: getSpace("full"), + none: getRadius("none"), + xs: getRadius("xs"), + sm: getRadius("sm"), + md: getRadius("md"), + lg: getRadius("lg"), + full: getRadius("full"), }; diff --git a/src/theme/radius/types.ts b/src/theme/radius/types.ts index f780e69d4..607854239 100644 --- a/src/theme/radius/types.ts +++ b/src/theme/radius/types.ts @@ -1,12 +1,12 @@ import { RadiusScheme } from "../types"; export type RadiusSet = { - none: string; - xs: string; - sm: string; - md: string; - lg: string; - full: string; + none: number; + xs: number; + sm: number; + md: number; + lg: number; + full: number; }; export type RadiusSetOptions = Partial; diff --git a/src/theme/spacing/specs/lifesg-spacing-set.ts b/src/theme/spacing/specs/lifesg-spacing-set.ts index 7ff73ff5c..6bf95cadd 100644 --- a/src/theme/spacing/specs/lifesg-spacing-set.ts +++ b/src/theme/spacing/specs/lifesg-spacing-set.ts @@ -1,24 +1,24 @@ import { SpacingSet } from "../types"; export const LifeSgSpacingSet: SpacingSet = { - "spacing-0": "0rem", - "spacing-4": "0.25rem", - "spacing-8": "0.5rem", - "spacing-12": "0.75rem", - "spacing-16": "1rem", - "spacing-20": "1.25rem", - "spacing-24": "1.5rem", - "spacing-32": "2rem", - "spacing-40": "2.5rem", - "spacing-48": "3rem", - "spacing-64": "4rem", - "spacing-72": "4.5rem", + "spacing-0": 0, + "spacing-4": 0.25, + "spacing-8": 0.5, + "spacing-12": 0.75, + "spacing-16": 1, + "spacing-20": 1.25, + "spacing-24": 1.5, + "spacing-32": 2, + "spacing-40": 2.5, + "spacing-48": 3, + "spacing-64": 4, + "spacing-72": 4.5, - "layout-xs": "8px", - "layout-sm": "16px", - "layout-md": "24px", - "layout-lg": "32px", - "layout-xl": "48px", - "layout-xxl": "64px", - "layout-xxxl": "128px", + "layout-xs": 8, + "layout-sm": 16, + "layout-md": 24, + "layout-lg": 32, + "layout-xl": 48, + "layout-xxl": 64, + "layout-xxxl": 128, }; diff --git a/src/theme/spacing/theme-helper.ts b/src/theme/spacing/theme-helper.ts index a1379409a..4d428e835 100644 --- a/src/theme/spacing/theme-helper.ts +++ b/src/theme/spacing/theme-helper.ts @@ -19,9 +19,9 @@ export const getSpace = (key: keyof SpacingSet) => { ); if (theme.overrides && theme.overrides.spacing) { - return getValue(spacingset, key, theme.overrides.spacing); + return `${getValue(spacingset, key, theme.overrides.spacing)}px`; } else { - return spacingset[key]; + return `${spacingset[key]}px`; } }; }; diff --git a/src/theme/spacing/types.ts b/src/theme/spacing/types.ts index e158ca63f..9c8865e24 100644 --- a/src/theme/spacing/types.ts +++ b/src/theme/spacing/types.ts @@ -1,26 +1,26 @@ import { SpacingScheme } from "../types"; export type SpacingSet = { - "spacing-0": string; - "spacing-4": string; - "spacing-8": string; - "spacing-12": string; - "spacing-16": string; - "spacing-20": string; - "spacing-24": string; - "spacing-32": string; - "spacing-40": string; - "spacing-48": string; - "spacing-64": string; - "spacing-72": string; + "spacing-0": number; + "spacing-4": number; + "spacing-8": number; + "spacing-12": number; + "spacing-16": number; + "spacing-20": number; + "spacing-24": number; + "spacing-32": number; + "spacing-40": number; + "spacing-48": number; + "spacing-64": number; + "spacing-72": number; - "layout-xs": string; - "layout-sm": string; - "layout-md": string; - "layout-lg": string; - "layout-xl": string; - "layout-xxl": string; - "layout-xxxl": string; + "layout-xs": number; + "layout-sm": number; + "layout-md": number; + "layout-lg": number; + "layout-xl": number; + "layout-xxl": number; + "layout-xxxl": number; }; export type SpacingSetOptions = Partial; diff --git a/src/theme/types.ts b/src/theme/types.ts index b56024d44..6c620249c 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -25,15 +25,9 @@ export type { AnimationSet, AnimationSetOptions } from "./animation/types"; export type { BorderSet, BorderSetOptions } from "./border/types"; -export type { - RadiusSet, - RadiusSetOptions as RadiusSetSetOptions, -} from "./radius/types"; +export type { RadiusSet, RadiusSetOptions } from "./radius/types"; -export type { - SpacingSet as SpacingSetType, - SpacingSetOptions, -} from "./spacing/types"; +export type { SpacingSet, SpacingSetOptions } from "./spacing/types"; export type ColourScheme = | "lifesg" diff --git a/tests/theme/theme-media.spec.tsx b/tests/theme/theme-media.spec.tsx index be054c60a..6d68b9949 100644 --- a/tests/theme/theme-media.spec.tsx +++ b/tests/theme/theme-media.spec.tsx @@ -1,6 +1,6 @@ import styled, { ThemeProvider } from "styled-components"; import { Breakpoint } from "../../src"; -import { MediaQuery } from "../../src/theme/mediaquery/mediaquery-helper"; +import { MediaQuery } from "../../src/theme/media-query/media-query-helper"; import { ThemeSpec } from "../../src/theme/types"; import { render } from "@testing-library/react"; import "jest-styled-components"; diff --git a/tests/theme/theme-radius.spec.tsx b/tests/theme/theme-radius.spec.tsx index 1afce50bc..b9b0c0257 100644 --- a/tests/theme/theme-radius.spec.tsx +++ b/tests/theme/theme-radius.spec.tsx @@ -45,7 +45,7 @@ describe("Radius Theming Test", () => { breakpointScheme: "lifesg", overrides: { radius: { - sm: "6px", + sm: 6, }, }, }; @@ -80,8 +80,8 @@ describe("Radius Theming Test", () => { breakpointScheme: "lifesg", overrides: { radius: { - sm: "6px", - md: "10px", + sm: 6, + md: 10, }, }, }; diff --git a/tests/theme/theme-spacing.spec.tsx b/tests/theme/theme-spacing.spec.tsx index f393abfca..70255d49a 100644 --- a/tests/theme/theme-spacing.spec.tsx +++ b/tests/theme/theme-spacing.spec.tsx @@ -21,7 +21,7 @@ describe("Spacing Themeing Test", () => { breakpointScheme: "lifesg", }; - const marginValue = "1rem"; + const marginValue = "1px"; const paddingValue = "32px"; const { container } = render( @@ -45,12 +45,12 @@ describe("Spacing Themeing Test", () => { breakpointScheme: "lifesg", overrides: { spacing: { - "spacing-16": "2rem", + "spacing-16": 2, }, }, }; - const marginValue = "2rem"; + const marginValue = "2px"; const paddingValue = "32px"; const { container } = render( @@ -74,13 +74,13 @@ describe("Spacing Themeing Test", () => { breakpointScheme: "lifesg", overrides: { spacing: { - "spacing-16": "3rem", - "layout-lg": "40px", + "spacing-16": 3, + "layout-lg": 40, }, }, }; - const marginValue = "3rem"; + const marginValue = "3px"; const paddingValue = "40px"; const { container } = render( From 6d3a33ea1edcb4aa99b3f50562fd64531c5824da Mon Sep 17 00:00:00 2001 From: roll Date: Fri, 13 Sep 2024 16:35:16 +0800 Subject: [PATCH 0430/1949] [V3][RL] Remove redundant styles --- stories/theme/doc-elements/doc-typography-display.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/stories/theme/doc-elements/doc-typography-display.tsx b/stories/theme/doc-elements/doc-typography-display.tsx index 7fd2a9e52..b3fceb271 100644 --- a/stories/theme/doc-elements/doc-typography-display.tsx +++ b/stories/theme/doc-elements/doc-typography-display.tsx @@ -195,11 +195,7 @@ const Display = styled.div` grid-template-columns: repeat(4, minmax(max-content, 1fr)); flex-wrap: wrap; - margin-bottom: 2.5rem; - - &:last-child { - margin-bottom: 1rem; - } + margin-bottom: 1rem; overflow-x: auto; `; From f76ae9d80820c6b4a156588b67b0bd11837075ad Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 9 Sep 2024 23:14:57 +0800 Subject: [PATCH 0431/1949] [FLOAT][RL] Enhance popover to be modal aware --- src/overlay/overlay.tsx | 48 ++++++++++++++----- src/overlay/use-floating-context.tsx | 71 ++++++++++++++++++++++++++++ src/popover-v2/popover-trigger.tsx | 7 ++- 3 files changed, 112 insertions(+), 14 deletions(-) create mode 100644 src/overlay/use-floating-context.tsx diff --git a/src/overlay/overlay.tsx b/src/overlay/overlay.tsx index be2195388..f6cb791c4 100644 --- a/src/overlay/overlay.tsx +++ b/src/overlay/overlay.tsx @@ -1,10 +1,16 @@ +import { + FloatingNode, + FloatingTree, + useFloatingNodeId, +} from "@floating-ui/react"; import React, { useEffect, useRef, useState } from "react"; import ReactDOM from "react-dom"; import { SimpleIdGenerator } from "../util"; import { Root, Wrapper } from "./overlay.styles"; import { OverlayProps } from "./types"; +import { useFloatingParent } from "./use-floating-context"; -export const Overlay = ({ +const OverlayComponent = ({ show = false, rootId, onOverlayClick, @@ -13,7 +19,7 @@ export const Overlay = ({ backgroundBlur = true, disableTransition = false, enableOverlayClick = false, - zIndex, + zIndex: customZIndex, id, }: OverlayProps): JSX.Element | null => { // ============================================================================= @@ -22,6 +28,7 @@ export const Overlay = ({ const [rootElement, setRootElement] = useState(null); const [isStacked, _setIsStacked] = useState(); const [uid] = useState(() => SimpleIdGenerator.generate()); + const nodeId = useFloatingNodeId(); const stacked = useRef(); @@ -32,6 +39,9 @@ export const Overlay = ({ const overlayRootId = id ? `lifesg-ds-overlay-root-${id}` : "lifesg-ds-overlay-root"; + const zIndex = customZIndex ?? isStacked ? 99999 : 99998; + + useFloatingParent(zIndex); // ============================================================================= // EFFECTS @@ -177,17 +187,21 @@ export const Overlay = ({ // RENDER // ============================================================================= const renderWrapper = () => ( - - {childWithRef} - + + + {childWithRef} + + ); const renderComponent = () => ( @@ -207,6 +221,14 @@ export const Overlay = ({ : null; }; +export const Overlay = (props: OverlayProps) => { + return ( + + + + ); +}; + // ============================================================================= // CONSTANTS // ============================================================================= diff --git a/src/overlay/use-floating-context.tsx b/src/overlay/use-floating-context.tsx new file mode 100644 index 000000000..97049dd8c --- /dev/null +++ b/src/overlay/use-floating-context.tsx @@ -0,0 +1,71 @@ +import { useFloatingTree } from "@floating-ui/react"; +import { useEffect, useState } from "react"; + +enum OverlayContextEvent { + Ready = "overlay-context-ready", + Change = "overlay-context-change", +} + +interface OverlayContextChangeData { + zIndex: number; +} + +export const useFloatingParent = (zIndex: number) => { + const tree = useFloatingTree(); + + useEffect(() => { + if (!tree) { + return; + } + const data: OverlayContextChangeData = { zIndex }; + tree.events.emit(OverlayContextEvent.Change, data); + }, [tree, zIndex]); + + useEffect(() => { + if (!tree) { + return; + } + + const handleOverlayContextReady = () => { + const data: OverlayContextChangeData = { zIndex }; + tree.events.emit(OverlayContextEvent.Change, data); + }; + + tree?.events.on(OverlayContextEvent.Ready, handleOverlayContextReady); + + return () => + tree?.events.off( + OverlayContextEvent.Ready, + handleOverlayContextReady + ); + }, [tree, zIndex]); +}; + +export const useFloatingChild = () => { + const [parentZIndex, setParentZIndex] = useState( + undefined + ); + const tree = useFloatingTree(); + + useEffect(() => { + if (!tree) { + setParentZIndex(undefined); + return; + } + + const handleOverlayContextChange = (data: OverlayContextChangeData) => { + setParentZIndex(data.zIndex); + }; + + tree.events.on(OverlayContextEvent.Change, handleOverlayContextChange); + tree.events.emit(OverlayContextEvent.Ready); + + return () => + tree.events.off( + OverlayContextEvent.Change, + handleOverlayContextChange + ); + }, [tree]); + + return parentZIndex; +}; diff --git a/src/popover-v2/popover-trigger.tsx b/src/popover-v2/popover-trigger.tsx index 5d6001391..777c89a5a 100644 --- a/src/popover-v2/popover-trigger.tsx +++ b/src/popover-v2/popover-trigger.tsx @@ -10,6 +10,7 @@ import { import { useEffect, useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; import { MediaWidths } from "../media"; +import { useFloatingChild } from "../overlay/use-floating-context"; import { PopoverV2 } from "./popover"; import { TriggerContainer } from "./popover-trigger.styles"; import { PopoverV2TriggerProps } from "./types"; @@ -46,6 +47,7 @@ export const PopoverTrigger = ({ }), ], }); + const parentZIndex = useFloatingChild(); // ========================================================================= // EFFECTS @@ -127,7 +129,10 @@ export const PopoverTrigger = ({ popoverRef.current = node; refs.setFloating(node); }} - style={{ ...floatingStyles, zIndex }} + style={{ + ...floatingStyles, + zIndex: zIndex ?? parentZIndex, + }} > {renderPopover()} From e4640b48d2ce5129a1431aefd98839ed8c5c4657 Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 9 Sep 2024 23:15:46 +0800 Subject: [PATCH 0432/1949] [FLOAT][RL] Clean up types --- src/overlay/overlay.styles.tsx | 22 ++++++++++++++++++---- src/overlay/overlay.tsx | 4 +--- src/overlay/types.ts | 3 +++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/overlay/overlay.styles.tsx b/src/overlay/overlay.styles.tsx index 8b1622cff..bf7819e84 100644 --- a/src/overlay/overlay.styles.tsx +++ b/src/overlay/overlay.styles.tsx @@ -1,5 +1,21 @@ import styled, { css } from "styled-components"; -import { StyleProps } from "./types"; + +// ============================================================================= +// STYLE INTERFACE, transient props are denoted with $ +// See more https://styled-components.com/docs/api#transient-props +// ============================================================================= + +export interface StyleProps { + $show: boolean; + $backgroundOpacity?: number | undefined; + $backgroundBlur?: boolean | undefined; + $disableTransition?: boolean | undefined; + $zIndex?: number | undefined; +} + +// ============================================================================= +// STYLING +// ============================================================================= const getBackdropFilter = (blur: boolean) => { let styleString = ""; @@ -18,9 +34,7 @@ export const Root = styled.div` height: 0; width: 0; visibility: hidden; - z-index: ${(props) => { - return props.zIndex || (props.$stacked ? 99999 : 99998); - }}; + z-index: ${(props) => props.$zIndex}; ${(props) => { if (props.$show) { diff --git a/src/overlay/overlay.tsx b/src/overlay/overlay.tsx index f6cb791c4..6fd936b58 100644 --- a/src/overlay/overlay.tsx +++ b/src/overlay/overlay.tsx @@ -196,7 +196,6 @@ const OverlayComponent = ({ } $backgroundBlur={backgroundBlur} $disableTransition={disableTransition} - $enableOverlayClick={enableOverlayClick} onClick={handleWrapperClick} > {childWithRef} @@ -209,8 +208,7 @@ const OverlayComponent = ({ id={overlayRootId} data-testid={overlayRootId} $show={show} - zIndex={zIndex} - $stacked={isStacked} + $zIndex={zIndex} > {children && renderWrapper()} diff --git a/src/overlay/types.ts b/src/overlay/types.ts index 431cd326d..c82f85507 100644 --- a/src/overlay/types.ts +++ b/src/overlay/types.ts @@ -17,6 +17,9 @@ export interface OverlayProps { * Transient props are denoted with $ * https://styled-components.com/docs/api#transient-props */ +/** + * @deprecated For library internal use only + */ export interface StyleProps { $show: boolean; $backgroundOpacity?: number | undefined; From a6ef68a37adf77986e4d851f6ccc9cf0343e1770 Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 9 Sep 2024 23:16:12 +0800 Subject: [PATCH 0433/1949] [FLOAT][RL] Document modal-aware behaviour --- stories/popover-v2/popover.mdx | 14 ++++++++++ stories/popover-v2/popover.stories.tsx | 38 +++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/stories/popover-v2/popover.mdx b/stories/popover-v2/popover.mdx index 3abd447e9..546f9a0ac 100644 --- a/stories/popover-v2/popover.mdx +++ b/stories/popover-v2/popover.mdx @@ -40,4 +40,18 @@ You can opt out of the default appearance to display custom content such as menu +Z-index conflicts + +The popover uses z-index to display above elements. It may end up rendering +below another element with a higher z-index. + +The popover is `Modal` and `Overlay`-aware by default; when rendered as a child +of either component, it will automatically adjust its z-index to remain visible. +The story below illustrates the default behaviour. + +If you still encounter z-index issues, try setting a custom `zIndex` or +`rootNode`. + + + diff --git a/stories/popover-v2/popover.stories.tsx b/stories/popover-v2/popover.stories.tsx index f28954368..7313161d6 100644 --- a/stories/popover-v2/popover.stories.tsx +++ b/stories/popover-v2/popover.stories.tsx @@ -1,5 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { Button, PopoverTrigger, PopoverV2 } from "../../src"; +import { useState } from "react"; +import { Button, Modal, PopoverTrigger, PopoverV2 } from "../../src"; type Component = typeof PopoverV2; @@ -110,3 +111,38 @@ export const Customisation: StoryObj = { ); }, }; + +export const UsageInOverlay: StoryObj = { + render: () => { + const [show, setShow] = useState(false); + const [showNested, setShowNested] = useState(false); + + return ( + <> + { + setShow(true); + setTimeout(() => { + setShowNested(true); + }, 3000); + }} + > + Show modal + + setShow(false)}> + + Toggle tooltip + + + setShowNested(false)} + > + + Toggle nested tooltip + + + + ); + }, +}; From ab7218969802e1a79f6fe1e3398026dae19b48e8 Mon Sep 17 00:00:00 2001 From: roll Date: Tue, 10 Sep 2024 08:56:23 +0800 Subject: [PATCH 0434/1949] [FLOAT][RL] Move floating-ui to peer deps for context to work --- README.md | 13 +++++++ package-lock.json | 46 ++++++++++++++---------- package.json | 6 ++-- stories/getting-started/installation.mdx | 13 +++++++ 4 files changed, 57 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index f22d60304..2dffb1450 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,19 @@ A React component library for LifeSG and BookingSG related products. npm i @lifesg/react-design-system ``` +### Peer dependencies + +```json +{ + "@floating-ui/dom": "^1.6.10", + "@floating-ui/react": "^0.26.23", + "@lifesg/react-icons": "^1.5.0", + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0", + "styled-components": "^5.3.5" +} +``` +
    ## Getting Started diff --git a/package-lock.json b/package-lock.json index 28f1502e1..66782ce5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,6 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "@floating-ui/dom": "^1.5.4", - "@floating-ui/react": "^0.26.6", "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", @@ -24,6 +22,8 @@ "@babel/preset-typescript": "^7.16.7", "@dnd-kit/core": "^6.0.8", "@dnd-kit/sortable": "^7.0.2", + "@floating-ui/dom": "^1.6.10", + "@floating-ui/react": "^0.26.23", "@lifesg/react-icons": "^1.6.0", "@playwright/test": "^1.45.0", "@rollup/plugin-commonjs": "^25.0.7", @@ -104,6 +104,8 @@ "typescript": "^4.8.2" }, "peerDependencies": { + "@floating-ui/dom": "^1.6.10", + "@floating-ui/react": "^0.26.23", "@lifesg/react-icons": "^1.5.0", "react": "^17.0.2 || ^18.0.0", "react-dom": "^17.0.2 || ^18.0.0", @@ -2986,26 +2988,29 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", + "dev": true, "dependencies": { "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", - "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", + "dev": true, "dependencies": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/react": { - "version": "0.26.16", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.16.tgz", - "integrity": "sha512-HEf43zxZNAI/E781QIVpYSF3K2VH4TTYZpqecjdsFkjsaU1EbaWcM++kw0HXFffj7gDUcBFevX8s0rQGQpxkow==", + "version": "0.26.23", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.23.tgz", + "integrity": "sha512-9u3i62fV0CFF3nIegiWiRDwOs7OW/KhSUJDNx2MkQM3LbE5zQOY01sL3nelcVBXvX7Ovvo3A49I8ql+20Wg/Hw==", + "dev": true, "dependencies": { - "@floating-ui/react-dom": "^2.1.0", - "@floating-ui/utils": "^0.2.0", + "@floating-ui/react-dom": "^2.1.1", + "@floating-ui/utils": "^0.2.7", "tabbable": "^6.0.0" }, "peerDependencies": { @@ -3014,9 +3019,10 @@ } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz", - "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", + "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "dev": true, "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -3026,9 +3032,10 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", + "dev": true }, "node_modules/@hapi/hoek": { "version": "9.3.0", @@ -32295,7 +32302,8 @@ "node_modules/tabbable": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true }, "node_modules/tapable": { "version": "2.2.1", diff --git a/package.json b/package.json index 475802d7d..8ca9e477c 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,6 @@ }, "homepage": "https://github.com/LifeSG/react-design-system#readme", "dependencies": { - "@floating-ui/dom": "^1.5.4", - "@floating-ui/react": "^0.26.6", "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", @@ -50,6 +48,8 @@ "@babel/preset-typescript": "^7.16.7", "@dnd-kit/core": "^6.0.8", "@dnd-kit/sortable": "^7.0.2", + "@floating-ui/dom": "^1.6.10", + "@floating-ui/react": "^0.26.23", "@lifesg/react-icons": "^1.6.0", "@playwright/test": "^1.45.0", "@rollup/plugin-commonjs": "^25.0.7", @@ -130,6 +130,8 @@ "typescript": "^4.8.2" }, "peerDependencies": { + "@floating-ui/dom": "^1.6.10", + "@floating-ui/react": "^0.26.23", "@lifesg/react-icons": "^1.5.0", "react": "^17.0.2 || ^18.0.0", "react-dom": "^17.0.2 || ^18.0.0", diff --git a/stories/getting-started/installation.mdx b/stories/getting-started/installation.mdx index fdc170510..880989425 100644 --- a/stories/getting-started/installation.mdx +++ b/stories/getting-started/installation.mdx @@ -30,6 +30,19 @@ Install the LifeSG Design System package. npm i @lifesg/react-design-system ``` +The following peer dependencies should be installed: + +```json +{ + "@floating-ui/dom": "^1.6.10", + "@floating-ui/react": "^0.26.23", + "@lifesg/react-icons": "^1.5.0", + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0", + "styled-components": "^5.3.5" +} +``` + The module requires some custom css for certain components to work properly. As the module does not ship with css, you will need to add this into the `head` of your html file. ```tsx From 392e1bc14f43baea7d72fd17cc29485114d67b54 Mon Sep 17 00:00:00 2001 From: roll Date: Sun, 15 Sep 2024 19:53:35 +0800 Subject: [PATCH 0435/1949] [FLOAT][RL] Enhance inputs to be modal-aware --- src/date-input/date-input.tsx | 4 ++-- src/date-range-input/date-range-input.tsx | 4 ++-- src/input-multi-select/input-multi-select.tsx | 2 +- src/input-select/input-select.tsx | 2 +- src/select-histogram/select-histogram.tsx | 2 +- .../dropdown-wrapper/element-with-dropdown.tsx | 13 ++++++++++--- stories/form/form-date-input/form-date-input.mdx | 8 ++++++++ .../form-date-range-input/form-date-range-input.mdx | 8 ++++++++ .../form/form-multi-select/form-multi-select.mdx | 8 ++++++++ .../form-select-histogram/form-select-histogram.mdx | 8 ++++++++ stories/form/form-select/form-select.mdx | 8 ++++++++ 11 files changed, 57 insertions(+), 10 deletions(-) diff --git a/src/date-input/date-input.tsx b/src/date-input/date-input.tsx index 0e2acdeb1..56100d28c 100644 --- a/src/date-input/date-input.tsx +++ b/src/date-input/date-input.tsx @@ -28,7 +28,7 @@ export const DateInput = ({ readOnly, id, allowDisabledSelection, - zIndex = 50, + zIndex, ...otherProps }: DateInputProps) => { // ============================================================================= @@ -239,7 +239,7 @@ export const DateInput = ({ renderDropdown={renderCalendar} onClose={handleClose} onDismiss={handleDismiss} - zIndex={zIndex} + customZIndex={zIndex} offset={16} /> ); diff --git a/src/date-range-input/date-range-input.tsx b/src/date-range-input/date-range-input.tsx index 2db91ad07..5d1117bc7 100644 --- a/src/date-range-input/date-range-input.tsx +++ b/src/date-range-input/date-range-input.tsx @@ -69,7 +69,7 @@ export const DateRangeInput = ({ readOnly, id, allowDisabledSelection, - zIndex = 50, + zIndex, ...otherProps }: DateRangeInputProps) => { // ============================================================================= @@ -667,7 +667,7 @@ export const DateRangeInput = ({ onDismiss={handleDismiss} renderElement={renderInput} renderDropdown={renderCalendar} - zIndex={zIndex} + customZIndex={zIndex} offset={16} /> ); diff --git a/src/input-multi-select/input-multi-select.tsx b/src/input-multi-select/input-multi-select.tsx index 2f041b928..be0ad51e8 100644 --- a/src/input-multi-select/input-multi-select.tsx +++ b/src/input-multi-select/input-multi-select.tsx @@ -268,7 +268,7 @@ export const InputMultiSelect = ({ offset={8} alignment={alignment} fitAvailableHeight - zIndex={dropdownZIndex} + customZIndex={dropdownZIndex} /> ); diff --git a/src/input-select/input-select.tsx b/src/input-select/input-select.tsx index a2f553550..6d356c584 100644 --- a/src/input-select/input-select.tsx +++ b/src/input-select/input-select.tsx @@ -277,7 +277,7 @@ export const InputSelect = ({ offset={8} alignment={alignment} fitAvailableHeight - zIndex={dropdownZIndex} + customZIndex={dropdownZIndex} /> ); diff --git a/src/select-histogram/select-histogram.tsx b/src/select-histogram/select-histogram.tsx index ac55ce44c..4716c744e 100644 --- a/src/select-histogram/select-histogram.tsx +++ b/src/select-histogram/select-histogram.tsx @@ -211,7 +211,7 @@ export const SelectHistogram = ({ offset={8} alignment={alignment} fitAvailableHeight - zIndex={dropdownZIndex} + customZIndex={dropdownZIndex} /> ); diff --git a/src/shared/dropdown-wrapper/element-with-dropdown.tsx b/src/shared/dropdown-wrapper/element-with-dropdown.tsx index d29cc96ea..d9a7ef551 100644 --- a/src/shared/dropdown-wrapper/element-with-dropdown.tsx +++ b/src/shared/dropdown-wrapper/element-with-dropdown.tsx @@ -17,6 +17,7 @@ import { } from "@floating-ui/react"; import { useRef } from "react"; import { useResizeDetector } from "react-resize-detector"; +import { useFloatingChild } from "../../overlay/use-floating-context"; import { DropdownContainer } from "./element-with-dropdown.styles"; import { DropdownAlignmentType } from "./types"; @@ -32,7 +33,8 @@ interface ElementWithDropdownProps { onDismiss?: () => void | undefined; renderElement: () => React.ReactNode; renderDropdown: (props: DropdownRenderProps) => React.ReactNode; - zIndex?: number | undefined; + customZIndex?: number | undefined; + defaultZIndex?: number | undefined; clickToToggle?: boolean | undefined; /* the distance between the reference element and the dropdown */ offset?: number | undefined; @@ -59,7 +61,8 @@ export const ElementWithDropdown = ({ onDismiss, renderElement, renderDropdown, - zIndex = 50, + customZIndex, + defaultZIndex = 50, clickToToggle = false, offset: dropdownOffset = 0, alignment = "left", @@ -109,6 +112,7 @@ export const ElementWithDropdown = ({ }), ], }); + const parentZIndex = useFloatingChild(); const { isMounted, styles } = useTransitionStyles(context, { initial: { opacity: 0 }, @@ -150,7 +154,10 @@ export const ElementWithDropdown = ({ ref={refs.setFloating} style={{ ...floatingStyles, - zIndex, + zIndex: + customZIndex ?? + parentZIndex ?? + defaultZIndex, }} {...getFloatingProps()} > diff --git a/stories/form/form-date-input/form-date-input.mdx b/stories/form/form-date-input/form-date-input.mdx index 77479ca00..db9916651 100644 --- a/stories/form/form-date-input/form-date-input.mdx +++ b/stories/form/form-date-input/form-date-input.mdx @@ -44,6 +44,14 @@ column props to span across the specified columns in grid layouts. +Z-index conflicts + +The calendar dropdown uses z-index to display above elements. It is `Modal` and +`Overlay`-aware by default; when rendered as a child of either component, it +will automatically adjust its z-index to remain visible. + +If you still encounter z-index issues, try setting a custom `zIndex`. + Using the field as a standalone In the case that you require the date input field as a standalone, you can do this. diff --git a/stories/form/form-date-range-input/form-date-range-input.mdx b/stories/form/form-date-range-input/form-date-range-input.mdx index 8448fe0d8..f78c37602 100644 --- a/stories/form/form-date-range-input/form-date-range-input.mdx +++ b/stories/form/form-date-range-input/form-date-range-input.mdx @@ -56,6 +56,14 @@ column props to span across the specified columns in grid layouts. +Z-index conflicts + +The calendar dropdown uses z-index to display above elements. It is `Modal` and +`Overlay`-aware by default; when rendered as a child of either component, it +will automatically adjust its z-index to remain visible. + +If you still encounter z-index issues, try setting a custom `zIndex`. + Using the field as a standalone In the case that you require the date range input field as a standalone, you can do this. diff --git a/stories/form/form-multi-select/form-multi-select.mdx b/stories/form/form-multi-select/form-multi-select.mdx index 4fca9f298..7cea7fcc4 100644 --- a/stories/form/form-multi-select/form-multi-select.mdx +++ b/stories/form/form-multi-select/form-multi-select.mdx @@ -32,6 +32,14 @@ column props to span across the specified columns in grid layouts. +Z-index conflicts + +The dropdown uses z-index to display above elements. It is `Modal` and +`Overlay`-aware by default; when rendered as a child of either component, it +will automatically adjust its z-index to remain visible. + +If you still encounter z-index issues, try setting a custom `dropdownZIndex`. + Using the field as a standalone In the case that you require the multi select field as a standalone, you can do this. diff --git a/stories/form/form-select-histogram/form-select-histogram.mdx b/stories/form/form-select-histogram/form-select-histogram.mdx index 51434b6df..f7b480042 100644 --- a/stories/form/form-select-histogram/form-select-histogram.mdx +++ b/stories/form/form-select-histogram/form-select-histogram.mdx @@ -34,6 +34,14 @@ column props to span across the specified columns in grid layouts. +Z-index conflicts + +The dropdown uses z-index to display above elements. It is `Modal` and +`Overlay`-aware by default; when rendered as a child of either component, it +will automatically adjust its z-index to remain visible. + +If you still encounter z-index issues, try setting a custom `dropdownZIndex`. + Using the field as a standalone In the case that you require the select histogram field as a standalone, you can do this. diff --git a/stories/form/form-select/form-select.mdx b/stories/form/form-select/form-select.mdx index 7f528f10b..52ec40afc 100644 --- a/stories/form/form-select/form-select.mdx +++ b/stories/form/form-select/form-select.mdx @@ -53,6 +53,14 @@ column props to span across the specified columns in grid layouts. +Z-index conflicts + +The dropdown uses z-index to display above elements. It is `Modal` and +`Overlay`-aware by default; when rendered as a child of either component, it +will automatically adjust its z-index to remain visible. + +If you still encounter z-index issues, try setting a custom `dropdownZIndex`. + Using the field as a standalone In the case that you require the select field as a standalone, you can do this. From 1aa3ef2976816dabb11b97db2a86e9d6bcf1caf6 Mon Sep 17 00:00:00 2001 From: qroll Date: Mon, 16 Sep 2024 14:51:53 +0800 Subject: [PATCH 0436/1949] [FLOAT][RL] Add comment on usage of hooks --- src/overlay/use-floating-context.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/overlay/use-floating-context.tsx b/src/overlay/use-floating-context.tsx index 97049dd8c..c2e8a680f 100644 --- a/src/overlay/use-floating-context.tsx +++ b/src/overlay/use-floating-context.tsx @@ -10,6 +10,11 @@ interface OverlayContextChangeData { zIndex: number; } +/** + * Called by the component that renders modal or overlay content, and expects + * to have floating elements as children + * @param zIndex - the z-index of the main container + */ export const useFloatingParent = (zIndex: number) => { const tree = useFloatingTree(); @@ -41,6 +46,10 @@ export const useFloatingParent = (zIndex: number) => { }, [tree, zIndex]); }; +/** + * Called by the component that renders a floating element + * @returns parentZIndex - the z-index of the parent container, if present + */ export const useFloatingChild = () => { const [parentZIndex, setParentZIndex] = useState( undefined From 217d104f67bc924d2201c551a0df151477ad87c6 Mon Sep 17 00:00:00 2001 From: roll Date: Mon, 16 Sep 2024 20:22:55 +0800 Subject: [PATCH 0437/1949] [FLOAT][RL] Remove unused defaultZIndex prop --- src/shared/dropdown-wrapper/element-with-dropdown.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/shared/dropdown-wrapper/element-with-dropdown.tsx b/src/shared/dropdown-wrapper/element-with-dropdown.tsx index d9a7ef551..f14362119 100644 --- a/src/shared/dropdown-wrapper/element-with-dropdown.tsx +++ b/src/shared/dropdown-wrapper/element-with-dropdown.tsx @@ -34,7 +34,6 @@ interface ElementWithDropdownProps { renderElement: () => React.ReactNode; renderDropdown: (props: DropdownRenderProps) => React.ReactNode; customZIndex?: number | undefined; - defaultZIndex?: number | undefined; clickToToggle?: boolean | undefined; /* the distance between the reference element and the dropdown */ offset?: number | undefined; @@ -53,6 +52,8 @@ const getFloatingPlacement = (alignment: DropdownAlignmentType): Placement => { } }; +const DEFAULT_Z_INDEX = 50; + export const ElementWithDropdown = ({ enabled, isOpen, @@ -62,7 +63,6 @@ export const ElementWithDropdown = ({ renderElement, renderDropdown, customZIndex, - defaultZIndex = 50, clickToToggle = false, offset: dropdownOffset = 0, alignment = "left", @@ -157,7 +157,7 @@ export const ElementWithDropdown = ({ zIndex: customZIndex ?? parentZIndex ?? - defaultZIndex, + DEFAULT_Z_INDEX, }} {...getFloatingProps()} > From 3112ef21268fdc51fc3c4dd8e589dfa3fbfa9c74 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 17 Sep 2024 01:28:06 +0800 Subject: [PATCH 0438/1949] [BOOKINGSG-6120][JH] change variant names from card/dropdown to dial/combobox --- .../card-picker/card-picker.tsx | 208 ----------- .../dropdown-picker/dropdown-picker.tsx | 341 ------------------ src/time-range-picker/time-range-picker.tsx | 14 +- src/time-range-picker/types.ts | 6 +- .../form-time-range-picker.mdx | 6 +- .../form-time-range-picker.stories.tsx | 16 +- .../form-time-range-picker/props-table.tsx | 8 +- 7 files changed, 25 insertions(+), 574 deletions(-) delete mode 100644 src/time-range-picker/card-picker/card-picker.tsx delete mode 100644 src/time-range-picker/dropdown-picker/dropdown-picker.tsx diff --git a/src/time-range-picker/card-picker/card-picker.tsx b/src/time-range-picker/card-picker/card-picker.tsx deleted file mode 100644 index 08c0da27d..000000000 --- a/src/time-range-picker/card-picker/card-picker.tsx +++ /dev/null @@ -1,208 +0,0 @@ -import { useEffect, useRef, useState } from "react"; -import { useEventListener } from "../../util/use-event-listener"; -import { RangeInputInnerContainer } from "../../shared/range-input-inner-container"; -import { SelectorInput, TimeContainer, Wrapper } from "../common.styles"; -import { TimeHelper } from "../../util/time-helper"; -import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; -import { TimepickerDropdown } from "../../shared/timepicker-dropdown/timepicker-dropdown"; - -export const CardPicker = ({ - id, - disabled = false, - error, - value, - format = "24hr", - readOnly, - onChange, - onFocus, - onBlur, - ...otherProps -}: TimeRangePickerProps) => { - // ============================================================================= - // CONST, STATE, REF - // ============================================================================= - const [showStartTimeSelector, setShowStartTimeSelector] = - useState(false); - const [showEndTimeSelector, setShowEndTimeSelector] = - useState(false); - const [startTimeVal, setStartTimeVal] = useState(""); - const [endTimeVal, setEndTimeVal] = useState(""); - - const nodeRef = useRef(); - - // ============================================================================= - // EFFECTS - // ============================================================================= - useEffect(() => { - if (value) { - setStartTimeVal(value.start); - setEndTimeVal(value.end); - } - }, []); - - useEventListener("mousedown", handleMouseDownEvent, "document"); - useEventListener("keyup", handleKeyUpEvent, "document"); - - // ============================================================================= - // EVENT HANDLERS - // ============================================================================= - const handleStartTimeFocus = () => { - if (!disabled && !readOnly && !showStartTimeSelector) { - setShowEndTimeSelector(false); - setShowStartTimeSelector(true); - runOnFocusHandler(); - } - }; - - const handleEndTimeFocus = () => { - if (!disabled && !readOnly && !showEndTimeSelector) { - setShowStartTimeSelector(false); - setShowEndTimeSelector(true); - runOnFocusHandler(); - } - }; - - function handleMouseDownEvent(event: MouseEvent) { - if (!disabled) { - runOutsideFocusHandler(event); - } - } - - function handleKeyUpEvent(event: KeyboardEvent) { - switch (event.code) { - case "Tab": - runOutsideFocusHandler(event); - break; - default: - break; - } - } - - const handleSelectionDropdownCancel = () => { - runOnBlurHandler(); - }; - - const handleStartTime = (value: string) => { - setShowStartTimeSelector(false); - setShowEndTimeSelector(true); - setStartTimeVal(value); - - const timeValue: TimeRangePickerValue = { - start: value, - end: endTimeVal, - }; - - onChange && onChange(timeValue); - }; - - const handleEndTime = (value: string) => { - setShowEndTimeSelector(false); - setEndTimeVal(value); - - const timeValue: TimeRangePickerValue = { - start: startTimeVal, - end: value, - }; - - onChange && onChange(timeValue); - - if (startTimeVal == "") { - setShowStartTimeSelector(true); - } else { - onBlur && onBlur(); - } - }; - - // ============================================================================= - // HELPER FUNCTIONS - // ============================================================================= - const runOnFocusHandler = () => { - if (!showStartTimeSelector && !showEndTimeSelector) { - onFocus && onFocus(); - } - }; - - const runOnBlurHandler = () => { - setShowStartTimeSelector(false); - setShowEndTimeSelector(false); - onBlur && onBlur(); - }; - - const runOutsideFocusHandler = (event: MouseEvent | KeyboardEvent) => { - if (nodeRef && !nodeRef.current.contains(event.target as any)) { - if (showEndTimeSelector || showStartTimeSelector) { - runOnBlurHandler(); - } - } - }; - - return ( - - - - {/* From */} - - {/* To */} - - - - - - - ); -}; diff --git a/src/time-range-picker/dropdown-picker/dropdown-picker.tsx b/src/time-range-picker/dropdown-picker/dropdown-picker.tsx deleted file mode 100644 index f280cde9a..000000000 --- a/src/time-range-picker/dropdown-picker/dropdown-picker.tsx +++ /dev/null @@ -1,341 +0,0 @@ -import { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { SelectorInput, TimeContainer, Wrapper } from "../common.styles"; -import { DropdownList } from "../../shared/dropdown-list-v2/dropdown-list"; -import { DropdownListState } from "../../shared/dropdown-list-v2"; -import { ElementWithDropdown } from "../../shared/dropdown-wrapper"; -import { ErrorMessage } from "../../form/form-label.style"; -import { RangeInputInnerContainer } from "../../shared/range-input-inner-container"; -import { TimeHelper } from "../../util/time-helper"; -import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; -import { ClearContainer, ClearIcon } from "../../input/input.style"; - -type TimeRangeInputType = "start" | "end"; - -export const DropdownPicker = ({ - id, - disabled = false, - error, - value, - format = "12hr", - readOnly, - onChange, - onFocus, - onBlur, - alignment = "left", - dropdownZIndex, - startLimit, - endLimit, - interval = 15, - ...otherProps -}: TimeRangePickerProps) => { - // ============================================================================= - // CONST, STATE, REF - // ============================================================================= - const [activeTimeSelector, setActiveTimeSelector] = - useState(null); - const [startTimeVal, setStartTimeVal] = useState(""); - const [endTimeVal, setEndTimeVal] = useState(""); - const [initialStartTimeVal, setInitialStartTimeVal] = useState(""); - const [initialEndTimeVal, setInitialEndTimeVal] = useState(""); - const [validationError, setValidationError] = useState(""); - - const nodeRef = useRef(); - const startInputRef = useRef(); - const endInputRef = useRef(); - - const startOptions = useMemo( - () => - TimeHelper.generateTimings(interval, format, startLimit, endLimit), - [interval, format, startLimit, endLimit] - ); - const endOptions = useMemo( - () => - TimeHelper.generateTimings( - interval, - format, - initialStartTimeVal || startLimit, - endLimit - ), - [initialStartTimeVal, interval, format, startLimit, endLimit] - ); - - // ========================================================================= - // EFFECTS - // ========================================================================= - const parseInput = useCallback( - (input: string): string | undefined => { - return TimeHelper.parseInput(input, format); - }, - [format] - ); - - useEffect(() => { - if (value) { - const start = parseInput(value.start); - const end = parseInput(value.end); - - setStartTimeVal(start); - setEndTimeVal(end); - setInitialStartTimeVal(start); - setInitialEndTimeVal(end); - } - }, [value, parseInput]); - - // Validation - useEffect(() => { - const start = parseInput(startTimeVal); - const end = parseInput(endTimeVal); - - if (start === undefined) { - setValidationError("Invalid start time"); - } else if (end === undefined) { - setValidationError("Invalid end time"); - } else if ( - start !== "" && - end !== "" && - TimeHelper.to24Hour(end) < TimeHelper.to24Hour(start) - ) { - setValidationError("End time must be after start time"); - } else { - setValidationError(""); - } - }, [startTimeVal, endTimeVal, parseInput]); - - // ============================================================================= - // EVENT HANDLERS - // ============================================================================= - const handleInputFocus = (selector: TimeRangeInputType) => { - if (!disabled && !readOnly && !activeTimeSelector) { - setActiveTimeSelector(selector); - onFocus && onFocus(); - } - }; - - const handleInputClick = (selector: TimeRangeInputType) => { - if (!disabled && !readOnly) { - setActiveTimeSelector(selector); - (selector === "start" - ? startInputRef - : endInputRef - ).current.select(); - } - }; - - function handleKeyDownEvent(event: React.KeyboardEvent) { - switch (event.code) { - case "Enter": - if (activeTimeSelector === "start") { - handleStartTime(parseInput(startTimeVal)); - } else if (activeTimeSelector === "end") { - handleEndTime(parseInput(endTimeVal)); - endInputRef.current.blur(); - } - break; - default: - break; - } - } - - const handleStartTime = (input: string, goToNextInput = true) => { - const value = input == undefined ? initialStartTimeVal : input; - - setStartTimeVal(value); - - // If start time is after end time, clear end time - const isInvalidRange = value > endTimeVal; - if (isInvalidRange && goToNextInput) setEndTimeVal(""); - - const timeValue: TimeRangePickerValue = { - start: value, - end: isInvalidRange ? "" : endTimeVal, - }; - - if (value !== initialStartTimeVal) onChange && onChange(timeValue); - - if (goToNextInput) { - setActiveTimeSelector("end"); - endInputRef.current.select(); - } else { - setActiveTimeSelector(null); - onBlur && onBlur(); - } - - setInitialStartTimeVal(value); - }; - - const handleEndTime = (input: string) => { - const value = input == undefined ? initialEndTimeVal : input; - - setEndTimeVal(value); - - const timeValue: TimeRangePickerValue = { - start: startTimeVal, - end: value, - }; - - if (value !== initialEndTimeVal) onChange && onChange(timeValue); - - setActiveTimeSelector(null); - onBlur && onBlur(); - - setInitialEndTimeVal(value); - }; - - const handleClear = (event: React.MouseEvent) => { - event.stopPropagation(); - setStartTimeVal(""); - setEndTimeVal(""); - setInitialStartTimeVal(""); - setInitialEndTimeVal(""); - - const timeValue: TimeRangePickerValue = { - start: "", - end: "", - }; - - onChange && onChange(timeValue); - setActiveTimeSelector(null); - }; - - const handleOnBlur = () => { - if (activeTimeSelector === "start") { - handleStartTime(parseInput(startTimeVal), false); - } else if (activeTimeSelector === "end") { - handleEndTime(parseInput(endTimeVal)); - } - }; - - // ============================================================================= - // RENDER FUNCTIONS - // ============================================================================= - const renderClearButton = () => { - if ( - !readOnly && - !disabled && - (startTimeVal?.length > 0 || endTimeVal?.length > 0) - ) { - return ( - - - - ); - } - }; - - const renderDropdown = () => { - if (activeTimeSelector === "start") { - return ( - - ); - } else if (activeTimeSelector === "end") { - return ( - - ); - } - }; - - const renderElement = () => ( - - - {/* From */} - handleInputFocus("start")} - placeholder={ - activeTimeSelector === "start" ? "hh:mm" : "From" - } - onChange={(e) => setStartTimeVal(e.target.value)} - value={startTimeVal} - disabled={disabled} - readOnly={readOnly} - data-testid={ - otherProps["data-testid"] - ? `${otherProps["data-testid"]}-timepicker-selector` - : "timepicker-selector" - } - onClick={() => handleInputClick("start")} - onKeyDown={handleKeyDownEvent} - autoComplete="off" - /> - {/* To */} - handleInputFocus("end")} - placeholder={activeTimeSelector === "end" ? "hh:mm" : "To"} - onChange={(e) => setEndTimeVal(e.target.value)} - value={endTimeVal} - disabled={disabled} - readOnly={readOnly} - data-testid={ - otherProps["data-testid"] - ? `${otherProps["data-testid"]}-timepicker-selector` - : "timepicker-selector" - } - onClick={() => handleInputClick("end")} - onKeyDown={handleKeyDownEvent} - autoComplete="off" - /> - - {renderClearButton()} - - ); - - const renderError = () => - // Only display internal error message if user does not provide one - !error && - validationError && ( - - {validationError} - - ); - - return ( - - - - - {renderError()} - - ); -}; diff --git a/src/time-range-picker/time-range-picker.tsx b/src/time-range-picker/time-range-picker.tsx index d99464c9c..292888eba 100644 --- a/src/time-range-picker/time-range-picker.tsx +++ b/src/time-range-picker/time-range-picker.tsx @@ -1,14 +1,14 @@ -import { CardPicker } from "./card-picker/card-picker"; -import { DropdownPicker } from "./dropdown-picker/dropdown-picker"; +import { DialPicker } from "./dial-picker/dial-picker"; +import { ComboboxPicker } from "./combobox-picker/combobox-picker"; import { TimeRangePickerProps } from "./types"; export const TimeRangePicker = ({ - variant = "card", + variant = "dial", ...otherProps }: TimeRangePickerProps): JSX.Element => { - if (variant === "card") { - return ; - } else if (variant === "dropdown") { - return ; + if (variant === "dial") { + return ; + } else if (variant === "combobox") { + return ; } }; diff --git a/src/time-range-picker/types.ts b/src/time-range-picker/types.ts index 50427be90..37b003837 100644 --- a/src/time-range-picker/types.ts +++ b/src/time-range-picker/types.ts @@ -1,7 +1,7 @@ import { DropdownAlignmentType } from "../shared/dropdown-wrapper"; export type TimeRangePickerFormat = "12hr" | "24hr"; -export type TimeRangePickerVariant = "card" | "dropdown"; +export type TimeRangePickerVariant = "dial" | "combobox"; export interface TimeRangePickerValue { start: string; @@ -24,7 +24,7 @@ export interface TimeRangePickerProps { * * 12 hour uses "hh:mmA" e.g. `{ start: "01:00PM", end: "02:00PM" }` * - * Note: dropdown variant uses "h:mma" instead. + * Note: combobox variant uses "h:mma" instead. */ value?: TimeRangePickerValue | undefined; /** @@ -36,7 +36,7 @@ export interface TimeRangePickerProps { error?: boolean | undefined; /** - * Dropdown variant-specific attributes + * Combobox variant specific attributes */ /** Specifies the variant for the time range picker */ variant?: TimeRangePickerVariant | undefined; diff --git a/stories/form/form-time-range-picker/form-time-range-picker.mdx b/stories/form/form-time-range-picker/form-time-range-picker.mdx index 0eba91571..d47b62343 100644 --- a/stories/form/form-time-range-picker/form-time-range-picker.mdx +++ b/stories/form/form-time-range-picker/form-time-range-picker.mdx @@ -38,11 +38,11 @@ import { TimeRangePicker } from "@lifesg/react-design-system/TimeRangePicker"; -Dropdown variant +Combobox variant -You can also use an `dropdown` variant that allows users to either select a time from a dropdown list of options, or manually type in a time which is automatically parsed and converted into a valid time format (h:mma for `12hr`, hh:mm for `24hr`). +You can also use an `combobox` variant that allows users to either select a time from a dropdown list of options, or manually type in a time which is automatically parsed and converted into a valid time format (h:mma for `12hr`, hh:mm for `24hr`). - + Component API diff --git a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx index 00ed76d47..4a77678f5 100644 --- a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx +++ b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx @@ -116,12 +116,12 @@ export const StandaloneUsage: StoryObj = { }, }; -export const DropdownVariant: StoryObj = { +export const ComboboxVariant: StoryObj = { render: () => { const emptyTime = { start: "", end: "" }; const [time1, setTime1] = useState(emptyTime); const [time2, setTime2] = useState(emptyTime); - const [time3, setTime3] = useState(emptyTime); + const [time3, setTime3] = useState({ start: "00:00", end: "" }); const [time4, setTime4] = useState(emptyTime); const [time5, setTime5] = useState({ start: "2:00pm", end: "1:00pm" }); @@ -129,30 +129,30 @@ export const DropdownVariant: StoryObj = { setTime1(value)} - variant="dropdown" + variant="combobox" /> setTime2(value)} - variant="dropdown" + variant="combobox" interval={60} /> setTime3(value)} - variant="dropdown" + variant="combobox" format="24hr" /> setTime4(value)} - variant="dropdown" + variant="combobox" startLimit="10:00am" endLimit="2:00pm" /> @@ -160,7 +160,7 @@ export const DropdownVariant: StoryObj = { label="Automatic time range error validation" value={time5} onChange={(value) => setTime5(value)} - variant="dropdown" + variant="combobox" /> diff --git a/stories/form/form-time-range-picker/props-table.tsx b/stories/form/form-time-range-picker/props-table.tsx index 7377b2b3a..de95e60ce 100644 --- a/stories/form/form-time-range-picker/props-table.tsx +++ b/stories/form/form-time-range-picker/props-table.tsx @@ -8,7 +8,7 @@ const TIME_FORMAT = (
    12 hour uses {quote("hh:mmA")} e.g. {code(quote("01:00PM"))}
    - Note: dropdown variant uses {quote("h:mma")} instead + Note: combobox variant uses {quote("h:mma")} instead ); @@ -88,13 +88,13 @@ const DATA: ApiTableSectionProps[] = [ ], }, { - name: "Dropdown variant specific props", + name: "Combobox variant specific props", attributes: [ { name: "variant", description: "Specifies the variant for the component", - propTypes: [`"card", "dropdown"`], - defaultValue: `"card"`, + propTypes: [`"dial"`, `"combobox"`], + defaultValue: `"dial"`, }, { name: "interval", From b84c63e8af70feffa421d02eac84718a0ae492c1 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 17 Sep 2024 01:29:17 +0800 Subject: [PATCH 0439/1949] [BOOKINGSG-6120][JH] minor height adjustment for topScrollItem offset --- src/shared/dropdown-list-v2/dropdown-list.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/dropdown-list-v2/dropdown-list.tsx b/src/shared/dropdown-list-v2/dropdown-list.tsx index 4eb14256f..0777cbfa5 100644 --- a/src/shared/dropdown-list-v2/dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/dropdown-list.tsx @@ -214,7 +214,7 @@ export const DropdownList = ({ const focusedItem = listItemRefs.current[index]; // Align the item to top of scrollable container if (nodeRef.current) { - nodeRef.current.scrollTop = focusedItem?.offsetTop; + nodeRef.current.scrollTop = focusedItem?.offsetTop - 8; } setFocusedIndex(index); }, 0); From 8f116e563eaebb993d4faa0382a5cf78c9c3fa08 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 17 Sep 2024 01:32:07 +0800 Subject: [PATCH 0440/1949] [BOOKINGSG-6120][JH] add time helper to find cloest floored time in array, 12-6 oclock to default to pm for parseInput --- src/util/time-helper.ts | 81 +++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 24 deletions(-) diff --git a/src/util/time-helper.ts b/src/util/time-helper.ts index 2cfd3a1fd..b3b767f84 100644 --- a/src/util/time-helper.ts +++ b/src/util/time-helper.ts @@ -196,7 +196,7 @@ export namespace TimeHelper { // Converts h:mma/hh:mma to 24hr (eg. 13:00) export const to24Hour = (time: string) => { - if (time.includes("am") || time.includes("pm")) { + if (time?.includes("am") || time?.includes("pm")) { const [t, p] = time.split(/(am|pm)/i); const [hr, m] = t.split(":").map(Number); let h = hr; @@ -220,29 +220,12 @@ export namespace TimeHelper { let currentMinutes = 0; let endMinutes = 1440 - interval; // Do not include next day's 12am - const convertToMinutes = (time: string) => { - const [startHourMin, ampm] = time.toLowerCase().split(/(am|pm)/); - const [startHoursRaw, startMinutes] = startHourMin - .split(":") - .map(Number); - let startHours = startHoursRaw; - - if (ampm === "pm" && startHours !== 12) { - startHours += 12; // Convert PM hours to 24-hour format - } - if (ampm === "am" && startHours === 12) { - startHours = 0; // Convert 12am to 0 hours - } - - return startHours * 60 + startMinutes; - }; - // Convert startTime (h:mma) to minutes if (startTime) { - currentMinutes = convertToMinutes(startTime); + currentMinutes = timeToMinutes(startTime); } if (endTime) { - endMinutes = convertToMinutes(endTime); + endMinutes = timeToMinutes(endTime); } while (currentMinutes <= endMinutes) { @@ -275,9 +258,9 @@ export namespace TimeHelper { // Return undefined = invalid field, "" = empty field, else returns h:mma export const parseInput = ( input: string, - format: TimeFormat = "12hr" + format: TimeFormat = "12hr" // Returned format ): string | undefined => { - if (input === "") return input; + if (input === "" || input === undefined) return input; const sanitizedInput = input.trim().toLowerCase(); const timeRegex = /^(?:(\d{1,2})([:.])?(\d{2})?)?(a|p|am|pm)?$/; @@ -290,7 +273,7 @@ export namespace TimeHelper { let period = match[4]; // Ensure hours/mins are valid - if (hours > 24 || minutes > 59) return; + if (match[1] === undefined || hours > 24 || minutes > 59) return; // Convert single-character periods to full am/pm if (period === "a") { @@ -323,7 +306,11 @@ export namespace TimeHelper { hours -= 12; } } else { - period = hours < 12 || hours === 24 ? "am" : "pm"; + period = + // NOTE: 12 or 1-6 will default to pm for convenience + hours === 0 || hours === 24 || (hours > 6 && hours < 12) + ? "am" + : "pm"; hours = hours % 12 || 12; } @@ -334,6 +321,52 @@ export namespace TimeHelper { return formattedTime; }; + + export const findClosestFlooredTime = ( + inputTime: string, + timeArray: string[] // Should already be sorted in ascending order + ): string => { + if (!inputTime) return inputTime; + const flooredInputMinutes = timeToMinutes(inputTime); + + let closestTime = ""; + let minDifference = Infinity; + + for (const time of timeArray) { + const timeInMinutes = timeToMinutes(time); + const difference = timeInMinutes - flooredInputMinutes; + + // If the difference is negative or zero, update the closest time + if (difference <= 0 && Math.abs(difference) < minDifference) { + minDifference = Math.abs(difference); + closestTime = time; + } + // If the difference becomes positive, we've passed the closest time + else if (difference > 0) { + break; + } + } + + return closestTime; + }; + + // Accepts both 12hr and 24hr formats + export const timeToMinutes = (time: string) => { + const [startHourMin, ampm] = time.toLowerCase().split(/(am|pm)/); + const [startHoursRaw, startMinutes] = startHourMin + .split(":") + .map(Number); + let startHours = startHoursRaw; + + if (ampm === "pm" && startHours !== 12) { + startHours += 12; // Convert PM hours to 24-hour format + } + if (ampm === "am" && startHours === 12) { + startHours = 0; // Convert 12am to 0 hours + } + + return startHours * 60 + startMinutes; + }; } // ============================================================================= From 3e5bef8b4c667ef4a1eb6e6ee5e76038e243e411 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 17 Sep 2024 01:39:01 +0800 Subject: [PATCH 0441/1949] [BOOKINGSG-6120][JH] separate components for combobox/dial (default) variants + combobox changes: - fix styling for clear container - hide dropdown during error - use nearest floored time in options array if not found for topScrollItem & end options - fix invalid inputs not being auto parsed when clicking a different input - lots of refactoring --- .../combobox-picker/combobox-picker.tsx | 363 ++++++++++++++++++ .../dial-picker/dial-picker.tsx | 208 ++++++++++ 2 files changed, 571 insertions(+) create mode 100644 src/time-range-picker/combobox-picker/combobox-picker.tsx create mode 100644 src/time-range-picker/dial-picker/dial-picker.tsx diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx new file mode 100644 index 000000000..548e2ccdd --- /dev/null +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -0,0 +1,363 @@ +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { ClearIcon } from "../../input/input.style"; +import { ClearIconContainer } from "../../input-range-select/input-range-select.style"; +import { DropdownList } from "../../shared/dropdown-list-v2/dropdown-list"; +import { DropdownListState } from "../../shared/dropdown-list-v2"; +import { ElementWithDropdown } from "../../shared/dropdown-wrapper"; +import { ErrorMessage } from "../../form/form-label.style"; +import { RangeInputInnerContainer } from "../../shared/range-input-inner-container"; +import { SelectorInput, TimeContainer, Wrapper } from "../common.styles"; +import { TimeHelper } from "../../util/time-helper"; +import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; + +type TimeRangeInputType = "start" | "end"; + +export const ComboboxPicker = ({ + id, + disabled = false, + error, + value, + format = "12hr", + readOnly, + onChange, + onFocus, + onBlur, + alignment = "left", + dropdownZIndex, + startLimit, + endLimit, + interval = 15, + ...otherProps +}: TimeRangePickerProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const [activeTimeSelector, setActiveTimeSelector] = + useState(null); + const [dropdownOpen, setDropdownOpen] = useState(false); + const [validationError, setValidationError] = useState(""); + + const [startTimeVal, setStartTimeVal] = useState(""); + const [endTimeVal, setEndTimeVal] = useState(""); + const [initialStartTimeVal, setInitialStartTimeVal] = useState(""); + const [initialEndTimeVal, setInitialEndTimeVal] = useState(""); + + const nodeRef = useRef(); + const startInputRef = useRef(); + const endInputRef = useRef(); + + const startOptions = useMemo( + () => + TimeHelper.generateTimings(interval, format, startLimit, endLimit), + [interval, format, startLimit, endLimit] + ); + const endOptions = useMemo(() => { + if (initialStartTimeVal === "") return startOptions; + + const flooredStartVal = TimeHelper.findClosestFlooredTime( + initialStartTimeVal, + startOptions + ); + return startOptions.slice(startOptions.indexOf(flooredStartVal)); + }, [startOptions, initialStartTimeVal]); + + // ========================================================================= + // EFFECTS + // ========================================================================= + const parseInput = useCallback( + (input: string): string | undefined => { + return TimeHelper.parseInput(input, format); + }, + [format] + ); + + useEffect(() => { + if (value) { + const start = parseInput(value.start); + const end = parseInput(value.end); + + setStartTimeVal(start); + setEndTimeVal(end); + setInitialStartTimeVal(start); + setInitialEndTimeVal(end); + } + }, [value, parseInput]); + + // Validation for keyboard input + useEffect(() => { + const start = parseInput(startTimeVal); + const end = parseInput(endTimeVal); + + if (start === undefined) { + setValidationError("Invalid start time"); + } else if (end === undefined) { + setValidationError("Invalid end time"); + } else if ( + start !== "" && + end !== "" && + TimeHelper.to24Hour(end) < TimeHelper.to24Hour(start) + ) { + setValidationError("End time must be after start time"); + } else { + setValidationError(""); + // Re-open dropdown if error was corrected + if ( + document.activeElement === startInputRef.current || + document.activeElement === endInputRef.current + ) { + setDropdownOpen(true); + } + return; + } + + // Hide dropdown so error message is visible + setDropdownOpen(false); + }, [startTimeVal, endTimeVal, parseInput]); + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + const handleInputFocus = (selector: TimeRangeInputType) => { + if (disabled || readOnly) return; + + // If input is already focused (start or end), no need to onFocus again + if (!activeTimeSelector) { + setActiveTimeSelector(selector); + setDropdownOpen(true); + onFocus && onFocus(); + } + }; + + const handleInputClick = (selector: TimeRangeInputType) => { + if (disabled || readOnly) return; + + setActiveTimeSelector(selector); + setDropdownOpen(true); + (selector === "start" ? startInputRef : endInputRef).current.select(); + }; + + function handleKeyDownEvent(event: React.KeyboardEvent) { + switch (event.code) { + case "Enter": + case "Tab": + if (activeTimeSelector === "start") { + handleStartTime(startTimeVal, event.code !== "Tab"); + } else if (activeTimeSelector === "end") { + handleEndTime(endTimeVal); + endInputRef.current.blur(); + } + break; + default: + break; + } + } + + const handleStartTime = (input: string, goToNextInput = true) => { + handleTimeChange(input, endTimeVal, goToNextInput); + }; + + const handleEndTime = (input: string) => { + handleTimeChange(startTimeVal, input, false, true); + }; + + const handleOnBlur = () => { + handleTimeChange(startTimeVal, endTimeVal); + }; + + const handleTimeChange = ( + startInput: string, + endInput: string, + goToNextInput?: boolean, // Used by tab behavior to not double skip + skipRangeCheck?: boolean // Used by handleEndTime to keep invalid end value + ) => { + const start = parseInput(startInput) ?? initialStartTimeVal; + const end = parseInput(endInput) ?? initialEndTimeVal; + + // If start time is after end time, clear end time + const isInvalidRange = + !skipRangeCheck && + TimeHelper.timeToMinutes(start) > TimeHelper.timeToMinutes(end); + setEndTimeVal(isInvalidRange ? "" : end); + setStartTimeVal(start); + + const timeValue: TimeRangePickerValue = { + start, + end: isInvalidRange ? "" : end, + }; + + // Trigger onChange if values have changed + if (start !== initialStartTimeVal || end !== initialEndTimeVal) { + onChange && onChange(timeValue); + } + + // Focus end if start field was just changed + if (goToNextInput) { + setActiveTimeSelector("end"); + endInputRef.current.select(); + } else { + setActiveTimeSelector(null); + onBlur && onBlur(); + } + + setInitialStartTimeVal(start); + setInitialEndTimeVal(end); + }; + + const handleClear = (event: React.MouseEvent) => { + event.stopPropagation(); + setStartTimeVal(""); + setEndTimeVal(""); + setInitialStartTimeVal(""); + setInitialEndTimeVal(""); + + const timeValue: TimeRangePickerValue = { + start: "", + end: "", + }; + + onChange && onChange(timeValue); + setActiveTimeSelector(null); + }; + + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= + const renderClearButton = () => { + if ( + !readOnly && + !disabled && + (startTimeVal?.length > 0 || endTimeVal?.length > 0) + ) { + return ( + + + + ); + } + }; + + const renderDropdown = () => { + if (!dropdownOpen) return; + + if (activeTimeSelector === "start") { + return ( + + ); + } else { + return ( + + ); + } + }; + + const renderElement = () => ( + + + {/* From */} + handleInputFocus("start")} + placeholder={ + activeTimeSelector === "start" ? "hh:mm" : "From" + } + onChange={(e) => setStartTimeVal(e.target.value)} + value={startTimeVal} + disabled={disabled} + readOnly={readOnly} + data-testid={ + otherProps["data-testid"] + ? `${otherProps["data-testid"]}-timepicker-selector` + : "timepicker-selector" + } + onClick={() => handleInputClick("start")} + onKeyDown={handleKeyDownEvent} + autoComplete="off" + /> + {/* To */} + handleInputFocus("end")} + placeholder={activeTimeSelector === "end" ? "hh:mm" : "To"} + onChange={(e) => setEndTimeVal(e.target.value)} + value={endTimeVal} + disabled={disabled} + readOnly={readOnly} + data-testid={ + otherProps["data-testid"] + ? `${otherProps["data-testid"]}-timepicker-selector` + : "timepicker-selector" + } + onClick={() => handleInputClick("end")} + onKeyDown={handleKeyDownEvent} + autoComplete="off" + /> + + {renderClearButton()} + + ); + + const renderError = () => + // Only display internal error message if user does not provide one + !error && + validationError && ( + + {validationError} + + ); + + return ( + + + + + {renderError()} + + ); +}; diff --git a/src/time-range-picker/dial-picker/dial-picker.tsx b/src/time-range-picker/dial-picker/dial-picker.tsx new file mode 100644 index 000000000..26ba37a6c --- /dev/null +++ b/src/time-range-picker/dial-picker/dial-picker.tsx @@ -0,0 +1,208 @@ +import { useEffect, useRef, useState } from "react"; +import { useEventListener } from "../../util/use-event-listener"; +import { RangeInputInnerContainer } from "../../shared/range-input-inner-container"; +import { SelectorInput, TimeContainer, Wrapper } from "../common.styles"; +import { TimeHelper } from "../../util/time-helper"; +import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; +import { TimepickerDropdown } from "../../shared/timepicker-dropdown/timepicker-dropdown"; + +export const DialPicker = ({ + id, + disabled = false, + error, + value, + format = "24hr", + readOnly, + onChange, + onFocus, + onBlur, + ...otherProps +}: TimeRangePickerProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const [showStartTimeSelector, setShowStartTimeSelector] = + useState(false); + const [showEndTimeSelector, setShowEndTimeSelector] = + useState(false); + const [startTimeVal, setStartTimeVal] = useState(""); + const [endTimeVal, setEndTimeVal] = useState(""); + + const nodeRef = useRef(); + + // ============================================================================= + // EFFECTS + // ============================================================================= + useEffect(() => { + if (value) { + setStartTimeVal(value.start); + setEndTimeVal(value.end); + } + }, []); + + useEventListener("mousedown", handleMouseDownEvent, "document"); + useEventListener("keyup", handleKeyUpEvent, "document"); + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + const handleStartTimeFocus = () => { + if (!disabled && !readOnly && !showStartTimeSelector) { + setShowEndTimeSelector(false); + setShowStartTimeSelector(true); + runOnFocusHandler(); + } + }; + + const handleEndTimeFocus = () => { + if (!disabled && !readOnly && !showEndTimeSelector) { + setShowStartTimeSelector(false); + setShowEndTimeSelector(true); + runOnFocusHandler(); + } + }; + + function handleMouseDownEvent(event: MouseEvent) { + if (!disabled) { + runOutsideFocusHandler(event); + } + } + + function handleKeyUpEvent(event: KeyboardEvent) { + switch (event.code) { + case "Tab": + runOutsideFocusHandler(event); + break; + default: + break; + } + } + + const handleSelectionDropdownCancel = () => { + runOnBlurHandler(); + }; + + const handleStartTime = (value: string) => { + setShowStartTimeSelector(false); + setShowEndTimeSelector(true); + setStartTimeVal(value); + + const timeValue: TimeRangePickerValue = { + start: value, + end: endTimeVal, + }; + + onChange && onChange(timeValue); + }; + + const handleEndTime = (value: string) => { + setShowEndTimeSelector(false); + setEndTimeVal(value); + + const timeValue: TimeRangePickerValue = { + start: startTimeVal, + end: value, + }; + + onChange && onChange(timeValue); + + if (startTimeVal == "") { + setShowStartTimeSelector(true); + } else { + onBlur && onBlur(); + } + }; + + // ============================================================================= + // HELPER FUNCTIONS + // ============================================================================= + const runOnFocusHandler = () => { + if (!showStartTimeSelector && !showEndTimeSelector) { + onFocus && onFocus(); + } + }; + + const runOnBlurHandler = () => { + setShowStartTimeSelector(false); + setShowEndTimeSelector(false); + onBlur && onBlur(); + }; + + const runOutsideFocusHandler = (event: MouseEvent | KeyboardEvent) => { + if (nodeRef && !nodeRef.current.contains(event.target as any)) { + if (showEndTimeSelector || showStartTimeSelector) { + runOnBlurHandler(); + } + } + }; + + return ( + + + + {/* From */} + + {/* To */} + + + + + + + ); +}; From 2c5498673c0056805e2d1255e926bf7723983622 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 17 Sep 2024 14:14:07 +0800 Subject: [PATCH 0442/1949] [BOOKINGSG-6120][JH] disable tab default behavior and refactor time change code --- .../combobox-picker/combobox-picker.tsx | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index 548e2ccdd..c97f2f5e3 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -11,6 +11,11 @@ import { TimeHelper } from "../../util/time-helper"; import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; type TimeRangeInputType = "start" | "end"; +interface TimeChangeOptions { + goToNextInput?: boolean | undefined; + skipRangeCheck?: boolean | undefined; + triggerOnBlur?: boolean | undefined; +} export const ComboboxPicker = ({ id, @@ -140,8 +145,9 @@ export const ComboboxPicker = ({ switch (event.code) { case "Enter": case "Tab": + event.preventDefault(); if (activeTimeSelector === "start") { - handleStartTime(startTimeVal, event.code !== "Tab"); + handleStartTime(startTimeVal); } else if (activeTimeSelector === "end") { handleEndTime(endTimeVal); endInputRef.current.blur(); @@ -152,23 +158,29 @@ export const ComboboxPicker = ({ } } - const handleStartTime = (input: string, goToNextInput = true) => { - handleTimeChange(input, endTimeVal, goToNextInput); + const handleStartTime = (input: string) => { + handleTimeChange(input, endTimeVal, { goToNextInput: true }); }; const handleEndTime = (input: string) => { - handleTimeChange(startTimeVal, input, false, true); + handleTimeChange(startTimeVal, input, { + skipRangeCheck: true, + triggerOnBlur: true, + }); }; const handleOnBlur = () => { - handleTimeChange(startTimeVal, endTimeVal); + handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true }); }; const handleTimeChange = ( startInput: string, endInput: string, - goToNextInput?: boolean, // Used by tab behavior to not double skip - skipRangeCheck?: boolean // Used by handleEndTime to keep invalid end value + { + goToNextInput, // Used by handleStart to move to end input automatically + skipRangeCheck, // Used by handleEnd to preserve invalid end value + triggerOnBlur, // Used by handleEnd/handleClear to trigger onBlur + }: TimeChangeOptions ) => { const start = parseInput(startInput) ?? initialStartTimeVal; const end = parseInput(endInput) ?? initialEndTimeVal; @@ -187,16 +199,17 @@ export const ComboboxPicker = ({ // Trigger onChange if values have changed if (start !== initialStartTimeVal || end !== initialEndTimeVal) { - onChange && onChange(timeValue); + onChange?.(timeValue); } - // Focus end if start field was just changed if (goToNextInput) { setActiveTimeSelector("end"); endInputRef.current.select(); - } else { + } + + if (triggerOnBlur) { setActiveTimeSelector(null); - onBlur && onBlur(); + onBlur?.(); } setInitialStartTimeVal(start); @@ -215,7 +228,7 @@ export const ComboboxPicker = ({ end: "", }; - onChange && onChange(timeValue); + onChange?.(timeValue); setActiveTimeSelector(null); }; From 13e92270e097a6dd4ece7c889acd4b9ee48d828b Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 17 Sep 2024 15:10:22 +0800 Subject: [PATCH 0443/1949] [BOOKINGSG-6120][JH] let start input go to next input only if start is valid --- src/time-range-picker/combobox-picker/combobox-picker.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index c97f2f5e3..bb9ec2b54 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -202,7 +202,8 @@ export const ComboboxPicker = ({ onChange?.(timeValue); } - if (goToNextInput) { + // Go to end input only if start is a valid time + if (goToNextInput && parseInput(startInput) !== undefined) { setActiveTimeSelector("end"); endInputRef.current.select(); } From 4c17b09d82aeab4e03ffe2c4d2dbf2f3e5b41e51 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 17 Sep 2024 15:14:05 +0800 Subject: [PATCH 0444/1949] [BOOKINGSG-6120][JH] force start input if end is empty --- .../combobox-picker/combobox-picker.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index bb9ec2b54..fad3dc6e4 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -125,7 +125,14 @@ export const ComboboxPicker = ({ const handleInputFocus = (selector: TimeRangeInputType) => { if (disabled || readOnly) return; - // If input is already focused (start or end), no need to onFocus again + // Force start input if both fields are empty + if (selector === "end" && startTimeVal === "" && endTimeVal === "") { + selector = "start"; + startInputRef.current.focus(); + return; + } + + // Only run onFocus if not already focused if (!activeTimeSelector) { setActiveTimeSelector(selector); setDropdownOpen(true); @@ -136,6 +143,11 @@ export const ComboboxPicker = ({ const handleInputClick = (selector: TimeRangeInputType) => { if (disabled || readOnly) return; + // Force start input if both fields are empty + if (selector === "end" && startTimeVal === "" && endTimeVal === "") { + selector = "start"; + } + setActiveTimeSelector(selector); setDropdownOpen(true); (selector === "start" ? startInputRef : endInputRef).current.select(); From 6455bd32987a4cccfcd9cc965f57e3a07b69dd54 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Thu, 19 Sep 2024 09:35:56 +0800 Subject: [PATCH 0445/1949] [CCUBE-1547][MAHI]Make naming convention more consistent and add export for breakpoint --- src/theme/breakpoint/theme-helper.ts | 4 ++-- src/theme/breakpoint/types.ts | 4 ++-- src/theme/types.ts | 6 ++++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/theme/breakpoint/theme-helper.ts b/src/theme/breakpoint/theme-helper.ts index 52c41daac..3eff7f70d 100644 --- a/src/theme/breakpoint/theme-helper.ts +++ b/src/theme/breakpoint/theme-helper.ts @@ -1,10 +1,10 @@ import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { BreakpointScheme, ThemeCollectionSpec } from "../types"; import { LifeSgBreakpointSet } from "./specs/lifesg-breakpoint-set"; -import { BreakPointCollectionsMap, BreakpointSet } from "./types"; +import { BreakpointCollectionsMap, BreakpointSet } from "./types"; const BreakpointSpec: ThemeCollectionSpec< - BreakPointCollectionsMap, + BreakpointCollectionsMap, BreakpointScheme > = { collections: { diff --git a/src/theme/breakpoint/types.ts b/src/theme/breakpoint/types.ts index 6f3135ad7..b86755962 100644 --- a/src/theme/breakpoint/types.ts +++ b/src/theme/breakpoint/types.ts @@ -38,8 +38,8 @@ export interface BreakpointSet { "xxl-margin": number; } -export type BreakPointCollectionsMap = { +export type BreakpointCollectionsMap = { [key in BreakpointScheme]: BreakpointSet; }; -export type BreakPointSetOptions = Partial; +export type BreakpointSetOptions = Partial; diff --git a/src/theme/types.ts b/src/theme/types.ts index 6c620249c..72f47793e 100644 --- a/src/theme/types.ts +++ b/src/theme/types.ts @@ -6,7 +6,7 @@ import { AnimationSetOptions } from "./animation/types"; import { BorderSetOptions } from "./border/types"; import { SpacingSetOptions } from "./spacing/types"; import { RadiusSetOptions } from "./radius/types"; -import { BreakPointSetOptions } from "./breakpoint/types"; +import { BreakpointSetOptions } from "./breakpoint/types"; export type { PrimitiveColourSet, @@ -29,6 +29,8 @@ export type { RadiusSet, RadiusSetOptions } from "./radius/types"; export type { SpacingSet, SpacingSetOptions } from "./spacing/types"; +export type { BreakpointSet, BreakpointSetOptions } from "./breakpoint/types"; + export type ColourScheme = | "lifesg" | "bookingsg" @@ -51,7 +53,7 @@ export interface ThemeSpecOptions { spacing?: SpacingSetOptions | undefined; border?: BorderSetOptions | undefined; radius?: RadiusSetOptions | undefined; - breakpoint?: BreakPointSetOptions | undefined; + breakpoint?: BreakpointSetOptions | undefined; typography?: TypographySetOptions | undefined; } From 35e05f32499ef85b4159cec90481cf198d98773e Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Thu, 19 Sep 2024 10:13:27 +0800 Subject: [PATCH 0446/1949] [CCUBE-1547][MAHI]Fix variable name for clarity --- src/theme/radius/theme-helper.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/theme/radius/theme-helper.ts b/src/theme/radius/theme-helper.ts index 47488599f..615fcb4ef 100644 --- a/src/theme/radius/theme-helper.ts +++ b/src/theme/radius/theme-helper.ts @@ -13,15 +13,15 @@ const RadiusSpec: ThemeCollectionSpec = { export const getRadius = (key: keyof RadiusSet) => { return (props: StyledComponentProps): string => { const theme = props.theme; - const spacingset: RadiusSet = getCollection( + const radiusset: RadiusSet = getCollection( RadiusSpec, theme.radiusScheme ); if (theme.overrides && theme.overrides.radius) { - return `${getValue(spacingset, key, theme.overrides.radius)}px`; + return `${getValue(radiusset, key, theme.overrides.radius)}px`; } else { - return `${spacingset[key]}px`; + return `${radiusset[key]}px`; } }; }; From 71cc3ba3a4acc24348a14cc0f9b0e505bd83fa17 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 19 Sep 2024 11:32:33 +0800 Subject: [PATCH 0447/1949] [BOOKINGSG-6120][JH] add toTimeString non exportable helper --- src/util/time-helper.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/util/time-helper.ts b/src/util/time-helper.ts index b3b767f84..82869e6aa 100644 --- a/src/util/time-helper.ts +++ b/src/util/time-helper.ts @@ -233,19 +233,15 @@ export namespace TimeHelper { const minutes = currentMinutes % 60; if (format === "12hr") { - const ampm = hours >= 12 ? "pm" : "am"; + const period = hours >= 12 ? "pm" : "am"; hours = hours % 12; hours = hours ? hours : 12; // Convert hour 0 to 12 - const timeString = `${hours}:${minutes - .toString() - .padStart(2, "0")}${ampm}`; + const timeString = toTimeString(hours, minutes, period); timings.push(timeString); } else { - const timeString = `${hours - .toString() - .padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`; + const timeString = toTimeString(hours, minutes); timings.push(timeString); } @@ -291,9 +287,7 @@ export namespace TimeHelper { } // Return time in 24-hour format (HH:mm) - return `${hours.toString().padStart(2, "0")}:${minutes - .toString() - .padStart(2, "0")}`; + return toTimeString(hours, minutes); } // Handle 24-hour times or AM/PM conversion @@ -315,9 +309,7 @@ export namespace TimeHelper { } // Format the time as h:mma - const formattedTime = `${hours}:${minutes - .toString() - .padStart(2, "0")}${period}`; + const formattedTime = toTimeString(hours, minutes, period); return formattedTime; }; @@ -431,3 +423,11 @@ const convertToPlain = (value: string, format: TimeFormat): TimeValuesPlain => { }; } }; + +const toTimeString = (hours: number, minutes: number, period?: string) => { + return period + ? `${hours}:${minutes.toString().padStart(2, "0")}${period}` + : `${hours.toString().padStart(2, "0")}:${minutes + .toString() + .padStart(2, "0")}`; +}; From 957fbb7065ae6e85eeda20114e27de75b73af124 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 19 Sep 2024 12:12:07 +0800 Subject: [PATCH 0448/1949] [BOOKINGSG-6120][JH] add padding to account for clear button space --- src/time-range-picker/combobox-picker/combobox-picker.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index fad3dc6e4..0f0651825 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -304,6 +304,7 @@ export const ComboboxPicker = ({ $disabled={disabled} $error={error || !!validationError} $readOnly={readOnly} + style={{ paddingRight: "2.75rem" }} > Date: Thu, 19 Sep 2024 12:44:30 +0800 Subject: [PATCH 0449/1949] [CCUBE-1547][MAHI]Move mediaquery into breakpoint and use px value for spacing set --- .../media-query-helper.ts | 2 +- src/theme/spacing/specs/lifesg-spacing-set.ts | 22 +++++++++---------- tests/theme/theme-media.spec.tsx | 3 +-- tests/theme/theme-spacing.spec.tsx | 2 +- 4 files changed, 14 insertions(+), 15 deletions(-) rename src/theme/{media-query => breakpoint}/media-query-helper.ts (95%) diff --git a/src/theme/media-query/media-query-helper.ts b/src/theme/breakpoint/media-query-helper.ts similarity index 95% rename from src/theme/media-query/media-query-helper.ts rename to src/theme/breakpoint/media-query-helper.ts index 8151620ae..81e13adb5 100644 --- a/src/theme/media-query/media-query-helper.ts +++ b/src/theme/breakpoint/media-query-helper.ts @@ -1,4 +1,4 @@ -import { BreakpointValues } from "../breakpoint/theme-helper"; +import { BreakpointValues } from "./theme-helper"; import { StyledComponentProps } from "../helpers"; // Typings for MedaiQuery diff --git a/src/theme/spacing/specs/lifesg-spacing-set.ts b/src/theme/spacing/specs/lifesg-spacing-set.ts index 6bf95cadd..7e2d3d3e7 100644 --- a/src/theme/spacing/specs/lifesg-spacing-set.ts +++ b/src/theme/spacing/specs/lifesg-spacing-set.ts @@ -2,17 +2,17 @@ import { SpacingSet } from "../types"; export const LifeSgSpacingSet: SpacingSet = { "spacing-0": 0, - "spacing-4": 0.25, - "spacing-8": 0.5, - "spacing-12": 0.75, - "spacing-16": 1, - "spacing-20": 1.25, - "spacing-24": 1.5, - "spacing-32": 2, - "spacing-40": 2.5, - "spacing-48": 3, - "spacing-64": 4, - "spacing-72": 4.5, + "spacing-4": 4, + "spacing-8": 8, + "spacing-12": 12, + "spacing-16": 16, + "spacing-20": 20, + "spacing-24": 24, + "spacing-32": 32, + "spacing-40": 40, + "spacing-48": 48, + "spacing-64": 64, + "spacing-72": 72, "layout-xs": 8, "layout-sm": 16, diff --git a/tests/theme/theme-media.spec.tsx b/tests/theme/theme-media.spec.tsx index 6d68b9949..06e3afac5 100644 --- a/tests/theme/theme-media.spec.tsx +++ b/tests/theme/theme-media.spec.tsx @@ -1,6 +1,5 @@ import styled, { ThemeProvider } from "styled-components"; -import { Breakpoint } from "../../src"; -import { MediaQuery } from "../../src/theme/media-query/media-query-helper"; +import { MediaQuery } from "../../src/theme/breakpoint/media-query-helper"; import { ThemeSpec } from "../../src/theme/types"; import { render } from "@testing-library/react"; import "jest-styled-components"; diff --git a/tests/theme/theme-spacing.spec.tsx b/tests/theme/theme-spacing.spec.tsx index 70255d49a..d668c4d2f 100644 --- a/tests/theme/theme-spacing.spec.tsx +++ b/tests/theme/theme-spacing.spec.tsx @@ -21,7 +21,7 @@ describe("Spacing Themeing Test", () => { breakpointScheme: "lifesg", }; - const marginValue = "1px"; + const marginValue = "16px"; const paddingValue = "32px"; const { container } = render( From 3f756cbd97372ea408bb136e2422fa8ad6e36cbc Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 19 Sep 2024 15:25:36 +0800 Subject: [PATCH 0450/1949] [V3][RL] Update examples for theme and colour tokens --- public/img/colour-tokens.png | Bin 0 -> 45105 bytes public/img/colour-tokens.svg | 32 ------------------ public/img/theme-token-mapping.png | Bin 0 -> 85191 bytes stories/theme/b-theme-introduction.mdx | 4 +++ stories/theme/c-theme-advanced.mdx | 4 +-- .../theme/colour/a-colour-introduction.mdx | 21 +----------- 6 files changed, 7 insertions(+), 54 deletions(-) create mode 100644 public/img/colour-tokens.png delete mode 100644 public/img/colour-tokens.svg create mode 100644 public/img/theme-token-mapping.png diff --git a/public/img/colour-tokens.png b/public/img/colour-tokens.png new file mode 100644 index 0000000000000000000000000000000000000000..ce99d37f75f13976f5a272fffc834e17fa8af90e GIT binary patch literal 45105 zcmeFY`6JX{^gnKwA{9l%w2?Nu6fsm(_9&8Nlr4MqEHgujqDaUVL$*{*k$o9bb_RpN z7(-$(7|Sfon3>O0ulM`={Rcije*EUneV%*nxsS8lbIyHbVRlnwuhd>HE-sPVw{BQ+ zaq;eOaq$@J5dcP<#CA5gxR6`7Z|L8B%Dv3m_hFa{UErWlYL(w61^I-Z+6~-yy=~8v zg}L>|JFW0cY5dK+MY#&fhuj;BLSyV3W=an)*NJPKeRpKD(x>~;reB~Q{G%a8U?EYY z`i;@=Uk-2dC6%K0+&B`Af02_(=4`V2Bi&Hi+7YO}Icnt9*g7aNB76Md6oO9NWWNL$ z`hS1_S0%7F>l9biGckvW1HSv@JS`7>@;^qG!X6G>dEOU%|CdPUg++DkMD+wxd!J@_ zB}oe{a5^|o^`O=P{5{+SfDr{dz8x-$P1g&`A|vBEv~XFGOrCp*dSXMgoEG|e81E}z^K<>IoC-Lu8*B<{k) z(wLv0=y#yRWeV;5PGjgPe1l>_y=Hm1xT4+}w1{$@TArGV7_BWAlNr&U%|0&y93>hwr^9@DJroBW!5?I90GPuaq_8U%1b;p5{{URM9&_l%WZ`1Toe zuKr%>jg7T>*9gr$z}H55kHWYl4X5t2;)gGZ-B(KEAzrTVvX6Lj*nqYBGcPxoOE`s! z@EKU%p0#{z%gP=2y-U_*cXP^X&sZ*>^&5JPzn@qT1Y{!w$VT~Byw+IF9tJlTSG?@* z*ZI8}taMd@?ND)a_NHWP7R?((wFfx+!`!06H5=4LNh#Gd|qPcT5)|9G1ySIo4$m2~&%F`Jpu zw^tki8shw_z((|n96uqo#n*U&o$Yr4h(=A`sJO6iTn^vjw#!xPscFF|?ppWlDJ=j4 zuD6mRSQYq#yT9oF`{l`v?(ho{-9p|8iavYx0c7_c0pvl!0J85XwSd6px9qM76)*0R zcM@OWje^~hSTb&MIq6t|Gr<7jv>51In?FJQ%yH?b}_A`vrqhbmhQa z#W4zgq81o-8cqh}E?ZbKa~<>oe zD4YV$=Zd9J@r*Rj%;*7rQ9!(gVgOHT52c#(5AWe8{x@%7_Z)Ri+BAP;6a$LoL;>)r z7kgwW(4odm*~LEjrJ0|??!x}N3(vfKiw6mq_yH19)&eBdQX9H0yO$~=5$K4$h?6-C zOnj{nPvcgI00^G^kKl7)!xl7vJ3eOHn}4D)lmystedDoZXstInVVb1)N(lHcR%Um! zkB^zO&+zs6{kFSkKX|Q0G|zicJ#zlDq4J}ktmfbvvhBHDc0vGlx{qMi-n@&dyi)(; z#6RI!?+y+DC^`5;+;{k6d!-gKh|SKxq*=x)3%%W&Cfn!D6Yjf z`2b-bC@=vt5EVs(|PUEARld5)&EjM6jEGE=n`YETkWs<5gJJeG^J+>jGsZl}s%|n;p z2N1K`OQ}5}yW-;F1&%efTI;quMWYR*mVWVFe@1_DViX}{7G-D@b?WCB`Ov!n9^6M` z>7To_VSrIEvKzMdRZA~@w}1DWlptO`^~%?}<@)f`n@Lm#1OKmGkmTZl z<^AwDjxw%4GFxf879M!zZQZAjD|?YI7$)H;GmB>*G+efU?J<&~Knh^3Sd?O5g!4Q@ zh!AK1NX_Vfq{hV!wt&f^?Y+K%(390i*>**HJVFS;crE>|fZqVZa zjvS)CEZcRzOKyU3vXfM^>VGx^Y6wVHkfR>yf0lbnJ@StsziX#$3XB7MIUojzgfil) z=-&knK`De`*7EIN;9UYLfdk3AnaHIO94Ch_;`rW9!YGB)FL3nV%nCRjO09~jt;&{l zI3xy4`)d#jQt+v^fY=)WHb0RsGgkB;d_Ryd%oJt0{Lh?j0Ol;USRn9KM$eJOg;B_G<1*}I*!`%hJo(cfObKOgcHKk;pc_Rc zW<#wod!tVlAYg}Q{zsbzgpLB6AM@A>nuIl_a$OuI)+%z#g#RbB9Kb>uCAhVIIh}(? zrXQLqOxm|_r(0-10l@0?bwHqr=N2WAkVE&j4+A98y~OALY=PE55lBJCq)qUjA=Ntq zte}4PwvbsH@$k~Av74OdfSNr8NLaXRMGracqk4P;r5$QfkCc46B&T~N6QviJZjxDfaMLnBJ{8UPL5;GsL8l+MYWOf%8gqikaDufPXb z_U`=vWbHo}ZmLJhozM{hyPNr!S`(Qo!D zKl-4Nxd;OAZUn?o7RQ!U(`!>F)gxP8?rnJW_YyF!!25beFg_+Hmh2lCW?|H_E6KC| zpL&z-{3n}ZfHU4pkXp=$MV@{JO$*?0u~qT>=gLxff#dkL3v=D#8Q$2JW|$h^ao=6F zjCyC74*cYCq|s~$Fhn0!QAbRS<*Y>bb`-e!X2n{s{8JO7!vI8{+`FwcW+Rt^H7+`xJIJMf$rKm9L6DtZY3?5X-bN4dpi0Q-B+ zK<)MPA7$MFgdY!p=clEs;$ZIzuJFcWL!{^nhQ(MfF%VyYzq7mG2|j@C_kZT|xSZZT zYTX|TAsK@f+uch5;M<}O=>w8aJa@L$V+(NbF7!LcewLlsYs|wHHKaeNoA+ew8dPfe zW)YvV2q^yGZV;wd3WOWtv094?!xCwST7%pb49hR?8e+ZM$EO7i5s62uxedF5=CB@H zK0GShIL2^dxwjiTO zLj+M9^uqA$o)Rz`SnT&JkL{?zHuXrogHBmMXkhUbFf9cIW=2n>n(wNP9M^mG@V{X| zg2^^=a$38vwus+_^`;0g-35U4>qeh<{cB{^bX+0d0>$;ei1E(Ptd29!0zWo*W&?MS zyjuX+46V}&W1zt`|BGrP`+p`+@B4{1(br!)MSNZf0P{e!kYnE-~C z{-{3fLQlLtMEU7|_S!?u|hH|^1Hb*RFjDZi`OU`*(TRrtns`XFxm{mSY( zTQQxyo$Hvwv=2qrFbNpa%1R{Z2cy!Dh37PT*MLdg&>T)Pe0#MThq)AiOPX>d;Is6`r=uw!H%i|-BMnmHOqlbY|sJ4I(&lF%H z2wMkBj}g}Ijk-O%Eux^&`L)-DQKjPadnrt{|3VEpvxfgv4~PAU5@Gdl>PyI3!?P-g zh-7{q@dF}?l!>kz$9vM1LPJ(37r);B{!;_%*jM~wpG0`iDgi~XQ{T*Jcs%%VIh<0h zSkki)Y-g8kWouiSY&_Mm!dR{+q7euOB*(wu1O7c6vXeB|EFXBa9NJ$4PxNhDt%Nq= zk-aMMoH6ew#Yy*UY$8H~Y&ojBQw-|U<&e~J)c5a$R8S1QBeKJZj;&Ej9IqY={LIX+ zSs_IduSnmX2=t);&J~QC;zE=fxC zNK&91^j(-PAs|O~vxz*8e#JVrg^uIs^spuub#Z8)dC34m(lRsM){j>0fa2KOHKP)i z8Oux}90bL!-8gwLwEgu_M(8}AQ0ren^7^z8wA1n!&|6{Dxj>Ijd#`(J2TPuyEL9Aw z$<%O=5m%0OqnXQkrO1eCbmh0Fj1#{gvrlLu8!e0bmpj?uV=S~;kJFPNh2QZF^IcJQ6*U!R>)mU3rM7C$E8g86v3ZOAD4RK)5J4-Dl&uPRMN zCFzwTX`WKGJw{!ur!aoK5({CCV;7w36^n2~9V-Eh+U84vVCDztRd>$v<{wnQcbjYh zsljg>gkD8J?bAo7#A7$pspFeO0&;SNnbegl9ih1Sl`soIt|G`fow7*y6;4PX*^V8U z(NH!?+$=jqWF6oHvgcT26bJg9obJd(ztCY%q7(5qIU8(r9u%>x%0|B7@+s&;j*N5rVM5b&O>{ar_&N1nP6kguIqX z&as0W7Jl<0+18OPRMaLL@1_52ALuy(al{C1WfZl-hO_f zlVQXhD=@U@qGpmbn0-Cp;&)NL)7o|U&Ww)|+{zbB3R>(+?`~Y&)Z9v`uC4}YHqj=U zwRM@cEK!wGb0tXgRS&jVlM^Hceu9*A@J2e!>FK@O9qN(NMK_+lU>Jr;HQT0}_D+qy zhBiAv7H5?%9ZUX=s2gs8hf&pA2Np|1u9Y7WqLe-H>O6nnRu$v*aXKvXmh^IVo_@ok zpgTHO#=bsiksrar6Pf~hGrogBYQ>M%xBO>aynjoU?s@TR61!X)%B_6$(5qiXuWoD% z1rpIpzB-|1YMc$s^*DII=k32W`s&{_RRZDTnVfp9uOHirtj?LV3JGBU(+v$&1WM?aKNetKVNhU|h4InYMaKwjIBfKIe=SDd*xxMG;{o#(9x}__QhUSWhOe zQg(Z^8h$k{w+3pC8u0*o`|xS_KI#Yo`zD6oaS18Gf*bu&Hjq|SU%NzNj};YZtgF)` zIFT~j#XyMEsyJT;qH4pJ=_8QZCl8+x`*T_sF(o!TJ(Xzo`mft5tHS2Fs;=FIuUyum zc?w!lj>Tq~7fR68J2Wba@tvT%W`u!iY!aa>1P+Tp1L`jo;BtQ4$5XS(}$IG3m)SYiZRlu}nEYM)Nm zk-R9cBW8>84h60n%ExvLwsXUmN~Z@4Zl14(61CIe%g$I1N8U`5lb?wx4zo4jdST2l z)L1~MKWzMPmC9}cYaip3jiGcSHpxi)FbnsgfpykU@?uFgIM&{ROIT2ZrlFi@{7QVu zD&dRG(t#J>#JT#MlCtlgNQWsq#2Lk~0ZqJ7oat0Q;=*Z=#vss3NQd+3j^lUGpVzl% z5892H$gDli(B~_C@4eDP$r|&t1T_03IU_)Xwpn&l zZ55HE*y~moEMvsGeue}g-yKj4wZ*TtH9Oz;$BvBSq+CeVJ4kHsl7TdTsz9e>OD^&1 z!grEa4R~!<5lss8lHGbtYYyqcx-J`Bgg~n-FvKJwlY$H_8JfsKCHUa zGB9)!8k~s(vYywx4ecs_Vd3*b-ZkMpiE*e;p6?`_?4&N^zSDF}SKK}PxTU=#uwfPB zTF3GlsDA}UCRoi4rAq6myno_}l#roIR( zR5|u-jbHw7;KkePE{WnRfn5k;!YHS*&2JcP)WMYK}*A>j^EHv zp?N`Ld4yW}EBD+mrZd*D0Y9nhC&hH>NR+wF9lM7U$aOsdNX90+6^3R-S$O1moo}|o z!sYQYlLD+tMbe&U8gH9Cwm-;XkyP%lwwdb-b>ULFdEB4fKKZnS7sh#R*7YRzxNK4V zIhTUK>KSO8(@$t0ZVzQootq+tWP&tLTrT8Bp-y}(2~2k|ls=wScsvY4xrk%&@$V?_ zNxV1^y79N`Z5`BLDKPQ}ux_&r#@h3m2A)WpO@3!BBfKJ(;h z?>i0yf@pMF`q9NJM5Ah#t86-yyioG-`)GuG>t3I45yzmYs|iHSl(YpEzi6}a-Jxc) z*-4zOT=NVRXSnco%JN+(Wu+qz$hTZCFw!z_vpJ-SSsS@^5OdtJV;IR|+^n=}@4J-A zn)I%4!F(b z*I@3r2gDB8RvXnAwt{Wm=+`DcevjaRNge{?oq_vj7xN$qlo8`sPqd^|_Qtyv`<6GT zM!-9+o94vV%?*K?Z|+C*yH&XL-R4Bmk`P#vv0c}l-*Yh_9oda4(%}l~Zn-wPBrR)k zCI5z7yvXJ30%Pe%gAP@FJe1_^J4l-c-_BF!Ota@>+pNf$ms|r75F{Zw>FQdA=8sY^ zg?T6L+8iyGN4dhyEL+~E%m=dN?SSVnIjlBtqn8xto%AJdrwd?#H|JO_)Axjc{J(-s zhi^%ivBZ=#mgyCl`M0`qkppIdUo$Z|aP@l-ZJh`^bj*?Or1CY0O3(;ZLgs68h#RuU zD<%#~a2E-<-1bccu6Z&4*8^_GtxBd=2q*r0`JSw0*n(IB7)HJ;woI=&kGiy@Q@eVT zwV%dPUn4vk&3}X7GR$Q+nTy1oK{6(ZtKL37Wy-cNq$dgn-lMz+kmU4#Nr$!K88OXs z{6_GM>TRAaxh8R(75n?2>ido<)?MhY9RkTZwwo=%6)+NY%GFU6GbwUL`+|NIbwI{3 z$(6Q8@E32FuxH*Q4~OT#J*lu`E;!2|!geP!H(kb|KZ`;*IG{O^#+h!7(eGPLLMYEv zrpTKtU`XnELsRalW zTW!xRK7#t6t@7B~J1L5yhtR48YIOKnTJw0w@2Nxr7F5HgE(}Ah+!IM5GE#cDyy}`I zTH9~XUy{lk4gxhvay`8jXW3i66hU`BA3Dk{V?60FuSa8$H1(QLqaV8Cz+vT@qhfB$iNGPE~EM&*2=0iK|mIxW~Y#*A?!n!Pa=0?LV^p1tr3!Ismx z5%U+3ov9)%8WvxheTy3d=6x|$&y!~7jBfFH^u^`Zy;?% zxsec11_b}xbU24T4TQBZpskj#1jN;ckqE~x{I}yyRw8#suogPY(!jj z&y)}7t#tXtr3obTV=Md3msOfCxO%Q9fb=GTU-ISpY8lwHV_k`Q{SB zyTOmlh6v(}canh5+s^bp?Dt0VQO+lmRUuc>VD)8cK*UgWmjE4f|^T_@Co5{bO&$m++4Nj>P7PZ9niHooN z{>J%^N^ZhkO2LDo&Zy~JdwZ$XWgAS7;LKuHR#sZ8t1qqeo2SEsB|)-IPt+HbUX|AT zXt@s*H57`Y!09p=U$x!|ImkW=HT1&g5E*Rw+{8s#9!c`-qU~NS)uno5+u-le!fgU? z@TWzW)@DKIz*XIYAKKKRoo!$GIXUFWl0RGPv$N7{Duj&CcJJq8sFo6+Wmj_toL=~r zAKkmP4wwCm4q7BE^SAYtpr59HJ0h1oy!lljYvta(O7QVEeJmlJwN}Xli!)uZ&NY5m zJSJQ)+-#X7urblPgpObnI27G+U)7ygHc~EmxI1_mXE+)HNhhOKXdR_=^PU+^0wbFr zlnY1J;XDMio{2`$;X-53#I^G~!k+FAn%4m{~BvW zR`7Ov{m7x*$t!w8*Wf639&nR2Bl78^4pqp`JfU@2SYa z>bH59ZY<2Q^US9mA!sJ{Wfe zv!7rfUD-FM(!9#+Pc|s(yq7L-YTp+UjQFg`h+0-5(a2~`)aLyXXf=|V5MdK)%Smwq zufV{xKBXQwCxxk%6Dm@yae0J(y(YisZ{?G5azyJFS)$&;6*RtDHhc8az-$dA%%Oa{ zH*Oz8*qSTDxiZB#!yenY{Rmib^HxJoedEm<THpDZ)+#r+i@+ z_MF$bBx1D5A6H^x@r5)99W;D?QU1V)D`K+2yg7(yME1u|X@bJ;vLCTPPmzPNhortP zRoi5-MvvQ|Up1S>SaF`xrOUspC+bUU6eryOkfd` z`G@RC)^U^e3z8wwWC{dU>dW0BPi+;|5Zo-`rHBm|w=kA41D)nTH>w2J>`eSwR#{Tn z`OO%a(h|5X%|3Uoy%$SiGG zD|jtGK7lE|)^SsD+D~`%Tugpz4%n+q|FfHwh5}XagVa@z0qUOuc!~qfTI|+uINMjt zf-rjJ$p|(?b6#81i+qu@!#(ady5gr^J8x5dOVF1PrY?Pzv>9?#q$OCJ{TikSoz!*b z9bA2UVCQ3(5vkc@4aStRIi-c=9)dZnF2dMt0eOPGrxHKVvX4E>WJ7ELA>=1{{ zBTg*TVS@k4VnZrL>-)^@vD^OIy!zN#RIycCj6jzZ#q%2(ZjUZ?+pKE+lV}oE&U8y3 z)YE3wYb_?~VAp%YM(OIB1%8XnVnnH(U!$WeZX<1Zww?`cBqJN0vF#wvIuYlmQxd+M z)m76|EFCk{%C13GG-Fi4iCv~BU*({1-N3;*-y9&}nXUke0r~^Bo_n2~slMcA-~6NL zNP_Xv`=QL-qTfIv$)fiXtC$|6yFo-9EjD%&61w0gyDaL@x_Y@I36w4*CQsQm@Nvhv z7XH{@A^*}18OU3q#9m!-wD>F`eIsYdO}JVh^^)2uygzZgzXLH>rT!%ccU_Oyr*FqA z5ATq-2-G#7=?LJATL^Z?Ls8~CIIA$Mf8V|I2;z-~pTzwM-zdjIHQDwctn<*!zKPC9 z*nHxB?3ZY7NJl*}(XNJ0{opy^g|72O6LjDT3lS4|*wXh>CA=+m?g|vyG$k(o7!CC! zcP<{xN0YV(4UhD|Xo{o_TT>)y4k4S`TEWf9RC5Qa+rh!XEiUu~l%A*|KR4Kk@5`y+ zdC$4UkXN^qS@-j_0*>E%Sm7`DsL0{*`DyP_p*C)=Q^sCTEU8DP zbcbP$Zc{0F_E4xXeb@uu}^mNAWjVSGOaqK1Cwb{I*{?NNZ4PDV2-v;G3Ekr0NAuYCsu5WG#ovB>$ZS zFb^!Xsypk}y^jvEnuJ`3=A1qyAB1C9>YU;P9-n$PYQ10{g3@L)D#>%#4TigkAho|oIWZnazC)a6sL$zpIiKh)X#8>OLMyucTSH&m+yo|DpdAg zH;~ry{ze9!DbIZ@Y5&b{aVrF$=$PC4brT&fd7U7^J}dC$J-dD~Im|w8-v!m9@QYcR zhqzHPw71&gzg80*eVdlTk1FK&pU9a5Piwe*imcQXzI!rxphx@S#fwwlK&;#YPEkBO zsb|HOy|~NHHLcWE$b}isXB_8L_ZH!PKA5mLu95sr{0hy_{F7BgH$PjlJnYGi>X?>WV^$wF`pVWF}PWnQQuUU+Bne*G6S59wRKOd>V zlu~yvlII$xRy~!*^2O>9Y0(vJIy+YKZgdr^`~G<^sIpxY>oI0%c9X53*$&fc%00xd zKQ%rk`PS*aB9_d`c7e#VH*em!Y^gZ8Y~6XU>P$Noj^krWiy_#_h_e*; zj|55{@7Xi>PfqmN7IVT{e6@#!H{9B;qsPk)ueCNIJwC0W;|d{u^qqKv6DSo_oo#2e zmZRRm;0xP>SdaAvsX#lg6ALhpQ!jLhgqs}LnEztd?HZ9|_`|Z4P*WSi{h9{?#?lAX zJ4b^rq2Qw=gFN!esmxe}5mBq*>qaPxWsCCkZAz(?1ljx>!b4%Lxr^84=4i3wo5ORLC-16`*DPsEUaB-1_4W3Cva_YBaWFqhgY#0ae?Y)nt9hzn%|ld)fTuaj zO=+MSPe~KFkp$iB$$5`)GOaAOl9%aCyjO!kcv!H<-YbcICN&9E*EdhH22Sv@+xc=X z^@FQ&1x7E`j?Ojk?Ic|tEh0w2>-8L9$GK6tyg6ssNxf`#F7n_F($NJr1JqLkns}02 zb{C!=B>mh|udKCpL$gIVb+yK;!VE9l&PHuDK%R716enJ zO?(h$840ePOZ%Llv_uV_IRCg~RQ{;hd24hEP%KmxSARSjh3m05Uz#v==m_<4(+q8_ zZ}xpSU)RyReRxsHp(aG7X7dY)r3q*6Q*ze5i$}&~i+FD4G_($Vt-B<Npr{QUEXYsh$~ic51;rZEM6JKU7MtZv zNF{Zk-A}@JU=(TRtvewTDKdw*`#^fAdQ7pDsUhLE1P#;8PO~xiT-ccrySIIR==FxK zazc1h=%6CK<%#i?Xdl4X8bHMOcx@aURXE?fEV!N z-odqkW6qNqmXa`n5+s3sjdjRTOabRIV~l zFTvSZ;k&g(d1LPTeG-a6N{wqj3%B(VSD{NR&SQ@iooSo%Sm;>xN54;tT3`_C||=@J0!?5nyqiTc~h{ciWgU{Gp4E&B_S zHmYN(etAfdE~V^2XD-iKEqao(a%6fly#Bg(bQ4thoasGXnm<-!gqEsge^HX~A6Sh` z17bdfL+A~?rArDqiRQd)Vs6ALq1YsI2)47eUO2kVB@hFtQP7rmN-~}gP4!T6@F;)8 zdRoV4dB`kyGVx5&WuP7Wm9fPj@5)cDHLP_OsB;kudWA@?KA3e1hhlZFA9gG-0Qy;u zy+OQ>mRk7!*m}ThMq>=Bpayi1r;ZBP$^pc`AZ>hsz^npDp{;MtCUG`Iv1MOG%`*dT1y0wpime@0il? za);XBNQTp1cG|fzd(Lk(-tlgm^xo)PC18UI6c43WR+%&Mke#$1jDeJ(iuW{S{D_CI z?)I2X!JUiC1z;7c2g6oT`gxB*@s73fhjj6ZNygz>O-~J83|Gs%{M`VJw$;s0oFMX} zxRd!;-h9_hniK6$Qh%8}WnH0i>1Mp1o0RV7pL6-nR0%l4l1!_8mG5oCu73agNABWP zolzjy5?qf2CxY3F3A-t<3D-R>U9&!pD$T3KIFj*T^Wo6G9_vnDACL5#tDIN1e#Fm{ z#_!Q8;4SwE{d&YIe0HfdsL)pb*xQ*L=Qp3LcCd7!%O-u=GqC0GQ2WyJ0%20#FqFwd=`6nNE=3g|`adl?v!PN=?p7*O1|pjyvkLEP^Q1 z#P@-UCiy9xHTd;#ITjqmiVEL9`6IIY!q=QM{H}@B=4aOTYlub;<6x`J<1DORWFHGV z*Ec#&UGg7WugA+Il;1?4Lyy%X!ar;muU0Sz@Lq$N=lAn#^t>gyppJ z_WAPKlMi{=cZ($sC_66`??uB!}aHFBen%&C2icQz4@a{FQ15GXlH;Ku+4M6PJ#9ST*FMi)gHE@40Qz_#@ zyQSp^4YK9PQ*9VX92U1P0NA$jMIf9($1?%n(0EONEDkj4kS=VtmLUE zDHOX;BMa3*3AODQIOa2rA;0YT(l$lE+uW|jb&531ESbZLotfHB>mhpT^Rra)$61^6 zOuc=yJNclPpOP@~CfeRo%~qz=K_nOCYVtcl7CLVJ=E+w!kG`8JsoKKaVSg`e%6O^~ z7!y9NOPxkSo$vpeKWbS1sO2)v3Mut6e~K9o6X7#6susWg4f&$w!D)lhZ-P>JO9rOd zDvHe6n)Pkxu!iyTD>P4!Cp%AqP!hv-%v>0bsn6P8_}TmPY03(Uw4}@5Sl7z7qJl}{ z%jZ|x{bE>=IGcJh`^pb0Erxy-5&9Y_TPeVoG|34lp)P3oItCXBO)7OMmPp{9E%`|=|)+f|C&yI{`-#zU=-uu{HIKJoFw{&?<9STE_mL&}Kp zB~49)w*Q|S3pfIsCSgseVw84&PfO`YT!d)AnDo6sbE^%To|R4DkWjF#P!Ik_3r2%>+K5Qp)U^!3bShek{tPDYje^ao|SLo*&OGy)t6`9(!=DkZD;;W7doe zxB0T>ovqPu9<~!4-G9A!eY(u7=WqWTJf1ePUn~l=?#}Y-gk;>7772)9E$c2{{`=;4 z&5n*l`*uACq%&EihbSk<6|c|!9y>@@^_46ZJr6YG+EgDiojJPi$c0-bA1;4~cBh^t z$};9P36CSI7Qe`E68ZVLj1t%mperHvx$v27DueEL=gwd;oFldDH})<1t8OeGH#pwf z3FZcgMTdPk+%0WIp+%RRJK=OCFq=`XDecq9iSQdWvsbBhihG z_pX5h4K*|^`#e41DNta+vlCUF65d|c4Gm6q9`A94H_i2N-B_t#1p81|TC)IC%NJ}z zt->%Hp>s-7V-7KG(xzt`9FjuN@b5FXXw9havpNt{?u#^{-^*`5TJ_?tE&PTn4v4v% zx=ER)N{~CC!NFA#t^5+F&!0b!t^vBW%4%1t;a4NK)*zl1dIO@V`=ysr)X{8$J+%%E zMe{MsoI4VIuqaON7!>Hm7OJNdD7dy`u(#{aH-`|Df^9#^A9^1WcB%4pM`U2R2GY(` zYOhv1DLeLAp~r!@Urr7>S$v#Nmfk@Qt~0o8Lh2H|&DGl? zi*KIa2;1geO_(=P&1BV$Gx7Y)Ivm3789Dns{py`x%U4o1rf6Q_?5E~m)}FzPOIVe; zYU2@haVutj{9AA1&Saax|^T`WoOCgl~*H-omcWYQB+{?A&SrcsJ@izH5? zdy+02<%a%n0$MgHnx~wj4R@T#K)7dy0ftol+@huFScvW4M{e#HO*CCF&%H zG~3=pG7|ae?HeCKtx?Q-TX*t|{X-)lzLrvPdRkQ_Y)XG1Qvv}RoRl7q3fEgtWA*CG z(gpYdH-`9()FjJ*7~Ty6lx%A-k$-DqOPQeVc-L%ULLvY9iE8j#ier+Hj4Fomo6q%( z+6VAGJ3CUw@#)5{t+4AmHhBLID+HveesLe9c2k?!UjtG1>2|4L=_L;+?r4q7cg%|FHaqCY(dYzf zDJArOF;u9g8Yu5P#zkWHdFBMrRkM+ox9n0+KT|OHxZ9p`0?Q}3u{K%;W{yJGu743B zWQV{-*K~I4T``JzmU46pNWr4?u8~=et`84u9z$;2?59Z|QGz`I?6A)~xej6rHCH)Wq*!FlPa z&DU(jZ@H#xhbTtiz!x1)43@LCH1gfpERjR|yxjLOdImihKc5B6c^3Ju%zLTAi9mLi zpaonmj)+YnN?E`DAUSgoSS4+GrY#8-{P)u_=3K;O$z5g3uFMl8zo_XqTQAU+tmGEgS#g0S>*obZ`G8lHHSI)m7e5Fm)3~T2 zu5>EHM=0 z3;a_w2gPEdSnK&UQ{kpD9LR^uGp^zq(|HwOCn-$fkZYKW7ZokUn9pM39T1sA`aIW1M zx)u?=)QQjZuI_`4WXgZ7?_GIXy%(-TO7?B1M_{)45*E}W@0{hy0v@Bh;}eLPCMzN{ zw{^nm5ny_+-Nrhh_Qtu6xbS0s$mm*KcMmKFXw{_Gi%wj0gn03?b{in;cW@?kIZJ2( zatL$#^Ng2D)A+rV3LL0=x}hudLb$B12aVpvz&2bU`nfFl-r^0P^;U)xsM*bS(h{k1 z+1of29Def9t6BgY<~f)BPd5Si+*#gxH~f4c0(-n! zNguWGzTw=VeJ>imPP+aMWpyn@E@N114%oHW2Lst8Y0Mf;0&`OJT|w&?%y7Gb?zCm!NiCr-E>=c32}vuW362z`JAszG{ddqX@~@~B<83WUAw`o zLAL=)_`XetL^25;kicps_U61@(pGgk9@~565NDf)Fek7Sk$qSE-UZr^({VL~KM`Ls z5xIepG*}6AGv^HRO7|)XUrgRHo)3#)uQ0SP06e&OTj;?4x;|zYJ*QxDB{-b3 zxg0Z#b7!)bz8Cirazgsdv)VORijifLSt7Tx^dNpD=i4mY2sYaZ@fCP421IOjZs&AT zR=`fpP)%lTscO1U{!(X_#f!;#r6nw;zPD!mf!G!}!{f%22AM+^PCqOVJ?fD$@3VEV zP7_D)+Um0|mwL)K(Mj1B$$dXbs+z>3en{_c1pIIaelQRA-oxbE(eRvEN44#nvn5Tz z+X*{!W-ro7Kzm4Vcc*AtNp;hzso3Kh97cB`%+<3w8p8tviU9;kh|>9|z!Qh2{TZ(x z4)N`@0!jds{XYo3Xq(Xs3=AAl=i=*ycBt>Y3^cw|d06YS9T6lUftW-Og#%4UO0{jj z*WCf!dtD^GZ{rVSO4oOBlXeB%&}8Cl5F*1~8F$7+bzdc-5F$ouKy4g@qgAn4dtO|d z@*iIrTd`yNFmpGbX>z{1CK{k)Nbn{&lReuXTCUp2>e3P1rv1)^=qN_W?l23P9`rNx zopEMnAaOp|StqFuw}J2@gj8@N6$_Akk-ootYZ~Y_exwRE+G^GPV*@&yQ@5(CRM)cv zW6*Vo_QCZ&U~L#1t=G&#*EDiIOw6efu_GTd=e0a4w$EP?d6I=&LJ<~a&$Ke;7UL6nXY|uFX_o2D= zu|R!h*qQ)*TqU0FGl0aQbM~T#jx*1ujAL^J+YF@Tr<8HF6_LKxCs7Dlrl{%lSGh{U ziJJK0&STuFt8Fau`!$WSB%$0ZiT02> zBL9Ur#2CT{y{BwaPGn$Z)3t;B9)WiFIkNwp3q{d)xq7H!mekw9xno-Y>PB6y=e0_!((k+r9m%qQ{VQuY;`!&tor0 z$2WH&dN}tE$DbpsZI5BH4EKXN@9@@|jrv6X;Sc+RPQI+F_;9ISgoN<9ejAcwI*Cj- zmJ*I#G%)1|ql#FFupO1Rn_rs1!jz_2Ra}{7Po^_s@*FGUM?8B51_mCi1b)%&Od=H)N`4cJxz?3J zOeaRi-_~!OqUv`X z!rI9PKdzrU?LV=^9Hud;Evz~(ti(hmbDDDAQP(=lKJ{Meu=gWsTd2 zemhQ!imsX)S;=8NWj&Ripe>`lH1O0Eb%Z~mdK*QK?~uxjzhMCOQ9<9b8&_!XM2N$` z-odlfzO|i#9v|naBQVD%tAt_)BehKANWMliuEW_8hNB88AuVA_1A5M(xsO%iEjZ_{ z`VXk>>#j1N&a1xBLC*BkDH5n+R6 zvJ*R2F3^S8t?WMBa?O&?ju<&Un4;?AM3tIQ^G@+yQd{1k`llCwashWs5wC^b*Y?yfZD(p(-aW4j(D( zo8yt@1fJah5H*?1M%sL;MeoNTA7Nam!Nh``LU!x`)sxA!NSFz(RrC{+R*1XEPoU1n z`UCH|o&pFW1TT}%91>VkuT^h3uqCG6OuygvGAQ>!%-Fc?r03xM40p6A(@MkQi1TDl z`b$zdL|O}QNd7TAf&>oc?m27!=I66WI5I7Vn-nM4AvlXKIL~}5Ixeo*m|I()2U^kp~0(S_(aXGnuOx)mG z=1YsSry;-JWffQeYikfdLkQM>Ic@df?WL851x2RL)4tPB{MV%_pxWp$bquU=iRJ#Y zrxY>1j(&BnpC?JU@}18n{EP9;^#HGN;J?Mzw<{v{ z)E+S_$37-;N5COF+TDkZO8^uk%=7IZ!|SbrvqYtuflEitViV3k6Tj1+UJlq0{U)=o z0p;OzN4Vva=6}j12t=IccxY0R>3xjGyIW}%g`fFq+Dv}lNmEG8H1!Z4=9v^QM<{?d z@c}pj1H;030Z@~dQ1+Zic99ad{rV13$o1uns(u14pQsYD7PYs?Sy%^>AF=D%*V6&b zUKJlXOl!A#U71Rn0}NMste1 zr2r$;Ymp<6c~COi2?p-yurM*MPG4u|Sr_k*=Z-EDiC@29orL!`vLjRzKED4Qw@?Gw zxHW8cHo92+93YA4fJNvUmzWhq8euk?qjoZfJS(WOqkYW?#e2KL9l#~xg=|C~U9|4Z^K3Cj4;~d}}i? zyFY0i&^2s#PoU_Xj`5q4iduYPrAbtn3l(e#htHt%@4RdO{w>6&yVquS=al(4ZR7Fz zr&M$gFD&~ue>tPcnJe#IYi}R@Gk*^dEroq(+4cD+DHw*a7edKqH5h%RakBEFtc;T* zKD;bE1e6hDw;c@49<|x(q$g>7I=-421HXMNkv}&~<0bey-hD@`O79)#WXQOL7U&Q) z5BuMI7As3o2|Yw}()+tYX&H`G0(O2jLCsxAgRuas`BUz$f=ZdUNRcfhnc#2tMhYA+ zjZ(;{+gy?M-LQdF-y@gHk^lE2w~WHrbAN7);+?-QJeS*Sm_jY!Hf8RL_GH%VW4$-6 z4&}@JvR>MD-TLpuu&2l_R|k^2zvpB8jkzPk`+low&0?fHjaSUk8J(l<>a0AYvy*wS z)Mxn`(ubArF*t7O?Q&~;0BQ*$Z3a{q#WIghs}}hMj=5~8YLPT6p{Vst2&RRTT-)G@ zOQSpJJt%5lHg!OV&)C9@cmEb7>L@%$SQLq9fZ88k&LA08ZC@ay{91TP^4+vZbM75s z?Kn9;PKMhd$yN&rlEjqdo@wME$gxwiC^f%{PwE5UiKPSC09}B_d+$v8)2;0Yc>eSb zypQPdH9p5HRdufVq23|XL%^guHOzD28(?fS;Hh%E>uY__mg1um){9E&L^2mGT`m;r zG7`IPqnQbey4(@fvo{6mG%N2!C4H|8g?s{Nf;f4P`D)MIzvszGKX&B9cEao7CCnK- z`MhH#jW0cO?dmPLM`9LdHH*nS?3Fj8x`9bd{Wb9pFC>PW%;-C8Ea(vlHr2ccduYtw zp@lu80;d*kTInipWxn+!pV}suSn8SMWu*7v+1b1O%KISF+W!F_q;Kqg26Q1g;t~(^o7Eu9 z419m=n?$>9^-eL}ww~3OjTH}#&glAskFFQ|`D7^;#y)MN=F=4aEr7Hb{T zl>kjgSxHWdb&Rd3@a5$2Qiiq~=s5Dx4Ou-PWtJF$L%8Jrp*WIG8iw`U7U1O>&2J7l z=>9CbNSzOYzw*ZCDVDOA9P(RsR;Xg%S%afSjwO>o2H>ZgY;^J{MEddndw(TyD$$QY zc^-5WwG6WhjLrFVAibe(uKd66qrsIEJ#NtW@C5nOZ6_;5PFj>35+eAf9LPlhVaHPG z*Q(>y=b+^@^}Dplr~9OuSYzG1gt*07#9I0`rCqw()MqUQ5{3qwYp9 zcA;30n7==_^XIy9{wN*an17cBj*O2&haHYt^V{sDTn8-`xeBWV{br2F|VBAhkIgk$c5C-x4 zbzhpTF8;ciD6?qcr)7WRRJ8}sy7iobnkHY)bc0Vkm*w*@6o|1~Bf*bH3A5?GG;lV{ zE7m@x@J4pQE&GIV;dvAEW_pAT&Eb(7v!OK#P^SS}vL=Qm%% z=BYRd@H3_*oBgbqd z3|_l!L6V~W2j!8AI$Z=#Hraxi?@#VN@;ZCCw=h@xR!mpU_2RxItl)>+O7-_3xqy5H znRo~wB8s3pqGA0vqdivYZ#5?V=a39z%BY=ybfvaz2^|4CiMZe*h#v2SiMfRT(XV#7 zBm1@0q0bd2_Yr9A3Ck3h-)biW4;fZg?}6l=&3oTeGvE92svh6gm?co&Km2|!AvLIN16=0+% zcmV5@$w#oT_kxAZZJ@kyPFprR^wofxnsjf7q(xq;5XU zx1Xx``0JS42h43itAgZSQsuea%=NGQ33fXO?Dp&JZV~kOmtSHPrPpR_ILqS3vVv48 z4t~u;57zShhOjb+`Cjz4`P(GOc6jR5ih1XCaoe>{ElDK|a?_K_sUC z(O7p!B5}m4ycsk7OP+kr#`zu1-{iO5GY~)A&q}dCZerXHejd8UMs66Bq5Ha^UvZF6 zi};A#Y&yZKBM*V>QigJy68;!s)AlpeT5tEOml}K-HG|}U+;e7PEN1KE%KM+B&=9N+ zR&k`G!7$O>aHehrpqQNg5A6di-V;FNbx-nj?TbZ~TUeQiXN23qr{m`q){#@Kd+&+! zg#6s@4M#-&O>gN^kr{IlK61c_ZFTP^h|mFl3zGGJW91jGf>miEUNj9y1pHQT8bm|8v`57+5rBS3BB36uZ!&jbj8Z~^GwPP@~J zm`XEU*t=?kbN-fhj(Rhb8@JgoU#L+joBkH1n%gBv?9KCCw=kNZVDqUXWI5k z$6KqCa-XlA!4~XU?&axas?t(PRdrS8J-!`((#5khpk~c2MrN(3Dh1%PHQL-w1B#ix$NBtAXisV? z9Q_8a0>#I4!HwydjZ`&Z*KV&N^0ix4Cmvlor{^_x^(Ha1e>c!M=Cfd!!xh37lnWL1 zF~#1Q079cn1c_m<#XXesLkj`udeN1qj>w-=lEVtGPg?>))hin!0a1c>Ilqb0p_6oQfW+&g}QO8R#ciHqqEJj{h#Pg9=<{lI-ENM%^2}sBd4%yhH5rE83?l8s7Eqn$2Cd0ubFaD@lcDitk)T=u zP@F1lx`w-Z#sNHvgr(>`qLF!z_KcBtQ!*-eF+!{)Zr)*1hP=b^23-8-*s1appA7b- zdlnnH`upJXVJISL;XZwPGpGKn$gm9G7LV}QqbB6|Hoo0i#VSJ%>#|e5b}Civv8xw% zK5pa|hoJ?LEeN-pI0)_q9eCJok3!V&QHR8=wgWpHon`tfB0BE65quM2$zsU)z z)v^bY3r+gHEwJO~nre@;!n>OSzDC0HY2DDbgq-{Pv`cyBv#L)0N6d8S@5vWqqy$JD zRkp6c$a^W#Wb@CMoK$#TOoRV9vgjy`c}IE4yXDcN4SL@~86DK(b^ecEP|#P4ZrV2I zV9MkSkD-&Ck?Hru{bLXxR&%1ytSNs|Yh!zPyH54*5lyr$z(;;Q4X&_#?a`0-I7O|e zKMswpj|#B3*!$j8(2#4cT_wafqVf|PW$x2HG@e!=IAfP)Wdb@-gZF{aArC+)2pj%V@zn*?W~XW2;DMoz z`L89O{)q1hjkjhN8i2s9*POPjoAOjZYw%O-2`1x?CQ5I59}ew7Xk7o@PO(9ku}1Hf z&obj(Qmb)&%Ni;));6D5Yq0$i89=k%$N|pD!q$@F0Y3_7jE?nKHKLKugU8m86AggB z1`>AjD!5jUWQe_~E4w;ACZ#g$Z&uE-k&`zNS4ImOkA3xQsCOT{2ler*^aoNO!%A(o z23s}jndc4^4ZcQSPa5EDd?h}UoP-`rpDATE2WL|w+{f)P#~~XPnWmA=jYOBA@H$#I2Z7QA+&3LM^ogxCnvHwJbujsCxMp2dnm5w`$J7GT2M)CNkgSc zE=l)VmbSjgwT)vQXZA!{^zyl)g?3ME2SE_?8>Ks7O>#>d=>oj>tmK+Qf!zIdZk}7p zh}aKon$#ydx5_E?^Er5r@(F9<#!-kphqI`0?)c_hX4A-o^pj{e!ETQQ4^czb?|ryN z2MzywqM@s67O?l~eWXG(k9~~jnx{o(&(p>R^JT8d!t~8-SIPv&KGJXbP( zrY*T$(e*;kc)>`#P>yy6-=Z&rQoTUn6k}7ZX#hgB-zjK z4|Tu7V-1-p zNUfkHzl#x+%iX>++7C7O&iNgO+bPoqfmwE?*EJVETs8exeg7%#8f>KnpNO=brWvT? ze2@5F1bZefOzcXV(^}%`O^T;+R2#_k&h=ZLK045u(nfZgt=6;i^!M|kho~R-fwQ^gA4c^qbGUnP>dN6dGFmun~b*4d8l0v{Fm zU~jr7Zz^}x3n9vp_x$MrH52>^xT8)ZP5K_c?-0m=OOQll0E ze~LQb>(Qmp9};eN4}0I0pl%VYpU<7=F)ruGXHdOGc**AaL<{xkoj(m7Drc+l?bh;w zMqdMD+?Uw3+&QuJ?ah)0s>?W-r+wM*pl&ap$gyX;qFhi;k^lhQtA|$4$l3|;ViER( z7uoLNR|*OTOt=gp1`d^CzP4S$NURwHWG#sDjl1~G21C0J#xPF)N@LiOHXTKoQIr?+ zKVP018R340+N4Ep`8XOkh=h7Jt#nbSKaJEMJIvRY+17@RtSs;HtR0-diFs0>A9*S3 z?f1AdH(EJqSr;qⅇ{;YD+66Z%Rl=?y@h#?6<2Z_2WB?@$JlP5~e0h?eNB2FMdC} z^ntRAf>(cjzQAW5^mOUxrTzs?>fzXH96_z1&pL~^u>MUH_25m_r%znmwkkF_HMGl zr@1C^qm4Fun4S#g3Vo*$o0fZkW3{h=_XQ!5?TSU=LLUjw<43rw(6ri}+fI*D9Eo=A z-`BFyP*XFAg70j&k%Inwd(jZ%ST?>*o_iQs^ZU24Ka0sQ2kJBbU;uFNaSVRO0#Rl4KV9KPbw7pR84je@f)l^qI*Dm9Qtf^+y<`NU1 z@gQ1JVfK1WDUo_-$~K2kLo143c-Ei;#d^YW`fzk&1Fd+)(}Op+F}g{Xn{S^+b8OQX?=+CWSRC^A2FNu z10f=PmXq#mUbVT*8+bur3D-fLEFSZuHS-&!WN?S!Hfs{!oqu<{4|xTW!T%#Fs956s z*@4sND$S*3r(3LlIW*3j^{C@e9$+1!$k?9#`d=RgZ-ReF24#;?mAMY}2_K91 zt3l_TIc}2Q2XD;ZATfdTVJ?GaKUvt887*{s(F3k?a8E#Z4xh>doC@^{tg`nCM0*XA zxL&4j2Gnk9c;kcR_`S4tY*-D;L?4zCP3{%H7$rrOwvfd>Ue-Ie+@OpfVjMzs72W>b z<5-2ezg zKx#Mu2hAcJW3KCc>XOc|V>Rso%)QpFD@R)wGh{Sd-*4-czmIn3_U*j(hpq5GFNDSd zE@k&}i<8U!(SX-Bq}F(F>r?l^)zo?lFnVp5ZzJ)ep~CYMV)YCfZeo zl=<7bOV59OEq(kxpto86;Evq+f>LVEY}0 zIMH~tr%!%MDxR-I{DaF9x+HY-HqsW$JzujI>#{;NbNn33DaML5Y23@&X^?1}`?Ye( z;D|3ar6eu${Kn9&?~thEs+JJepx2J4hg}$3w>ZqXfe7TRIPX`?zZT5D5s0z1d8nf- zPVOXFT~h!w(K;NZc=OQS)-=T<8RHarJ%q&JHzopa{^rkh=D@~+R^F#wlNh0XnnOHW zN5h!dS5s>b5y2ys-*@3k>tG8TFHc}~7YYt-d=dw*THzFo8>U}1Ui8lCQrQz=mRxWM zZVi-ae#gDBGGvy=MIZY?$*2pqiP7^R`)_Jm%T}p9M|}N$b4ZR4lBi83+m|_ z5WKGbq_#SX*4^KlSlgMVcuN?@8qr;1#WN6?P=?sa-chz|H+voFRZvEF&*dgq%gwm4 zTt{lhkfj{Vj}>zHj%GSQS)cN!<(NGG+w6cUImGx=Ks=|kTWig;t2GZ(N)UO1H$}DP z2UC6berIyhX=wQ!@2ckdfm_#@^@S54rj==2!t}~9JJK1g`OQoK6m!Wr9MSuUi@p&I zShC&LOg-IO7cH42db`bldugu!nM)^?W(i!3R zsLZ7&bSV+cdNO}Tm)nb0%BvIw*hz=Ix-pVEA%OCXxs)}lROb)CWT z>DaWKdj$l$Qk7H}@=npsvpzP`IA7ka@Eb1fyu)idnoE<~0)G<+6r@(hsk#k$uKTbL zt_~Mb*d+sc<>`*uh_#EQmX=IM}Vk)?M>TJ$tda;_L0AM0R$=R3| z!L{!&5ak(NcNx9xaCYsDtRrXu@N}>~jGl*~g5+GiVgio`144U?j6geJ{-ND2xL)An zK14pH`PMb&{M*x$M;1*Agh4SE!u26ADtxvby`7E^RbV^CP|-N}Nf;RT8CKi8UI<|ppC$(xv!hh9`sI6Ux*z04XuK{R&5 z_^BMLal{i*Z7V#phAP9zshi|vRF!bJN z1%h#T{DV(9)}opeS{pZ)X>13ps zCVe`+uMnp6mL0Bn=C!#{@euQ4ZnA(WrTWpkdefvu_lE&}N$lSZ_H8q!eymyR>?Fj8 zd~@2dJ(FPc@xurG!sRm^@%IgzV3Lgv?WH{*Fnn!k*?v_0rscfK^XijHlsdpYqQsvtMIJNnuv3lkH;o-aW zteI5S##FRC=HV7A0fkep5(RQ~!C*y$iIRuRwN{UEHIV##lik%a3NCPYK4Q20} zXwfeupIcU}>a;sENOA)$y5w0e7h{U@Ku2zKwqo=L$Q$QdkY5ibZEx#+(1A$r?aTm` z_wrmh=N45hph%?_{Gt88{f`3XJH`x696&r7kN;~#kJ+EZ&9rUT^f?B(khI}_BKwlF z@i>Xz2{nv6QB*e-CChG84coJ$*#0@>=2V2WVM>Ne){_^0)BaA;ZkHw;m|CTaYX-tw znUnUtsU>-WV*iZvf@x0$End{dt#p z#)S_S$N>oaRckl@i$UPY`pXn+iy9z1or2O8pMO2@v)`?cIhW;6*e;dI4ww?s@?SB1 z6mIN&UrzTW-*M(mp|>5g6CTUUy>Fj6N5!En@}2UN*c3n^-8J7?28D{cy1Va#&z}+7-nt5)Xc8zSboG_YFg3WCx%qK{FcGp7bE%S;a~6=D zBA9(->bg76%!trS|F4h44_?q`<^4zRifCPbwL$ibfZvbO*)PS;JY4W%C-2i9Sn{X7 zm3-WkVZ=bfJN}(pU~~pML|Rj_t4*bN21o3i7#=?63W&sThuIe_@AcMlQPYfYdm=Tczh(SrSQFw7W0b?ujG*hszLWsLrE+B-u3 zO$Mr-EfhYv_^ZGFO9f9pCm2jqQ2+H>Sm;*B#u+8wmWw0`FirA?_1u33P1xpRb2A# z-xXrEOcYjYIXGV1Z>9UgmFvZuju*jJXxIp#YbN%@rw3;!7FAkku#KE}FI4|wSC-_L zdogNtGdWS`PA+WTo?r0of5UW+?vCt|4%9r7Ly1xBs-;1|XBT^^sjS}QvnMF3$ z06<7`QkZWW<>qI8M!|~>h~Po8HsP@Gg*M~#3*i{=l`##4@4EM={_>~qcSRyK`U9Tb zt)iuPUa3_TRBui0FIO1(I)4B)F)#CCxGfKcBF^r(N@rN_yKeXXv@u2#Ak`_a2Cftcb~m{**$r zp_n8@5G-|#f~Z?SHqLE6KxGC`|5lD4|5{AuJPH6(RZHFtqEH<%xP9b3l>9hmC6oKB zUydhhD#te{cBN|NQ=D5Zz8k;OV8?{_Pxmv@m=&2-@r)igV&;6|@c?v=m#DD_&qm<# zP2GbESjx+xHhro#JY0lW2UF zTq)x{;u68+D>yg50*sUf>VCbMyMsl5!-CW|P0J26p=dMw3UMms(8>^V!Uu?^*aisL zXZ}{)IsSS?GJs++Ug&5wpdsNC3Bx-h0+sv$WX7wmtfkEyOYc+v z`vy&G46`4qc(#BH?y_iYot&@HDb@@EQA&^(@@qH;9oru5UH_Xs7$aa%qK7g6fv`W@u0d@KFU#ObjpvMUYfs zg^fCu?m>X+-LXZS*LGpPG+1cb$$-^=+vo0!_aECKLY3BFYVkx2Awh${?B(Vfe>qM) zfJb|8#rl3hdyJmsQI}i1$gLd;@2KtAwp6u-uAu!Jbgcpx+4jFwbB#T&Tr)bh9~h0a z!l!ZZ0!xm=AYn_3$}lo3hN|UwTJWq9!o)=nImw^%c8=Jts~`OgrK_$2VS!8K4s(rR zpL)F*CIp-vmrz!)Dah~CEzVAVG)bw3(LC+6c@X=|t z7Sn&@e8p0VlzVBp;ohF*NPSv|ueBd4Zp2Cet&#TynRQC*WRTTpXH7Kg?$TO^Qk#|e zp1`)*aiJ>yoiP>ftYBcZUby@!S$pLQW{4f0KS2b^6all)BcZ6@YE$>*19{NaO9S|b z%%yKXeVW70-1@~u@8EdcSgkUQSnI*I`qdA4{spB#jYE_9)M+?#07&Zh21jQIt zK<|Rr;NjhRTMC1$aDQ8l>17o29wlS)P9*i53XBR6c|eO|_r z-?LF(4Y~kt*dT{&TVT5KKhF+X=xp%Jp-s)Dv;xRq+GBOL8r@064;4M>4!VEucd2g^ zSM(wS#=VxCbMfUqi0YoH5g~huu*?SfSAHz}jt(6viP9Z=+@yQ|8|TBRA8(#*4p^I9 zxe{qvB=$W#413kJoK*KN>p@ot>__`R)hxE7F0k?U7^Zp17iLvm+h%fPAi)Nii4Ex6 zGMFhgLT9yfHF`!<*x#Oh3p%sLVWFe-n^q*7NJ1BlJ(Lz8-!V#ygm*NO2!Hrz<9|~Z zVbln_<XIUwRbv==evtZxs9EEIV(?RgS65IZO(9rF#g+2--FuY% zYXgRt;88B7J|XnQboC^$a?&b6Mx_1WN!~)!!5?B9G#u3=p*zC-T+52%bGcThrR2CT zT|$p#`BD^eggUwVnGPCaqLSUV;LUNTG?cCm5BD+cDAZ?7Z>OA3Sqj}98t5l>MxVnTaR*hq4Q5?z1sB^*K+AI!UJuIe zz{fEim0x_US#;ed`^WQ`&jjx-AJ08$nvRcM#I#zf;@bKlX&K6W;cA+$7QATSvUhk3 z1`t{|$jHi~6$3%VMU@S4lY?mwbKHGDhldV<g zM&q#`3JyNLSJ=os7dbwksr(b7iqcKnbnnsD64BS8gb@9{s)wl=51)=49i9|3&gDC~ zK;Rkr^~C7x;h;c6T@t7s9&`W!sgOp;O0>&gK3sAvoVQmsGbcTx%jJ4;gjkeZ^64L7 zKH7EfIp3I5D{b^H&4LLMaERl?-Oa*A(j6KL9T0cSRYOJXpCq+z=42eqX|}zRp5HxShgY=R*U?yRABNM zE7`;xPVnSdeX7w%*nTCn|F*jcNw=7Ro2&)h!1pRN2i(G!dd%stpcA7Pl+qS>!%u)& zPGc@*?pzW-IWJ}OQfH574h>SwgDa_|yUT0+ zTA|~2(m|YVu36<7J*B;-&=uHR-0RHHFUoS)@z?S@5bRY#hj85K@N+-HVlfM;t?Db# zW$gm!m@ljG+)fA|JCkv7)g}nLtRr1InS+eRYM<2R7k)y+b@4wxi3FMvh*wv&-}DgS z$f)Iq*uA@mu92DQw>jCcEH1s^d#?O!SwYUo)7J@&t;8^*7;v39_2e+nee8%lI+2nk(aVy4$G;*~bg{`5N`_cQ+3V`M(|Zmp)) zD|Ej15P~L4)H+Y?Fg)4Dy=5F}iTX*VzBj>}p=?$WM0lrX8Xije~ zbnf%e!p7GrxCQMG7CF8F#%!>bkp!ae_n|WK6-ANolSpo6{hW=+xv#k}PYCkASY6fA z^{qnsbbk@;r7Q|*)0LH|TxgD+x@f+>I~>WZJSY9C$gvL2$J*Kt3J5MlcN(GE3MhxpTLRv10UQ zU5anAeb{@i#l{d|M0&}MaJ+(X+fv~u(?^2D<;%%P`-vU*Xr4x~ddz#bV_V8qr5_%+ z^9_5K(#D~V5hvrbUwMJk2^!~pG0V#<^&yo(#OCP0HGKi^0ssK+D!#-H*RQ+G-bwDi zx+D5EljS&l^Erq^KmD1{6onr9F8P*JwkIb!^N{8{fhL+8n@%R%5M)GlD)knp1&2H0 z5a#j;DP*j$jhrQl=G8!~H>cUcmwnh?8vQqc*ZQ)`q?ndpN!&woI12!LMtc8|#ezu5 zdFa>Nww6e#9qq;oeE}MRD&0eqK`MoKBEPL262%?W+?~B2@6WiEy0~@aXEqU25_~aU z+1eJbp@Hx1-H0{IoSOAi65M+TyaPBj#n1n+z9G7BODLGkeX_jv%3S`0ZfLuDjCE-L zT4`aoTeD;pHf9|6x=((C3875qVCrx)LffHdDR)j-xYhdOrMscsh`*}~jl?b~s1YfM z^q_D~M5dvW=0})^HnfEh?$h=DqFvY+ z{z6_dQD@AZV@YrL`0WdqUYI1oyp#x{k8+B zI6+m%BVC3*{wym_Z+y(Y55Eqz7Ejo)TH~bu^IjZ#Q17TmcJ2b#XQzqRLI7<=Nmu*1>d^Tz@h6$`9W#GFNoA#e$nIxcwK^UYV!(^FtZ?Oge=_QG)l zzdLzDo=?D7EOR!vv6TPCf$-2hwJ)W|Y>Z8tkoTB>0ZZ^OVmsC=gvRJAq+Qg8<&WK@ z>K}ik85xC;xwBuiW5wMg0^>4i^1>Wf$j0*S(x!UtXkfRdqCLtjn&R&Z2nq@c{2fY{ z)%slALf5SwOur$qvbI&Vonj#xjpGoyV{jFiF$q`><05>9jUwuG}P-E(NMg=PUFBAH(T~jm~kHK%27dVV=hQ zjlFX!p9fe)Qf8vWaTXHm{X(vIc@G7MHEMqNq0`YwB=m8FlY6|v>miR5k2KGzM(c`y zhzhG+LiXE<>y9$KNrA}Ju$H|S$*32T{(eCJ+QtD&<4)c0*;F1%-S90#Ekg*kQ5vZ5+|SJ^gBpH8)EM0*ON+V6D!H zZIN|Zlt{$3wJ(_6kalA4CNt4WH`25OFih)dYuwAor`7-E^ZLmkRQ46P4Rq60eU)8;C-t0SB-UEk7en_yT8Ovr@o-pVDAeEo1;iKVX&u|Nb%oa#w&Xla z16Env3I3RdPjmVrMj0;yjMyAT+;%wg^>Aw_z%DmVgJ9vH*(Vhm`gd*8bTBzEz(;Q>qR0C2T3K?cisDn`FL5aMszg-9?uOH$`jjcXY#*hND1(4NVkxX|8+xd zyjI~r>K;|?D}}DB?je<(a=17j-!~%p#Tm6q^a&M?i9ZW4e9DfLSC!eX)W7~ZHBC`G zd_qbGqg^iE@Wn6pR{uvxnrUIx)9GtCPW|wI;5wjzsiROR*J-fOZJJO=hVMYqbq2Bp z85?Kw{VG;q^Fbl^fG2GS?puEV-{5ymzcVPJ_vs>|Z++#B0Ezy4#@pBYyYjA>06$<2 zgO`2yaO!$f{GV&7O!hv{2$G)fUr&L*!O)=&-`KprYPl%7^3nm#rCE!PHEVvMC#hzqhorT>=Ac4 zK7FIJfKPMYRP}~_Pv!VdY(Iea3V3*UEKAON(NI_#stbv6-@KLVC@U2&+J}8a*X9dk zzZT&)gFtTor6FjnP@;dwxVI!~f(ep4$(2U3c_r=GA*Zc9Y#^(<-cTH>5h-^TcHOAQhzASl-3gHvpB@2HCAyK{REE7 zS`6S@*??SGP<0Tnb zT9ReCb!DS~nx%5!mRYy1+c!>jL`>an8HrK+Ung?WE}4l!u^Hi!bk1Yp0=GvK{hYoM@a>WdxnrFe_p5d&;}KhH0#z{M8<(;rN6)E);MTV z6qwGcYyzqZOIl(@KnMy3Ls71-Kk`m+XgaluD+e_m<#6WlKBf5 zNC=O+M=%DTTpZH`r>ysAEEr3xn4e>NY8WSdYEt2_@aIf%d#QH}h4fdaR}8H1GeT>P ziC&p4VQIno0~9^I4b{;O-R#FPrSDGXzStSNT|EC%95_?n+#;{>BX_Vg`w{aL?A5fU z)`5yH3th%nZi}LGw+dX>s{TfI=^_?MOo|sZ@9?t4#qjQ~2*(z?{-725#-R7y*>uw& z=ou?%(E{YS4tnW3=R(d2@oGRBbO4^Xtlcn>I0=E z-W>a+1wbgx>Wd$k&hL_mI*;b&n3f}K6iUyZM`mf`*U19dOUy->$9Tg-*p=_W1#B|+ zbr5sy58i<8ZcS#FBWm03AAR?ct84e#&Zv<@lk1egT_+jSRnH7w-(t*005j>IIVd;j z^*>+cQw{~NL9T?k?HDIs-=D@UYIuvnCbE^Ii_mdpXT9a^lrg=d=9I#l9^>w?G+Z(I zN%aZnm*K_+fdacm)f=W%i^eH+MSC4z(=LnGNOxwm1rpb^S6o(1X6u*MckXt=p@VB4 z6Y^*LpnlqZw&^nsC1>U?YGx_0FiwLcC;Nv&PoGgHDrm)Xt%&#O@ZTp9of_UDxZ#<* z&nT@}!jfMIu?=P3szJqg_-N)Z9anQqCYVk`38b-YLa=(34j&K!_+s zK(H7;mPV=sK(oQZK4k4@>s>h)K{M5;$XM5KrcNN-A!BGOwTDi%sa=}1vTib50w zq$Y|K>4*>lLJ*{vP?JDHawnd9KfHh8&8O^?y=P|cwPx0=^*j%o>c@eC`MM?F%9n0w z__MHam6#4jcGbXwWC`^3Pz6d>yP#f=PJW@VP_eT;7omQ6E|;~>bR|<#@f~B z%2X-2_(H1op8l}|yn9|8IB+0hEiP^D%`Qs83@NdJH>*(S?>zMT_joh_rkT9eI9k`iaeJqJ$QI-`G;El_72E?V zMWkvkh`Rx}{howFDh(c1B`I!f8VZUV#OokVf93_mL(!R|J-|0_jYRhRBC~x1L$5_{ zVrnwaDg&mV-Z3XyLt|OgXjeI2zJTU=Skayd9*R9B43Glp^DuSJ`Vqb5E0^s>A^Drr zXWRTP_%AYsM?gRCDPsJ9$=+;{|J5={@99=uiE*1Ajf8(AFKK8uk)OPnG9H63B(j*F53b!ZzktHP#%B6BT3-Y+sB(>HJU)&*fEOx=;G@4NP%MoyUSS!0Rh$CM0Be8kEa-x2lCjByy7unZexziS08tG4_F zEU?8#_;Eb>pMb6^$s*Hcobbl*je1jM*}H$LCYMIAeuVMv85um7F`B=Qc~;OZ&uIoK zyD=*HGZNna!ycf5zSZ_TyY0k_vSmM=#se;k%GVpS+q7$GgJW(wI(c`A;`b?6S2oC> zX?10Of0~YIRgZ_pG`NYklXvc#0fiT_Mq+d1E%X=`%hkK?w{e>>8|pfFQ*LwpSA`FB8iW0eOmt#0k+Dn9y*M>GdYJ zvyH0OA=j?98+i#`eDJ0t_{7rNH>aG-#jNF3D8btw-eDFCU4Sr(hDmbZixNQ4fm6II zbkR48#RSp8afq>B7=Uo<%HQvwKiaTJrCB_@Jzw@CW*X3JMDelDl%$UyiNEX3s&TCQc=e8u8&8L3ZO`41(BByxd7G>+~dHP)LkwAmy!Tf4`XBWKmUh* znUnM3vO$ApFoI#e!g+0!9hT`WUh-XANSzP1|5n7HEX9DX$HLWC z<2h(6SHM349*nY=-0fA{jRxRS86_~+Dr=6>gS(hVW!dKcjV?(y#hD-Ege*M&4%zd$ zA5QKKU~%0ZYPgb?QY*{@7C3-9M&D&`&Gk1j6QJ{&fGuJPY}Y{+ynm0?IOua4_~3$F zTShGj+gLFj6qyRJw79p97U9nQiIsVCi|a{K2B7C`MmThg3Jfa;Zl0#l>W0={$f8fQ znV-cbq0b`$P7YrA96+0s^~NF=aAC0C$ecS4+wpfZH)qiM<~y?-wH>7a0PmwFR@no8 z0B^rq0e<_YSU&!Ejoa6Hg5Q zTD$Q&IP(?I7xy7#^{Z0=B_aT>YhuibZp?zLeJjBq-2wW){f*#X@)ne!kRQ*<_H}mX zsUX-*<58&3V-XENCKktpUslf7SKR@F{rK7Mwr2r<%|QQ2AYcImO-Tk=>U>a$f)8Hg z0C&HTlRgA=2loR+J~sd^cke%5&ku+&WTo{18r;~gi>b0 ztN+5=QEZ0&x|@es^ZndwO@Y1g!<%CxpTU?px33oTHh>~e2<4Q)gu|eRPXRXb!4f#> zm>VEz(LXNHjMn{+%LiI_{qK{B3z+{PFHoOO&f8uZQxH5YfFx(rxaf#?iE*O=2t4&M zfAfH^>%Cc4#HJqy*YV~l91>V!hx()e4uBmJ7F4Fs9sJuQjlajdtm6S*7}V#_%Ed^5 z-ayLqcAv53$h0i;HV{WaJBch1??V)?-uhpf8;IA~go+e~6nD6({hR=N4=H-8fmr=5 zU|Vv&3cyA=VGnlzEj^3XWzXOL7J&YpUHi*&04WN8EjzwGd-iL&h8Xdg^Z8yI25RRGL<7HBBJsxb$A9+HR?s4zDzQ8#Yh z9{`7}{Lb6;|3NK7Dd-fTJ_Pe9407gBii2195gdh<>Mdc4G5{JV31FDZ0~LoiNwjf0 zme>uaer?=XGW}pL%;KMyYCxm| z_!{R2eTCRA&<92Bq;I|LKvp(1JPN>%OPWIBy2^618nNrS{NJ1VnZnS?UbBJF8gO#9 z*w~6fLbOI|sR(rb-}}@~m3#EHyu4H$E&fOc%5Hj147q6uEvEKFSGs=bXC{DLTUAoD zQO_w(y1Jyhy(>ODH1G^5c7ZmwUSSm-I$vEP+%Zm~?xlDQ!S%xfT3%Vm1ArN*dXWW= zDfuu=(fc13hkfqY`Cz2jl-@h<=lJ{j3JKd>PqY8i=rw(~4-ySY_^n_CTz7(Q&TEYH z;a>{2x)*NtW}Zl$(n31;B%)Xd1#$6bN}Y(Bb>?m{obe(^C z9rK^w!vwcPE)N}ZBBvittn$4c$?@Js$9(1UY%`%P3tiRm`N{Fjvz0$09WfgvKpd6w zve8~w0oflQcGEfiRTHH6t&7?G9~9nM6jTo$Vnv(sU5JJ{$A5zk*#aXV`I5udx6dK{hCEcu zsyVX9mkB}5ehUeAq^$Ic2Bv4~mh|qZ8R-0t5oV6ddR2xjQ03y&)I}T6itKT#t;0waC~av|5{Qr z>UFfox8#W_M_*^C*{rQm!B(lJ&11wAT(3s`;tK^i4A^Zf$ct%e9L0OP;f_cN)C_DB zjM#k7^f^1$VEAC;RGQm-D@UV$Jqg<%bR}u$E$7eMjF@>DXpY3Q`WmBn4D~7<2y6o9 z!mGr_Q2zbjz5fOfw04hsoea$Hdy1inX_W~gA83335E8I_b6REoMvT`{i3&$wfO@!} z^<{u818C3M?7p2vN79N2kL7;+V7wEx zJe!!){nKu-#xaj?rzq38vFwr8_Ce%~Am)*N)85@i&7VJC@=;?Xmp7Sg<`%r5!WQ)T_ z!x}?<7#|1o)$cQ{XS%kn&aU73qkzdB^2#QMYuQg2(@n|Yc7uSlabydQd(5o@7Ff>3 z$-fouIELsYC+tO87F{E!Bl5Dl*B65#_-BLC@#S0lqOa{#eaKZ8{W8WI z3z5yRhGk8{aftCXruw)35s{#$ddmzF9828P9$14(wh^2e#B$=_35Qdn?$Z}lqr#yx zlSbd}l-fTxmi*?WK1)Z*^$6Xwa26r%6O~b>pG@+iqQ0^o+KQSDk8M!Xr7GI1(c?7# zDST{8z=AQqJ=2ptBKx?vdjz{qS0Y6K**E`)rk+DF5hCo8-!Gr2;jw^Jy@E&;I((;J zz1cQzPV_G0iQP^96Sws;d$C(8Je0~}A)Jqt(ANV-`hit!+yP|sT>24MtX$L0?cLVx z)+KCcL)GXOqQNC?^BeIR(l7YT=(Bvcb@WcI)uY1$=NheBh^oB9YcxhV6Eccp;J{5u zsE$l0*}gD&<7mS5QifwEdz^!z;C0U&wgU>BQaE3Bv*qV|hSK0Mq~)dEUkKzoj8gv2 zNTy?}PWqldU?ND)rM6KQ&oDZp2iB(7&G&_MmdaJu9GUOoPk5RlbgUC?SqVZCzH&K! z?>Jiv&#uVH+d~v%l&-{tf+cX6!sWBM;qOKfSiSb41lkB!`9|xOPXVq0fFoMyLm6#9 zlV6%f%a2}jYFim)Lv6nu9x&qWrjL4@-b;oRe4{fjALIvEA=*f^lf}d@8RGsqIZ$K% zW-9XN{u>Mw+n`mNQ$3w_KadY+{XTd0z?@y}O7nP7v`PH-a^y~#c#T{ALTC&EDF6`1 zAI&Hm!Mj|F&l|jU+CR8{n z6N(6AJ2swf=V*@)4M?309<)BZ6iUeg`SPGTb6`NhV155ER4MSs!`%5+CxfrT+XhZ& zVxK?%j}9^-Rp{UGu;|flh9^A;Ge(7_r2Q`|k@hj1;v~gw?QkBqS>j5mhlyB_+zA=k z68Go-M(aQ6yB!niunJ3g^yWw(6Ys+*YE)w2DjSZQ{0a8;Z5YMSSpFp>&qa}i7lmL6 zVggc8E+@`R{yHUNGSgUp4kZqzHvv|3U=b0NrMs8vawapb@bEdyK(P|Rd@j(_ui5Aq z0I>n3h;J|>-;T;F+Iw1@x-JjXivVyOHf5{8)$=Thy6N}FJHdv%0vK|fDp*9OGz9n< zKK3m^G$PXWr3#S zS)I3(4IN#Jx?J09FWmjMuFBqwFxwQ}v_T~c3JRBPszwPfu$z2m37vs5#fDMyA*?(| zoN_=2Kyt}sB3WuNYzfMIjx0Sa?La2FaP8p~p$(Ld%Cn@+9u+WUA00LixlyeFLEK(_v-fw>n5Qb03A^`Tf%Ernd>4Ysb(hn7hKWDxgoOc zl^?#UIHX!cpeFY+Ku!aN%EEJN{Zy|F`>*>L{x_8H^^L&S+^yF7K00%xY5B&5ojz34 zWcj;BXRNeVwYrBtI$L19Vk^E&*Xw>OkdRRT0;!d~v?BtJs$UvcvU9nj$AF2sI~67F zaq;m*F%I0WJ#F5QZKXZy*C7|W! ztliwUzhLV2?R2npN1I;so$A?pH_2+l@LPwK0webow}QzD?PbpG>)Gdl`i&E1NTlS( z^(KOy3>mAQtgcTDxW^yeHkJ)l7P{L;&g$HR<4vm@iP>O=`&K_bwFt|1m{2=L=Axy^ z<5|{Bpx((`S+8y6+mRTXP;65*KH4#=m9N3f^y1*AC0%=@HplQ{$G!3!s?~e3g^!DK z#h9bM8pdI{3yVNDfX*DP$BLGes=_8_)pPjHR`O(h=2@9kbPEyhli3q2jzbuPi5{|6 z|1v1evuxpBjY)+z)!mYi3l? z*w6j$GO?DpT-Q=qSIWE?Y~7D_`VnFk{jRR`f$pppF|>(2ez<}@*>dJBi6q$dqW!b^ z$Rp(Wr=eu`rVP!5c?e0^<61Ycd^rAyI7P;S~ z$J{ckb;uvk-Ikd~FH*Ea5Z#7Xb?Ccp@18m{*C(15q!n{M6FI-=I-HmwsZ0@Yl}caP zcV8ip2q{6Od2S`yQjN`dPLJ;%Q|_oIjTuf|3yl5`#pzB?nBk4SAr6OtKY8Le((?T# zzVsu4&n4{dE~mYdVvLLF?L6v?Az5cG&sQv@a<@vJ!I0`Pbp)b4;?ytZ9Dirtc55d* zwUBbhZYdJmWGV0T1Oio+!_CZvd;Hnwf)M)Owvt=?`4&1`9vI0YtIjCp40*>C$yEz^5<&9r)GEYxayD{~;PN+(X{pv3FizPh|$s`DB7^GTw6 zmFA!Fn$^3-xlRh%CJ`ERp`Fg|7V5!!5sMQ39Q7&=XUa_|i#epuHqWJp#LYf_DYfPJ zMK~ecj_`@pHQzsDBj(miibtnYq5}wShIbn@nkeUY7Evh?L-fk3ioujU1T+LEh^ve#Wh?_cfCdd0+>M`khipn(x`{i!FmT~jN-ZU1V^pvKeVLzf^64Uk;~C?S;!|t#xXJ zbxmFbZ6IkMbWIKSCy61HxvoMo_Ztz3|M8JqV9KJ3qSx?Ka1JjPIbEPUfpLOQMG?+n zJwCdeT{b)Xm~-WcE;QSDhxFB2Xpr-oAnf3C6xRGq9Df~Y7)dYZruxfZla#mGV?%G0 zpas8lWDcZDouc^D7CU2iGi(epT}?e*D}*yCr$k9XNdX#$9~}9~1%K9-U0+|h+&URd z9I@$o?BmL|(bZEU-?@puznhV=Tb*HSc(X93JYZ{QfgqCalcxC=?HAwjr`^>&)UG%* z2Mskk;NVl1921snLpRLy#>Sc6_O?4YC%vRf2$&pCF_QTb{-6=V}m}ni$5=YBa1WI9uXCFRetZU;o)p2J@}a( z&GK91DaO{58!2Y3k)O+xIiL2j#bodkrq0_X@pi5coL;MEi10UEj}eO>M=yQ$y+YY- zUua{)y%=Rgj{G2BPTY%X_C331jV6@5Uam_krz%}<*?6KYHND*NCW^}#z~ zgOkBUoblI{(i|(-uXqM8l$m#y#)@(k9iDY-NYrczl0Jm9=b_S2jWk7M5?m9{JL2}i zUt|?i%1MLg?N-?K!1r;aE`;TUyk7dSm+JPsB5FFc=+_Hm;nm2K?`AbLhw}tpWFt>Y ziPy(eRol~xr3{qz*S@WG(o+^)&N`YSGu~W?H*>cP5|0ZPvSs+T%>L$ZxUROOg;x$~ zX<~?q6zwBRI%AZVmRplc(@pJ#z6AQ{WnS)HW)n(el=8+PUgw=<%)ePAc_IF_c8f@v zhOc~>M#S7iboEL>XuK7PU%>Uqxh~04@0yVKJ!_Q`!)PVj59T%8RGNO;ELz&x(O};3 zz-s8JMNIkzcCDkZ5ooa%OX=lgjXhMhkl#Zo{iLTnzp;OnXe(!zQ2L-Gb}cN4gxzYJ z)YV8s`sF6uM>=?ru^GZu>J*<)UFE)L+YWJKwwRf7ntoM0O9e-D$z$e4HxwV2)|kCc zCX$g1OWVwYZr2k|f8>ttojKqUAVw+U`mS`arD|<$VMEA)GPP5$j!+O;xHa$udFn+q zBup|?{g9|sH6Eqd+HYgSB=lvi7vpShhhZ%_MS2&9T;=zpubsx72VIK%RsIP5{wTcu z^I6!2t3+`Qck5{CR!!OlUiyeqaYm!uvhh8Q6mlcG_re#1L> zmoNP=;~GtTYRk~5FoJ)9cC1$z4j-xH-zR16wOjs(d3QQ@Hb(n-e!Odx*7y~e$dpM! zsLCPs5i!8T*_!=34{IxrAYzvvb&pDZNSbI0meZ&Ix)supDNeW(8J@SZRhGlRChoXd zqme61A|6|g^^P3-yDp^Z?M(d?*(a}>b)Z$^ORCLdlo>JWjN*_t` zpVGE4-aKSGuKALrdOJ`2ARAQ+uaMX6ps&gPu@`FgK&ub#M^$mfEt zn7YML&HmrRzl!a%FKyjuh!fS|fAhrZc4@~Kg04b_91Mw$U)OHjagND36H$I>wI*!~ z-?@#h$rLbW>$-8X#)IV;V#prNjOeBa4BuHKuk*JvYY_hqc2<_Y{i{GAw{u1uG; z+;0Z&uZS&*#7icxd1~BYt1HORpkI!C*Y!~S0_Ad{;~o5^p6+I{j_1h{BiG~ zYHwv>iF)GUZ$q7brf4~_yVG~uSFA69?5`s|#BU|wo5im7lw7oWfVDT+i$BW=+Sb_Sh?)}E=(8wo^8i^)QSG|iWD=cj94AI4x)2FnUCiDJLT4n zI@@BfVSt_H-MZ+hd@KLxk=u?Uu<)Z}11nu)t1kO-%!xD)ueV8!>y~x1(sEgLFbNy< zsRt^FQbvQCxWQ!OoC-RVyjeegs~(?%H^klxdnwa`=1lm!tPnpsbo=wiTHpLF``>3M z)SgM&9p5TXfmyK&lCSr*#I~)IcEiJeUD?tu(hA|3i?xr-BYd}FL?~_8=gn!gFzZDG zP0!(o&Fcue%)sM%h!k|ei)cw345^m%GgvovU518!A6DE`>>o_UJ(|{ACUDR#@2ol* zI`7t0RX!foiQ%9rtT2h6qDf=EaA~#;?g=*~2}dgqvSqLUybSo$jr)r^Nu83g-hvu&JAm4|M?p7pPK*8i{YRid7m*5`ciGhu`P>y~ zxMnE9H~HgAkZRwy5h|*oIadEyD07_hG=WOc6cY)0-(G&uhI+~#6;fWA8_sBvE36CGEKdiV>?M{Z@g^W55#k11jM}AC^wg%SmVV^} z=DUx9**H`9;^;VhE~$}ABWp@Yu3lWXA~0%cQmZBXV8YJ7>Sq1vsko0r`Z*|U+q5k5I1K92PxDB!WY52dBThAmANiFIPUZR?*Utd~c#F73 zlxMSN+7ED~_z*FzpqgaCjsix`FU(F|VSRQ_do&%&2W6VNV1R#zJ~e+Q1nI{kI*oGA z29PL1(9iZ&%9DGDNGTZf$8YOh4jeWQN`y_K06EvKXr+=Jj;bLL=ekT;HdezAH=p0 zKb-~)b#nlm<*;pTZuo-6ks4_zBMyb_J#dbx)lxLb1KIGJt>}DSOX7f3^50;4qjjp? z&#%q9vq9w{(wH1k3e4Haor)3cpur|etFheV8h$bGh(peC9CYhspdKuCijl6H38CH@ zH${@ZTt3eO-MolHrV_R$d`8z(a=SL7JlLQe8}+Ppx+U23%8-ksVw5BQ`BkrArz}9D zk)@%0g#(8&3)t_ohjNo)RCRDQ*NR=J}&Ya{dZh^i8Sk^hYZ&4I>Z%#bZhqHn+EcbE*wY_8Q - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/img/theme-token-mapping.png b/public/img/theme-token-mapping.png new file mode 100644 index 0000000000000000000000000000000000000000..6599eb775c72c7f4e6efd48d2b970aaebff632ae GIT binary patch literal 85191 zcmeFZRX|)zwg8F+4GzJbK!D)xF2UX1-CY`&5F~hTcXxM(;O_43+VIHCoRggU?)`r6 zW4d?uUR7PPYI&_)@Ksh?6do2E76b$Y{)?E9JP63UHxM)s8uIOyHLD%@tK=XrDgaV8 zihJ-@2ryFpVk{*ELiq+mgS-Pp0RjKjTma7FR{1JTkrqe!81UAkC*}WSL=5m8Q_1xpn<=-?E=!v-fl3qVrmW`AaJO^ zKA<2;DVT4gshKINI;u)Zav0cH(dZf4=o`_vTG{^U1;XXZ@djEMIqDI*T3K2gZ_8K}+l6;zHxXNMmDfLQBui&Q43mK+C{D{nmoo!OhxH&z0KRf#lzV{56h{k%NJ~ znXRLljWyw~arN|VoE*7{iGNM>_v_zyI+_{(p2^zbKg)VsAnmVTXz6L_X#XDjtt;2B zS`Ha|Go!bee~r&W&-JgC|ET-VJY2NDCjSGOf3NgkwQo!1f#st8n`}I=SlSy!3MZu`b+t|6jj!9WG}@!ly`fa-S!p*MfpFEe_*Ei3M8tE(+3X?5XK z>5X_-NeD|UmO$J}9&pXT_U%4)aT-*^{F_Z#LWueN@7Ez0DEgox+fv&4&$BQa8NAUJ^;kxx)nU**mreud)rR_#nmu>Q+hcfrw@!6s&ZQIB(9*3i;qO$UbddGuF^bLm2 z-H~MS-rnBY$E`@--OdjknR?asL{r8rOJy~d3sqKxNb?n*50^I^o|Lga+^edqIeYs1 z%bl-TQ-n3C)oa9L#KrBiEsfmV8d-5^i^|HZmDSW5jeA4Ua|dwE`ahI(<_(Uvj5bgg zvA|D+3CuQKVQrjYM#EMB`kfr7Lp3ypP__EpN-b+6@Tkv9EIc+VPp@uc*W%o=6NPln zhU(N<|Ft+iG*Dn9+COq@>ge>w6rdT&mvcM}n8COfPY@uZBpq zO=!N^x7zGtla5VENg33FXi+G#|H^Oej3Bb+Nlyi|2O?HVU@?1t3^VKi=lZ}a z#HZXK>?xC0hOktItr#yxdvWd5e5%RPOS<`uvng&VzTuCL7wzUaqoq2l|@GzrC65ey;T zA|P^}OHDA?D=eA&Bq>lK{wi(w=N**VS6xohXK0!7mu2RGyv)T!|1m=ktit-tkuy zNhPzu(~+H67~yoTN^a?KN;^?v zM!}?%cL47p1rFJDy_x%-xlc`8!W8?h`mGl*aZc3`hTySz0iI4jLPqkl((sWZA{rJY zALy10y4>tSp@Zu1G$MH<_^lA@f$%-3wx&st4(YaaH;c}tu6b68EuTDE@YSLDtyrXn z5B03nO&kfBxSOaMBP#In#R!d4&?j0=PWgDFe^?gXdL&u?_wY)2`S~hiDeTo~ z0$pIxggCW!&|Iurj+A9oy6F%b$Li?zy6x}qohU!_k-Sg`v{^9oUZNjix$*WN@Sd+G zLw4@d$8r*Y_4`*8Voqcg6cjK*v=UO<{fxC4qXd|EW{}NaS>}MlO>W7eNjv@_V@2Q{i(IV(g^U)QN0s zuoH1AwHDSQAYMCYXoK#GkFetIb08a~jaBE3SnvMRulewL!(iSABluBM+ktj z^p~CWckk1eyxUZNhl8$uC?Fd(fQS#J|2*e6^;MTe7z%QU`nb5JI3tvabU`_pkEaWBi{#tvFm;sI7A@}iLA|D_5v#CH zA2xZMM3&&~(lVTkjEtD2rKOz%pLV*uyxuuxedJoT2#DQ_BC0kf7{az1f=oTPxSwA z!+fP=AVe9k`T}#|IIL|D8~R*A{+&n=mq=@f&gi=|0j9QS$3Pc)siA_c zxj}^Gp}z0fCJEKK{9D@j&oRH%e8x>34}#U#(kl-FvZd$<;HY%wWo^K-1qtrUMz+aA ze@GVqal^PE*Yifs>QjWq6YO?N&Psvx^8*-Wmx|i8_;}_Q!4nZT@&CBULNIhG_W6j! z3T&_rZTU74jH>$x*1tB5gLLb?;fi$IDQ4r#VbkS=I|*gZJCTo!+0FaC4#I2dAoHuL zx2!M)-ksVx9T(!mSf3q*rF#8swlq70?z4%$=b8Tm8s`bl=Tp!a5LbA>Knj|CNkW7~w>|jra`zv(9k31%VF_g9iJdrF*$NS)^RLU$f5}65Y@E6m3++Pt- zmf!haD*RY!h=ejIx;M;e^)sm;I9AzsWPtW6l^tW6w-#(W8qcTI^T6K;-g3u%^vbdK z`2i#<8xu}d5h(FQw!0~6MLh9(x8%hZ5olIZ7FB5Gs%*`t!C|GZ ziGikzzu3b2i*oupPTh78;FJ6b<{Xld|0VW40?uZK3<@DA$~+C&^H!r)!;i#2LLOZi zBp=KSfw|8iAPEBR<@7eZkzh{)d~88Bw}>vE!4NrapgrNiglV^Vp)bZTKC4!UAZ~jR zu%M4BcLOLlgR_1zhrsoqqO&`8!^3|Z$jLIg&rO}l;3()$rD+>EJKbpfqq2s)w(ap%eYrGlY6-SjbM%gSF zU4ye@jUXXv;R0P^km^%)O1kVv;#Lu4l8fy5qHEal^ZOnYuAON+>u9c+O6E1}G`-G| zKnu+~k|O;Q%2n!F-_BubU12`WqJ&)7Vxs|r9_2U30|wEd6LrfpNyg9C05Hw)d2f49nPlfW1W`k#7Y3yP6a{Wp3u<( z0lu|p)~JSVI{Xs!O-l7cRN0*a#qnOoPe6mR&6tF2z580OfGLjOt+oIcj2R$IIDaah z1b}x*5b8>^$@>;IhO`IWtF6n1U#1hjfQ-Hd0WqPcPV8p)ESQJzf(3hb1g@o8udf@G zI;F16p*Ne+`I_7r0AVfN-_MX@PZ0SXkS4E?>m_SPNkcLm>;Om)`I)qP>-QiR`E~{S z0LV!sC#`Q+ZVf!}dlRNtpq}-$++Hj?{#wE_<$CSdTxmY}TW(1q8EYz#zeI!3_k>h- z?xnjuwcEt`Ulnh4zp7h9_}=v-!E-2m@au%UZszRqbz{5h(-Xp)hZ0~?g>4SyGiL>@ zTNO)&YIZkkeYX{iM0;JL9~}Bgnx97Q1o{hG5z$a@c8R-LYJ>wTwB+9YwN?mWeP#r? z-ko5^J;5lPoC@6ZD@B9^Q5C5`&nLe0S3Y$N+#NP1wxvl6^yupfA|Gc-0z$NdvVO|v zQjt`SQ}Xe6_Xn@Ax>Y}^K&(`JYNTLA((vwDIl1rs-!2d33KZ0b$gz8j0AEcONuk$)iL0TND3tF(&G}HQi^IJUQ&%f zU6{X{%=5Q#*jCUsG8YYrg;GK9pbSGNaAi5>w)SV>RpZ=bL>?1L$yV7vgoFl)-iF3Fbx&sLdevci8rGmHxma>${j zwgTyt5=7r{R67V2|H!QtelXxJQ?s^ZTf^rDOe^i;R+Pq$&q#T&?r^BYoQp61vJLgG zsJx>Nwc<5%`4;8pmp|f1KCtFQA6PZhOC(o4AR<_=Nk}@v5(yFoPw@Bi;6>Z8z*dUm zvAmp|uploy%Pre|b?+G@`!t~>={t02vbnBVgjJ<_0Zh3lV&tsA7Zz!sA9?^1lJvAK zBIN=VW%6m2i~}U{h)%V93m&*+cmCFJ12oBH^o$ky{5rg@fme~We zCtHfIVys|!+JvMVbOKO^;|^p2J!)+2{d3Vm4qv zxp(dQVNUP+UeOrvgXxQX)D!%W6FZLF-kW>VaUd#GZ8;q><+ZngeHiYLor8dY-NK{P zwc|N9g9Y7*6~#e^tDH@PHEbIE2`vR)-~GLu>hc*nIaCWc6LC*bQ9r|WIB8Mp-P<3ech>D4&o2d>B#6IEb^CcC9xBn46J0~dt;OhQkB2@ON;5zaXs#s4V@F+LZv{)BW0S%W-CE2qJ#wopR8{76iS^9uB5Y$=X-)q9oSPW9$L5fb0r5MatWPfZR-^v~{SdEY3Lv+qin|!k zx33XA1+yP~0n)AN1iK4Ng5jJsT-Ll5w=WNB|8q6t|<|TXun-|eXjf`LCK$v5+1NzN|+ai}aCG3_X zk99e?F`ugC?sneIyTW$0LGG%TH9KG4n(N=P|Ce^S8&bAy%avGsS9$i_I6k^ z_^9SRu`@aaef(%0Lo$JhiFRj$wrJZ?*TXT}wfqsQmF{zCb|T-pgkPgVLrNO4Q71j} zTvR0`Z*tiV-71YbAuh339c0RhDv1-vB<9C|`^SHN7YITqLde>6xXo{{PnD=3Iv{Ry7NMWwW))2hN9QW)M8&ayeGx0-l$%x9_s5B%83puSxQcUtr_LNkNUAlLl7f%OhU#QIJWyJPC^=^$B zm%I&I=WMkaPcXXq)CL=PMyYr)-HUgXInm@%oO0)EE ziHNa^`oEsh`4D9gmn)zxX{p{SHgoW}Z=IAi|8)Mxru=_R{pp&Z%%i>*)iOSfHT~K8 z5Y)E?RL4UFZDh-4u5|TiRes!9PxpF%>RDrC=s%|QcV^}fMe!i_`L2=v%1H7Nh` z?>Ti7kk;F?PEkrqV*iZAO^`7;9An813^o_;H?RpD-+^-$uX3o!jH5$`k~V5y4o{`y z^U~AOj)nWT94?3N`uqn$-6t5=`gUlEe{2jptcfySRq-r|s5dFOaCD^4b3=Le*GM=S zkK-p^dPTr=V{p?c9(pCT1(Z-tMvt@FZ>V1NYd=f>Y` zGjy$l>3A~Dz3hYmkZ7HhVNO?SpKU#sexi7_mfBjfd#t9}C(SJs;}v$R@ibYL%5=wH z`bfRyI8jt8WUKRNEe#|NKK`8^1c_N4X*~mHOG59<&oW(~%c)ESgtRO_f`>T91hBv_rAdroe}E5x}p%tOuo=D|%Q2nJM{ z_gxAJ+28p86DSac_yjVWojj5m{eMW&G%pw$$k7`2UdVqK_x}=^Lu61`pPPMShl0N+ z{vW^_9`8CHUB=k;|DxhQu^{wy7xDqqIo{6sEA~6Hri;#Rfo>O9IUjpI!Ffvmfso+fTY_^&H)Z$>}w= zxW1OlSCk2OUeLfm-e&n$75~Pn0vuu=v;llvHQ)~hW;i2{Grx+Pydy1Es)B}SO~C&_ zX~V@X1$c0d>*;OYnP=n>p9r#Ve3-W(<(Z($*Irh;G*SF24R8FXMoPa4k5+p(F2P@9 z0fCuD1*37j`q=Z7Q&J*6ndEL{z~3n8=FnQh%d8}?fV$m0mN0P5j$`yVMn#&h)kMnV zJoQwb#)X4R_Mb7PUBFVnG}qEWBGP~3dk6xW+L!#}C_ell&NzR~K<0#4N+V~WhyUAl zbLDU^#$MFrC8gQN3wd=#YEVm*$qYAK7P!tl!b2X+MXDTx@9RjvdAvUMrg|@lFx07_<{--{VGYG;pwDcshL}uck(gkH`Y?1vZp*)GF^q zSx;2g2DZ1o^;o&O`R|c9`Fs?7TtKkD{buhQNqE3$o~v$DLOx?_QMNzJ5>sJd2<|%! zFYfG!fc!L@zgX&gYUzc{OO3~5B;4# zflz#=TEqOVKzl+;eJT}~mBnx{&OTgn$9fY7mgsa$$$lTA`S3DKdN7__=*eJQM{1}C z-?6f)z|v3*vkia0*qkLu8MmSZpL8=PmhsS%rMr6X3ou+y|A9?G|K^c(T~ISX8k)aW zbN_|N+w8unG9cv(_~{bHl3E{EU87trAukU&9k!bhmBorXFBlFp*NjF&QOxEFqr%+G znk1if<8qj<#6c8-u@2vZq5~CO3*#@Gj3sdgw513`OeTAI89Z*d4fnoeoFcuM5tq}C zq5^-p0Y0#scs``^`8J4zpO0mHWUVcu_bWZj_FuYj(-*c$3cpJ9wN^;-s8*>)FS(O4 z4-ez{98FK5ps4$yIBI!MHb@9BuUsI>x)v(jxzb{W!69l9VnRi3yA3|H^ z%0Vo{S>rd0fjOnWnaU>bNOpnWi!H!_P(1x2ekV5cl9}F6^a4@2R37C^hb7b7aXrgJ z@_azk@!l!2o5~LbDIp+%b8XR3*9$G|On2JN!Zl^bQhO<0s`|DxHT5C& zqBPDSk8_xPYm^JyCC^OL|HNgV^7`N>#;~?R(}=}U-Q0wgP=d>D;dV`DyIhAuaW@rBfPuXcaFmvok}6r|GD=r1VR*T8xcm|AImg*e zmJzj?c+1Mk6eBB7iHEGI?V(EhZj!S&)1@+E1X@|E6f5OWykA167YHuO&G>r4gk{Z8QvxfT7-Q%#v=tOOp zW2>?(^~Od=l_@s|ZU7I^atE<~EjQop6}mwH!Nz%0|$ zLtT-|wBS1dnKnmems^~zf>k|Q$$j$2x%{o`P4WxAdZU}t6(ltrptj?9qmvEKsenCd z_4%cF+$jRyT=mVxPQyRUdnbILJjinO7?KA0AI9LXASqR3{iwYC76FrvPZ+i&l+rg7 zL-V`c3;SNpkk}V92#h?m`IRQ(%q7%I+4p>772(YvEw8$FeU(&bdLCq)H3<9IIm%lj zqLjc)MW2ul1RHdAn}T>2+m^WU(l>@`OU1Oz9cK6T`5fB@oE(!QEHswYymL~dgaGi! zb$Ss=GAE-vHpWvz)JM9dd8+)0?ETOATpRAw_$wkg?Gbhhk11w(02BOv#!X9FWnfa- zR*l){GmACWBG;|@RH@WfrK|8Ub|Hn(-HIKaR!*MD_-^sJiuGq|8tuTd5#o9AnKFIC z*&D}n=Oj4hGj3n7^;L)Rd4=B!`?qfj`9gSn0hQY2`rIp%ba_ONg#{lWAt^S`OT@#& zNkLD+O;5yQtoF<2>Z5+5ppL1ks$!Oir`1uHSLe}t*%Z#czo5LXxVt%C#KP9q)}1bpOPiABELDa( zMgzG!@9x?Chot^z?;r|YaL;PH-f<|?cAup)C!MNom6*En;ih08DxY)`j-Zh4|WOqRPXHd>RTyC1vh58{AgA0=Y%nUtiXUUP?<&hzZ|yBw5p+{3hk! zn-^IL7}bk2U?k7sRIA0@U3GO8c6PB6+cme2%PTWCBBbA@z34TZK{bJfc(t4Bo9&nv zB7BybG;5z%=-;tPPxe?oAWvm#%BVOu4Dqqhn>|arX<1RM_|OxEV@tgc)%^EFe*+cF zV2`(0UY4crr;czz(Xpnl%B`00rQ99QE?NYiuL9GNoIshj>NeBcIS6Mqy3f|QMs`ab zGS~=F=7k{$FB{KW>sMvZ%HE9f^xR@oZV9pJLxxv~a}h!LcQ*gC%2F<@=Q7`$t7C zYqCt|IjbVzqq-LYAxgxo+f+83yX`t*{WEBomc}7WLo>S9Hoj9A8|K-_iu__KmIvG&-WcT+FPZ<@>MS#260; zou`LOn!`W>pi}i#fd?u&sXi-!F=0W_c~9jZ6$09wP4*AlBaN3Q62+vL7~gvwWeh3L zgN))BJOq3_pYQb#T$EASUzVk#SJ@_9;TPTOoIoB;EyqYOB*YeG>ztX=jr7s3P6|ln ztvQE|BTC+$eFZggirJVOz^%b~J^Nqqq}Q0v9?ue)gxw>pHWr^BXM_|h19x&j8V&#q zB7Z1X#S=_Jj*CrsjT!3qiR_WCo91>n%P0tQde9d2B08vEQR&vAR>N9J`qbJf4yBBF zRaF{Z??!n5&@eTJ`Od1DJYyDqqg>alwujYLLLiBg_`0w`Ru1iZ)eYc_*)F zT!k@S8jG&7SJSEB_tY+D8kNK-C$HfR%{$s~ZhmD#Fwt=lP;nMVcjn^EWl%;TTK5cM zE*tZQ-$9S7VrlQ-VpI#q0em=fMege^*x~u*8k|_Sxh!!K z4NO-w$mIE;E3hF4LOi zSEVNxSCa03vs!ZNZxi3A@~TdRlc4mqe=m9_hB8O37>)fUMSAjSeE0H+GgrQmWQ2~ZBmPqm)m5$$#PQ=RWg%R zew8PRtFUN2iX!)xjm$k%>mDZi0s1jFqvso2-o$C=-NW0_ ztsgF~mK?U4*d_HXw!lOzrF54>&V2BYb7T)`@|b?CCn)8X@=#B%t>9%|--)G?Oo1vLrnI`4HOzjr zq@EPxpj4~V2Y3wpnc9xzZBo4B#5J~qR1{Yq2~Oi|?^Iyo7t zCf|Do?BD>N6M>__rQX)ObaL5T$%Li9pX!g`%eP6IaP_1QC(E%%<{0Pv1Lx9|(>f*Y zm}@ga3rE|Mo|V(HU19I@i257>M1;)|#Ch4VvJ2C5J1lJhK&KXh3jjl^IBX(A6XjQH z6rF-i4xik)Rjg@v{#qMNG*=(rKq`3@Xq$=e4O3{%zSZW;aQbqUPvKgjr9|_HAKL-&K_grK8aYis&m%_c| ztVm^l+ljU~6ij{e^X-IMqV>|$Mi~`Fcm79%v1A9hIQW@kL$rfzX5w#yI73ZXPZegt z(sk{XeHrLQz}i=@&qu6iFJCpJfR!Y*PKOJ1TgN$4E{m2t$-CPn-U`9bM`nr5y2ucG z?I{k6gYt4}W}z01_iO}hj)RjmazQyJCTzvwJ+;~ax^LmNVZEtSfp$RtkwuL%gfwUw zdcAMz-`jw<{H7@1nxqywWB*vcTZSXfG*g>8wxS!*WHXLlW)r1XN3QIf#!9Q>2(eA^ z^|Cuu2soK<60|E_{p?A9=A*o@ECLVJu;qFM!09VmSy_j>mo=87Jm(kju$Z;B-s_bv z^DSUP^g#@X^dX@|JjQUp3vC>zOkI?5sX{p4e3cdWguz6Lry4`H5G3wgA5%GP`_r|B zbwpMzqv1wu_+-YH6wPZ>j02cv#%tcZ@Gy@%7p%KUl)_K%#gb3qw=0OOa{FJ@qNA~C zVFokj#{46GM&&JB?Ew2R#OzTmHBr(cj!P`Y`n2R>Z2BD#06Mp3P@VAVxk1L^?NKF= z-P?t8+eJLEEPsFe}v*5*0LU_BM$A+t`Uh| z^A3>WR@fj8vTr&jB7)|M&W(zUQ}|R=S2n0(8ySi*P`s$HsCE#m0aO%`4uNI!JoP;kpeFq_?j4Zv2+kn<4mY*FkYDF)ljrbQUTYI#yF zQKz2SH>oBIA4&2~lDXQ)V`K;~B)Ucpe$GG5M%X9TQfEz=MyoE<|5Ry16~_AM;oUo= zRp5SP+3N?C)N4&SHKRpwL9Aue!lI(s*jO~iIMpRb$dU3)u&Gclq*%&{*BvSq3561h zglJrI)aFJpv-ubXth#XFUR4ho-dHHEx0As?@7p{#kiQ_pB~n^b!WlK|84&dy#Y|75 zsWo{98XD)|L@d_a8s8+t*J!ni85}7DIZ`%y`h^Z>cxBho6QS zy!lrAS}CjMsv`CH&pI?%pAtfvifv0vVmHjR>^~v{>FNvn*F)Beot7>i-=nS13(&E$ zvr`l@UhbDIC-XvRd}`o~{seN0Fl6cfI~^-V_`#Qu1>_=;8N|f1v8idv2Y3$VUe@3@ z?2rEOt9F7%(W6!lse9c@_(x@`nkYUz!VCpt;CuxM%_<3r^_iLWPbbyK&BX@x9`F`p zz{9FQ2<*&e_ctqHth@z*L%J#On>aL^TIV8NVYgb+I@@6=+OfEZC*vU>qQ)xMRmjBq z2YHHBRkH|{S70%&y=6qr=?|JU?8ru?~dFBfvJg z8V~wDWgI{E(>O)fT#aF)Nk%9OfYQ$Tj*b)8^;kNwmPRWvc=L6%(Zd1C*%b-3bGg^5 z5Z087aXHTuzk})&`^=s;{?*wJX;Q^FU5n0bhk9qLpXvBNc7Uznv@|pt!+bw{%8*gw zuiYQ?Z}JxDXZVA&j#y~4R11`V6spKV?^5G-;wGz;&2b+!1#AOC>dvcKiO>Rfo!eO+ zz1Z*C_O{1IsSUeIdM~er5yjH+SH^W#KKED&USDA1SQ|0q6-J%*%UFzV%K zybH_TdGyvawNJf|Ox|9l5)n&JTN$}IItz;<4&hVLdcUIEM< zO}+*Iw^u|jNx`*)cSS&dlF8Q@LF*#<0=lnt;i+an{3uMvp5t*6vmFj(U85?7`?kGD zakW$TP5L`dc|(sRk+zQPCyduCo@p3gTZ2kT?HbKd?oHjsy~A(epLSYk)zjhMawfHs zNi0*)zH2{I$Qg}kV(i9Nh=K_w$DnmctXp*eDeO9B>_AMnz3Pk0lYREfn;uakzBQi9 zo4c6p{Uy;Mxl%^@k2lI@aVtL+pBC=VjIKp>1|Xp=e6zwQUD~xTS6O37$*X-^*e?Nv zw<^OLea>IQ1>5eG8o)~HG+Q9c%bA#r=GCV&VneZJ^3 zr~>gjZBF;1mRa_y-pDj~9J?wPAeD-T8^bqWjKI%tP572j9^1ZVpU&jBw`^m2wh#0e zz?*yS=AxpFz@kcMp%byE65kFAPK!qG-LXIGH5p!iff|AhaVZs9ChYH=DwB9(x$F?# z5+3qrcpCAR$aikMoWR)HX(%T6-tAr&RZcb>&0 zN56#R@h-mqtYrdv+=9-@eV*BEl9XF&b_)P_UIJ_M9MH3W+QAU;k?KRcP-1xhEcxT5 z5X)v?e=2{gxNZ=W0|VLxQ|xdKAoN`8N9{46wtC1&8C0>Z2gfrm*KXmchc1s zHxJfhyW1jOtlx_v9Hc?l**C1&B+>Bt@=HD_e9l-Vb(q-wbhv`i%`?iE-qCJeo+=SP zo969;sm1KJ*~_{Tq=laB7dksdsja*PL};?O^jLN>G6CMR<-lK z>`9hAOt;;*J^Kp^hHd>wOuYy0!l?4IH1bL4i^Ec@k2PrBiFubcci(9~?6P)WPx z>_g+#2Kn|^dV=AA1pJtuJ(RHeq}v0!kN~RH6UsepujHSPUi?BJiWqByaPb4vE;`>W zY+5z!u~}njwE>z82)q)G;IYg{a}v@ql8Ic8?o;WkYj{+zUJp`@M~}lFp@=tGX}Lb{ zX?up}=uV|MZD})lYcOEvZD2(t@SCiV)@$Cfl6)u=&>Hi+uJyd`;a)=R?jhQ^pE4DO^n84jZ8YANy5kO=*W|hB70GMFh2)@aJba!hxZT0SZ8V_d zG60-=6|~o2Va4e(O&zID8fvOf`_8|oNy)uf8}ApX9W;RZT~cyQyTSDm{m8)t&GQG(|Sv;K&Mp4WTevp=~8{hr2k>rjG+F*IZ&}) zNak@Ujy~|UG;U4l;4Phpt~M+2N2&|yn~wzKd)bSz&qdp(v#%T~PV3SwilcpvHZvs` zF%>UssYtA|2_00jRG(B6@PGP%zx@@!vZxV9LP)+f$}lxMDQ)!(y1LG2E?%L z*p6|g$$Ozl!`rSrmadt z$ADEY2??s6In0w>J-pJk8F@`ib&cU-oOsJu$r-H|OxN{y4eo-)wwy5Q$m-zInv~F= zqsH=q8u2A#J&x1!_&!L+Ky4Yne9_ULIJakRcabmfsS3G}hwTDZ-{}s|6uQeEaXDy4WUQ&IK?1jrl{Y zYf?;Ly4VnXrbK;pg;QKOdAVZGda2tz*^zYkI^*K6v1^W>p7n$~gODh0#>cTYr}KP9 z`F*hMuQz_2Ch10OJ(8K$gO&RwSu z3KGvHr)0wpN+Nlk@OnBl9aa!m-TSXkK2I5s#l4(gDojYt?6kniux2F>1|Z^jq>Mok zm1HsnvE>`o@wa+BIhjFO^FV(uj1D}gf?v-~NQ^S(+M0f1peK^!dE9njbaI&)QeyBv z5TB;VOH-7bpeei@u22XLDVs6{XGw|*w#Fy3;iGHWjYej;*rTx5&1ad+Q-X`h6;?*Y z0$l3)5{FYvDn+kW5FNsCL-pf3hv2#{;6=lWd^xYc0rXK!;^GHCy713UPf`4A>U0*A z?3{7BV%o=aa#@iKE63FC?3U){sWQ&alX*01(sa3t7Ju#FZk+>@` z^96pH#Ceg6WiWDGY2K-)Mc=>|)6unAs4Rw0HXJ}sUBB9aCe~L~KG(T6INDqh?=}Q+ z2G;K#T+x1)$-j$bt0q%FcJcTg1EEv240PMm`7qY*LH6QhKpt-1RJhmk#8K{+*92P@ z6O9nR_!atgTCqg$LodJsd#(x|CrD^DX{dI@jAHGz?Y)9g<;fsx2g%!1ednw0_T&pCroGt?s;Wr#{P(A zMhM9At*7>=gg$|-FN%_rB$q71oVDLqe73e2&!$33q3$<;QCl-_i6*V$J}m z6shaIv!xDD3ajAA#~{$@m40PosS`LM1oE!=Ip0)rsuJL49oYOkQ%#}nz z?H=-ur^{F>>llTgj^@jgO8eLFghb~WodqP2n-Bz!K7iM4TpR%xdAjFK>hr}DG5f=6 zzTvF|;+OneD=B9!Z(0N{CEOX^GvB@&8{tGfr05by$sz5rLL^k?`RAs19g4J6kQcF! zy-&JxyvmupQXE`fvrL*G7tZZo((xWI4*t&^4iTDwN5U@>OQg=`Ua&&dOHERpc=sJN zoky~tr=##bwHJq4x`#R|!IdQZv1!X_L$wvnd#=O(zJ4E#a4uGDtb*H1A1zy z#3c#rD_L|sTU21`lC@6M6 zA<(qpUxrbjp9%luctU#S_44g!_p~y69Fot=-33N8c&A)9&-rN;=e2U?a%4@MLono$jzeV}V)ESE*=6#v81}1OQSn!%2aJR7$p&S-&-Q*T7o%_t1v<2i zCz}pCX~|`NpPy3iqiyoGd3&1sZ;~SjnPmO+7=%153iL% zLFs_3W&538`;E>gq0{tRtfTEgKX_qdMzmIEo`E4sJbX|0^wdnw#kP}FJNXbPK1WZS zZxY+1CTnr0sf$=LeRT8+Lj8FL71~)ko>$zbbKMO0>%eVTNubyIti{N*`I64C8l1*# zUe=q8=TSb6-*Y{z`cth zUpHQR=bN84t8_20L}PrwxJY(+VE}~;9^`A_Sn3R&G}uk54=hL@71Z7-IQEw%p!^0h z>f(I%O*p(!`%CHi204R?J&*P(c$N8=N<$Xuc!S{Dn7hzj3D~?Rgw~wmPE%owoA;j= zk&+^o@*JA3+lv}YdXfOW!boT9Y7Kg=WnC0iXPs(Qmv{2V@6|s#w9&*K@Rs$E5sqw6 z_InJGmw*1gc{4M4*0^iG%$_RwV#A~Qd644#xN-I+!_D7q!p&zv5L%!UcgZ{6caxZs-Y}F2yf+dA{bqM4sw1Q73 zREX`*g)MjLX=+O+b7~Gdi{88>fMX8Mm+-Ih2vOxQ&Jcj>bQS&j^&p1Zg(br^RGJuz zU;=8?ys;RB5r&C|3FWZgu2KSNQAWV7%cK^yetbIfy9dB zVOQ4n*prqdAC1oak@V#4@}j|We=j;{g*b7VDpPqeu)wgN0Zy0NAdc^`0spWaJjn0@ zOy8*&9?lu0GT3g{-3$D|VbiOw;LQ^tyka)*+1{q9|LAc*nIw(GDh*OMe$|H6zo*K9g|KGC57Syv%4%c+aV|SZDpwMb{tI>(c47 zvSFC9S^FGbWu5*SkT$j@n3hR@FURfMPTJASSWTf@QkTZ{C8$@iZOn1=G zIw;g&Ksq1_hrmnP7;qhr}b!-|36&3V{|22vo##sHoIeXY$x5ZZQHh!jytw(+uE^h+jhS6ckg|k zbKWubpZ#Nxz1FH)tEy(rSqcoBSJ*xxGfqD~QJZ;>5DmuTnvNGaD_OzY1q^;a=Ddr3 zH)j5+2_BtZ&u`jE;?rmCzZcq4in24~X@njm!+pDao%G)EXt>Fw@Y1h6zA0yJ6MgV2 z6IX2O1eMp~_}(>X=~&0(wb}CX-bg{GcO5Cc5_?%C)i9*6YuV9*j=m!CZ-X$4r%iYV zx3$0sfY!2gpdFh^K<`~XU8KJ~*bDQk?|voWyZ!2~P4T`3Udm0R7-Sdcq>ERRlu}2` zWiFWyff@DZe7iE?=hupk0zFd6!+wi%5Be`qC-Xz7wvBwaW$_;A9%N2djUa~oEU^@1 z@6h02*o6Lr_`Ais{oZ%ly*b#nQJb#v7!MDbKM02fLpM4jdozD{3NRO_JwJ`+*z9Za z4__n+rHmSmgiIED{U~T2j#mtGJaY865EHu3W(wM;Z4jzPxjjF0P2~Ln`$Gm0qctEv-d)ehOSC zS3_BnCMi7Yk_-~gvOz?kKa98lNv=@vj>;cX*+tT8JlNMLKw2z=#f8AxQHy$=vjJd? zJ}xCMXIHalz@~g!P^iGE#Ap^(tL>U?rV1V1W0ss-aysB-xj9jeS>*gqK%-G3ZakJ^ zvM@Q?{o?pCb=>Ok1?Dd$7yhi~`cXKeERb(!pb$z^k9rfB#&+q_@?3Lh2qzNrkdv-8B7Jv0B#!F6HlQU?9nT{Kmg+89? zVF0K6yF4~7ichpNjaf}`&K%NCN=VHus9dXVuzIRwuT{uSJpcmB0Q43SsH{hHk)WRp zwGckzq|9RTc#}s?+tq@uRSyNZ4Wy($+AQCWzW1?HMe~kSI)UR-@jlyaUOAOPFPQc;E45EeWnzq+^?tFJw{}_Hvz=0>EK+IA3*bxj0aG7>UZ)PWu-J~j zIz1mQ3u4#VPLl6BQpkcJ26@6=7hj2r%yMmsSD`N_F*&gfTr0V zA>%7{&wR8pXx(R+kPR)NcK#5YA@+J)EsZH4F*0x^H)pTk{76&Ml9MB@`aI-4i}Dc2 zud=&REc5j(BKD+ar8b~fRK3g5!A3d=#$y>ug;&s;tW+vXL{4MMO*1H#Raf{4T@|_5 zENA>J{G!-G$a)lG$*L)+gLx-QyI8kS%n@i|=x$kq0FQDpnth$2?va$!=dR&kH1H?a zQ?(H3uW2KN*jVA{pZqDQFL`cfOf%RULGDZ0_a|tk==>Qy8(ku!%0r`7GBFk(yppMb zY(>8W+x8O8q6CM^%e4PtQqE(n3Dz`?tD0GYIL|B<)wuaj&o?U7cl=43Dm9Jxs*9*3w5w4Y$_UiRw-Y&QS} z7^~Y#u?pCi8j7D+DoWM$;j7M2dg+8 zQOCs`{6SBicpVdA8Yg+0zXG#Zny04M{vp<0vgDXeD$Kd(WPqvnp4#!*El8O~5dSo> zZ(8r9Mn;)i* zC!_V#)pnf>xA)K~5>SO+6$TRR6;MZGd93g(1wm)2yOTZ(EVPR1tDD^G3l`#{ z1tqk~9t+lNlcvkH1??OM%98Z&N-Mf`QKkYiw*Z)FuW9a;O!s-Ohj}oL$6$|qty{9% z((Ip{#%!@&I(9WB#u9LGP9tVYKQZMQ8QiI?q^!&bSPInI;({Vi-84p0CAXtxu{#jy zQo3AAEc^MG&lbyym`0U%8@)_KS1~Q>-WwNdMod#_F>kS_O#qCdxQq6UA8Q!n`#$vR zR7o4oT`BgR1Qt*S%o8zyo61E?4fvDm=lA&Iogk>!-63wMoV2PUoX$!h z5VYx%sQOK5UVU{>bv>Y&Pw?n3tX;u3Gzl3uw7f&zl;39EmDYYs-2I&O;vsA6Bs5sa zVZOw?K~nUaq@dew#c}FoZlNp2k&lIOP1Wfb^eiUzAkxOY4ldh|Bv)&ebhl^+JIrOQ z7}<>jnsI8aLH1X73MbhzldGdxVF_ADR?pngR9!FZ zAMs|e!L;}LLw+GYtGrqbMsC!ZcvRU&uk=T1!lY|PmRW#9@Z6G9)XT<8lk^-zl@<<4 zD96n<6Pqh!CMVu%&RRuxH4yhxj@vXwE@>=wS>`(m?kWZU=f$|3G#HNAF!^f2~d5)(1^op@uum_+z&w3`PPzP?2AH;n~J$=71+VRC_|bSOvaQnlOOqn;JkHI3F=l zDRK^on=lSGN%JqF1z=_)YWq4M;Idy;jzvTO6t@JYaE+M1=8=_DFS>0O{%v)u)zr(1 zk5Xk%wvH)IoTWp|;GD9%d#SF;!sgYZk45A}c@;C50FKatogI@o-#d|=g%|pQQ~SS^ z!-w^TfOr)XLE6YuGHfT}qYks!6l(;oOsf{1RFy2;@iKufQn|_K>u#+EW2;& z;fl&ABg!du^S+4lLn3iq*57hmRsxDfyS*7jTlAM0zVp(kLZQrNm&)UXNuI?^ld{$b z$xC1u2Gv!=d8%HN>UtB&Pc4j3$2Axulc?#)d(;H2pIG*KRF{P%#Wn028Wdf-WXpl- z?g+=)H61t>W=RIl5|=)E-YF(}s~1Vig_BZy5)E$WgSU-v7J|}gAFKC1xU6TdMOoe} zu-8?Vx0VgNRNw9wqdKcG{|Oa%fCAsYz@D$+UOD30wgOHy{Csfvptbla-4~wXBA!fc zx^azW-Mu~fhL*(sGToM_q1L=#&wJ3Rl@;%frt?}|q6yeOSv?*AN6nm1#cA^Ww?ki> z@+=0V-Y%^M7O%J(#8*k5D_z@Y1SHlx8flE44SQ-Jbv+n1ITxP~z0Y`53$X;k1bG6F z*Xy{b85KyTaNhg%h{3tv_dpWfRcf}>;U6qbbRe!s(hDZ@=Sx&oNM$#YZI~yOJV$iLufSeate@GeNV0m9h}Tonue9&m zufN&wW~w&3f)P6AbmZmbb8zqHf};jcK#PC?xq`U==O|wu;~NL$eHzU6>^r~i)SWP zn*XtKzV{s}(*JUlR{W9)zcnK-y@7ACn9#*b1O!Q$PGKEIc-lS^i8N_<%PKl+&d(y4 zUM^w_>L6JplSJ2ks z*-e9#Vp`iXFqt;y`Mb924lw^b>#mNI+;BP=ZJ+mhXaFALQGs^|;m3N{WyfQ0p_*Di z9S+-ZOfr(q39|x$6EFD}zqb1UDb&;KhRyQo5YsaGhs8m}p)~u4YlgE9(DWpa!@*eX zv`0@YIT}#YVIvd$f6r`=5F}YJG32<@&D*d0Q0vs4Xv3Uxp$K$owi$rfh!7mQqnsFQ6yI(@acGemZUY5AeYgIxjHi zm$%)`NUTexGRq;Z+K2iyIImPWq@w|4Fk}5wbcBTdX87hB>h894yz=R)hU*D(s~vka z;`)WNRc$huXWhS`o`HN#aA*kj%_vc_;Ovi@69Son9}75wK9bjKqXnA>HT%+?w7wP> zsnr?VUAEs&+{8umeOPIBg^)svr5A2bA;q!@+Idu%oO?K?t~9YN)vUhMzcqRaWb8LC z95g;KDf1SM58jveEX$;QC1rQm)KyXyB@t4aE6a&ZhpNv_@y53n1SZwH_A3?RDU*Xu zbAyR9md_O#2J?DW5A6+{jq#OE!XdPgiw6z+%vA(0bwwazC4*HwkD4~OUXSq7>FhO@ zdqaPK0cd*P7B9Y((9WBL4^jUG)tyO!*Vi#W!zy-kiUd*!qJ8q4d5R>mU(kI-c8q>} z#zh`U4l&t!o@*Z(vk4j~cqDh9+j}q|>N_z^;6f=Hq$z;4cgQ7g^gR}2ve~rzyZ4=oWJ)RZp z*=fsbQRlSOXpmt=;Ng5Amj+?tHDM9g9E50+G0|N2lje27GPRPpRYy8)*f;v9HFtC& ze$s5Qxv^kUR%$Zq;J4D_XPpbauN=C@>soCZNC}erWsEGEa7>~s4Fwg|Ql?f-E^nL6 z`|$1ZC~DRc61rTLjJ^OkGO$`VT{gcUq(BUY`OlxukBOgL4lb+`P@&ueV99>#9+zV& z59b+i93~Sfzaz_@5bQI<1RB{MMwn~7D$cYMNmo@7t!RY}MMWWuzNWl?O`dZuRVo_{ zd#Ek?d{H@!;<~V9+%Rm++i`bncqsN&WRWM%Mv{f107CXDohM}W zJg=)-#5<>yL}SxmeLAgpzFE$(kS^O+LB*lbDwtvHphosl1C&7caQ;I5OvUB z51SF5BiN~+tr6oBf@FO3ZunIZT3oU7AffSo8;AD*1!Xtuchz=40%C|gdtZI#S(}OS zLT`Rh@m`kM7VaXYx#-kGqUzM(2L%P;#B;tXLJck;r(uc{HOZgpGvOV)EaM$gSm2-0F^QdE!xZ21JkpqOlkSHKWNa_^e$9svoG*Sbv@6+eh6}7HWyF|A0M=E_#d~dEB-GUVBj-H0KV)>o_|7N<8`T1Lb2!W@R z68^QdQXmiovW?NF_Kk!-ml|=sf(Fc+&O!s?E-j|N$AOD0G4)s$- zo8oh9ES(?z)JlKjI`Xdq%ZewwaD`@MsR9`8;U zS^Dv6lLjWG)I_=7x*8vy^^Pa*^+;i;st^$I^P7J@8Wi6lgM7J|ZHhU8_Oi1TQvP?* zTdJa4UF$E~s)M5UQvbRpH32{xcYl^bMi^`DCjxG4zH_?ZAcS#m(m}x?kMM0E%AP#~ ztb4?4wuGJ?K^xirP(SuxnN3F@Kh7|Z1wLo;wH{+f*bx-6r0}AU$AtEe;_rXUpuluY zB^V~8WWu==A?(mCO{D&xJNefGZ6%4aX@H`CXURDU{%awfNJx;bOP2STn~gTR)y8$< zm;9>lJO)811o`N3c7jHGF^DyUTb&~uoI7faCLvl>)Qyy#tDdyT zXdc@nAzu*eu#+a0x&^dI4!v5@-U?Yz00MdiQV4OJnpEDm{^MY2<)IuaYN7a*C33U? zjFY7ns&99GIL33(W)K79X}O)bEEp-!<&57-m1l{3{H1Mclm-5^R^-37ipIJt)&G~R zJ{7?95uSZTG?gFV^%mWL8_gw#?WJoH$KIsp2s~h}KI=I`imn*qJ+UKqOWfMf)LTr+ zS*$Z8VNI+GMhPs%pnpTCB}!aFLrA4nhoPYE7N2I^>vo9M8wpW*T|ZRKePc>#-CW_P zcy_jimDlaHsn28hdF-@vd{(ADbw=-<*E?^d*!GL1bt`zGnqaO3PJGaxBh5@em%3q6 zx+w0lL`IJS&gHV!bfWye-dhCv88rt?Q4AO_Gl_pb_a85(Hk6_irmnNxAHqp=qpDy+ z9_031x-~Ndlep#OeDjaS5L9rbB*CpNA^z~29G>TCLJkMLvoGLn=GU1nPR}#==8}#U zq@V*s!Y7+sbH}U2t&c+ENZHpPykUdoQ`6JDc&aUHjg9ewW2Jxg9txBZ#e9$VA&5N4 z0C_WkscNl13vTmh6Jhy*LiwH6Z^nX5wxV_3>~w^PHmxh+z^5w(#+xdCZtmN5?P{w6 zr`0A}{xa&~OjWpxtlA$bsntUHWx5b!8Fh(KOv^mksY3Ng6w_|E@nVT8i1<`wv4K;o z(siOg=5yuJo8B!5VT0$67YXOZWN6V+>P7PUu~}rDH83NhA#}~Gam;C-G`<2<2x?9` z1oJ=sV`{uzC`A@nejD}rM>7ZeR>k=Y^7dtXxv`fEpN4YY``TiqfIkTOmLeU z?Gv12n}%SAYxp>)^yPW%wqX4rU`ryEQW;#YW4bfDSN0vKmIkddOppotG8+2{K_bBh z-Ro=^n97xEwwvc(0-z^}v%b!lAtiEk%mOpDCNSf#=1k}6W^!HI_ojd-efQ6ODaXMn zjC$i|1ej&Lm-9m{#XE`Q8H?|-%NGo4*2x$?I^Sp@6f6d&_k61IBSh`cAWsEwm4nY_ zG}@_!Enu8`4qY+tIqPzgjN9rhOtANT8sp4a9u+cPe(i-&*PbusQ^V_?$rN7vBlfUI zKq-C)*Hv_7u6==9(5zsSmRe+Nf?0ZI;)~KnDd32}!Z%e~V=Y0tT1iPOOCtm$AW?Cs z@W)0ZG!;NUdZ4Kj)DIF<#^5wI-t0_H)HcAq=(rM53u!Km&tI2E{MFjamVc7Iq5{;94AtyYtju#bMeQ1`M{ z+~%%8-FXC@%Ejh+w5q5!PbK|jtxysoO}CsUA%>Mhxcnc7EMt(RLM(i9+RU>CB$m@O z80z0;ejo6j*r*Z%tQ$8y+cSU2l>TBOuguv1#hq0_^)BdjYNITOiatZhrQ^YwTC4IY zI@rr|Dsz#~fEZS6^M+}$h4%&w7u{Qg7aOgn#`7Sdnc&_Hgp8WbR<)V!su17s81i3- zc!4nnG+Kq2FP2FcX)mRx){7Td;rcUwuH!rEXQ?Z83E*hGYjT}TRj|^kSNkc{62ST4NSC(arKgvRNMv02!bh=l%aZm66 zKFhqQ9+4SGHaA_wn9Ei>vDd7R9(YrbZ-^KiLH`RDEYe& z@0#^)ziMtLqWPytc4P^FnynCiT7ym@51}JX-q;xy`Se~1CBCUI{Lo&6i@BD|ocHrP zZ<@J#ziD*#Z&h&H{4-J=>c$=qQ9`QovT_|QbPxa)h(6x4RS|LUbyvA5ejdAm-+&UZqeq@B15w>V3}8lAS& z@%t3nHE_7<5L@JJgKs!jQsGXz<>Vf$=NRGoc9~N*^)PB`5xXcF+YV{u?)OM~>l)P! z{J7s!mUOxq5L`O4S#pzD$`!<)AjBW>eKMh`ucRSj?5t)>HjW{^a0ShLWQ31-`L(UH zDM=*Zbi9W(6y4WS&*elXRdzh$+sKJ#+7|;PS6L049j-s0mc2Xgv;|wAu(L%0w&Ysv z_uckv+0p*$;Vh`h2mk!6)QQh8(3eN8u9@Tzj42+I&!3fMv%_Ae3ez^M-y41m`*D1S z+!&3P!QQAX3G7V!!0ov0^}N~swmti~;48TFYO_0-!Tda)aChBxTVm~1eKk8%Vpt~P zzL&ohaGp0(^xuf$E4ZbLth=v<4%LE$;Gk9KB~7TpRJBlkwZ4#>GHKg4R-O(RO0wVnMRm1q4};xH*6UXwojD>(N)c$v*WHf zO_FX6BrnmM2=(5*?7a1sn?#d~-llr!bKRxj17R7zdN@Kuy_@{328rfHy@tRVcaow* ztswjM0$$7qW16x!TgPpc)CmG)hErBiEJNj(854E}CjnSUQgWE9H>!GsP#5Joh?Sor z`XOXjWXs#$c68RBL&6fDAlP5hixMo#3G9x+W+9*JVtw1cyG-!em>s*YLdG8dP-|q& z5H5Kxun%N)-PIc4hZ9B?e6=IuS+{XayowAK(0m?6u3>FA^o$cJgfJh< zexKkYyQ2=S26*kLFoA?DLZ6VyL$kS7{`A*7!F%M>lCn$NnPtQkP!Wb)QJoQ2wW=#W zaUXVgNH%tTVofeZgu)($x0Tso{CJR-c4H9pys}P*5IUg3HhVg2E8e;#1;)jl7%S}` zhdj%9bT@wSv|@Z z&R>pSo9YLX&fCdFYT#!1GjsC%Q^<|;BOxJpI23Yo{X%fq1nPSxXq3&-&mfd)%ck#W z{?PMYhA)mkkN{b^;ClA%obl-x{+Y+4E8&dT`CZ~tY5ZGE8mKu#nXh&B`Zn{Ax9oIRP?U%Xp*e|%p zb0Ctf-a#Y*;mg= zp20k}QNV^t>lo9ko?#W~5`-S-zXm8VI0Tz|Jl9X{^Trz7^Yd6C!(Vqz0tE-}gm)FT zxapa1GL74g)d6b?)w`5vp{4$G=%Pm7Z&uYF^pP~=ImKz@y-UiFE^JK1@MMvJx;l5@ zOhdTuiC~G++{LxHR;d%#-k>k0DM&I(e!i|$ShugZWybt|d{IBus|G93*M%;lrz8u7 z_X-u-w7yQusqTN>(Y*ca?=bYM*r0Xd7-?j*H}RDc?WK&8sfhGx7^q*Zwa^D+Y*LHzImPrc2Z$Q zXp0TD(a<8bjYTu&6*kGD{*p(wE>gPKMr>)JXgYSyC^XR^wF*Jw9lJF#;ON^`qIB^k z+?@*#`dIR0dtcUk8*O==L$^oV7UUx>hJ~?E4U!s#Zssmlyy@*`B9Rk&L89L4%X0p^ zFnEigotg1H54v+KzMil_N-HZzJ;S1cZsV~^A9Fh0*1XOO=bodJ6&o&mFM{@+UO&7# zB`|O)42&NIhoo|39$6*WL0X^#g+SR3diu z#}CxAti2CE<%D&bv99;Oc6g{YKaN@FZ#ssRy!k~;!o9eDa&&>D&Tf&InQ+TS zF)qqK{79-ftu9bsAuXzzi-EA;%IPF*GC2t5#)RG3%20<5U)Fny4Md7sc97o@Hc2;= zPHW3!9XzhP(ftvySgk>y|8`kzKPKqNBe`zwTZwR|TcApFA(ePtrnh8S5|B}-RSs>D z95QQPL^QQ9Hl`i?D&;JYjk#!GY!q$F!h<;?ct#w&Uf`4m5pPSs{LEy1;JE!V828-R zp`mZ&Mnw~YBQ%7t6Hs7kl_`bIGqfIWX8J;&Z5=u(3U%n@yQ~keo5&fcOFT_kZZd7X z_SfV3LJgQ;BFZh#a*8v;AF?LGWIMDTGEyu1dS{lS-ej$h?sI58hv|~tn2a(Ltz~0g zTX5*bAOhbE>zP0&dFutvh|w(WLtVe#EdUOPKjAa6?5ZJ6aMvRE7AoP0bgj~l!K?R1 zy&`Okj^B3kSO%UfYj%)rIkk+{kZ$AGfOr1w+B$|xaskHBdx#fc1L$3J&7X^>*<(6? z4wZ&V9|H&za?Vzs;>|eWYcU`S_2Br5j}N{EgG(&pZ^mI&Eee~pX{5f zv#`-wr*4DQ;jLmHoqQBoE?P;$cEEqU<2(GYS{woh_BK3#FWaQLF%{;nd-V_|5z{ZK zWLUO#YvUzvsX^TcN@l`aoZj|W@B-=hUlX3}2EkBZoQe41{$Yjlas{^|t~X*+)xud} z8Jx(*T^7XlGUDn+?Y>mc&+-(#nb?u1VUID>=u|L0p1WV#(c^ZVMvCtMzV`Ms_g&OM zrb}i-Adf$2ZoNi#oyN`PNO*<*P{rM^s+a0O9RCc%l#53}A}Y3BBi*vXM5>8rS-oxt zxd5ko&(?4>GF9tVD3t);o<{tC(YziQ;2rkPnQrTDgt7Cb^+YYF<-6#LOE^$SyFlCM zdA-Ip0~hVZ8QW?xkRWlZ7q4k+@k*Omr4#vzL1;m>$JI9!@zRiS3|X?pBVU74-uU4) zC?kElV3cf4npLCO1r`ButBB*+$X{`0vYxd9Tx>zbh91fCC#1Z!it=W8h-QIF)W z;sIP@k(obCpQGas}Koj%x-tN>z1uso0B`EJxlF#p_Ol9+PNn?(zR* zb6^2rQ=U*l%{k(GG#`X_LHpnDOYXKzZ@0QGgyo~0fSqzF4|;{Xd%$t2u0)$6%dl>W zS@b%q+H_k@YaN2=F3io{Piul1x3~tj_B05|esn}0Q^xzK^C^E^0~6bxdJKMlRn|?4 zk^vo4tXa&pi<_>TR8nLx!WD3cwrrw7g&S1BgIq+K{3k!>xt zep*zn5{6a4G9*?`GdX1X-@u7;y=uLDuLj*UB#&3-{y@pT8m*yprN{Ud+pR-H!6`qt z8U*Y>Vj3KFEpCkov?$9oM&7MxEux7}(Tt-z7Od;zf*1gk(tsAm1t-was=#27e6aK= z6no!O-{ixIfzulfy15&g4>lgmJ4G@JV`if-(8qXw6?7x!_i_Q#56(Ea$;_Ah47IWj zm|APBX19)PR;&)KLDJpKM}?TXEr(zlXdX=dL<)yIuc_AcFXEYJ{%SZ`U^hMMvP7`z z{t4u*-*x%U`00D+367yq$pYKJCES5?7Ex0i<0=^KF8k5Lwju@e$^Iw7hrND};0i#@ zSq?LO=>9YZb{-d1*daoGH!=lhLJm8-rNkq-dOX_f`*}~)XKAfI5vko}-x2R91y4nvRfa7uv=Nl8UWLwTB1Lddi{fWdsF*p7KC`EK|A~xx<1)@7I zAQ2S{sKz2v7*vg2gyz!m@68!CF;J~cNPG?K#V)?R=1^#k9gOoZ&4pbBe04fp`PVCS zg?cZcrqL{qEUH7-yPwcG_-u*Rox^o}A#12m9{10d6)aJB-UJv_COBuckWDI3H&;^xKTAD1?KI5o>~C6~&b(nwxKszrb@*H!ACzXDNg_dw zQ&b5Kw%8Z>iRkOab?Sfi)`GP>T(aJyB5jkrO8e|!^IBJdCcS1-M%GSZd z0ur;E!xMW*Agp>m47+qWUx5QHOl*#e8UtVL0IgAD9=U`GNrlzUWk-1fNwrVwDs zYHI*fJz3*E z`A-@c*V02MFqqO)T1 zcTXr)V;N6+Td3#>WGC+?SB1L6vH2x}SA+YHV)P}2GdJG^cxXk@SpI=jTj~HCJLUpR zn^*sswOlm;+Bt|jmSGXx1}2el_C3|#5F#cYg9Ub-37}Ti{ggkm3B}MFI$&rN@IkK( zs-{CZZ|YN+idqHhDC@BfK7kPGOraQR>=Rua$^{v*uY$} zT@_BB*4W3d0$z&7>q_b1kRv%%EJgE!FrlXFMk)1QS(i`{&;mu7qAu{!CdS z5rm2@CHHtZ#j7j0wzVn!ol$xvi>OiAaef3tr(GH~udPoS;q~}dWBerZvKJ(-5-A}d z94Ns^XrZGA2I+8`SeSJ+L}ODOYQeC@SPQME(jO0JOTp6Y8hi&@CtGikZ|jT~q57>_ zen+hobiextvk$>n7emkp189yloZE=&iA}(Fw6^S7R}stYL4UqUa4T5^NLv>R&$h|w z!Y|gVoc%iKk?7u^t(WLgPqv}}-*O*zTl1m|z&w^BymfsFL%m~vs#YTlTtEQX*lxgs zZ$s#NLj_xIx+hnb!XWbpnCmnLWzlaTBH*Ai{LZc&X(zB8O=Z!-0%6VR8Em^cT!Et= z!`9UUI|%_9C-EaK?dG102@qLE+61_Z@M%|k23Z1fP8gIL2p_zD2M=J zuTo$?69qW}D$)=&+1R$`RggyB*85E8q}AxxkpO(X-Zuy93wYsOhPl8^{b_wBPSO{I z&OJ&((!{~yCNOl7lbv40ubRsQD)d>H?g@EGye&QFsqOv8AmRs^#$k_vA12A~TnB`j zP>S5SMP4L|EF%%<{#c2-;kFVQ>3qeZNv5um-p(EBJSDq-Ky?&g2#_F3LMeS=bYSJC z(F2)o62zu`dcCmQ;B|)rsE?%I22lM)XiW7NF_N@>ziUHU+IxXiTG7H}LIB^;ZCoP! zFiIaX(_r)paDekKTt>1b?Q!Bxk)I8(rq^LjbR)FIf7EvV48oQ2fEr>G+CD@E47km5 zr6ZA$EQ|=Y+f$OP2z85QuvZ5NDLw-bYl&Xana9o6IWc17jOm&HInEsK#a^Gr+M3`3 zm>NsI@<%T*QL%UMPoiW^@O%oOmg)h%4tzKco=X%OktE;{-N*Dt0*sD14p6vfO!%2O z{fZ~>~%q!2wUevNoFJN))g$>*=+@=D8Qm%!5Gk< zuJ92YAg@*XkU+XdCLUaYvA`)vJVhc*1X>?e47n4?v+-y-D@E#?u;iYxW?cn@7y@E% zNV4DhK+k|gIGk$|Ax}3*Le9c_ASX#zmr2SI!cmtvQ!0`{u`cl|o_3`DZODS$1$EfQ z5JHUIj1CeP&!fLMuzN_uM@LnrLO9M~5tzux1R+s|#NG*^4wMAq9ZIUa$B>20NFLZx z=+~AaLmqhM7t#JMm}6tT4H*eJP7rKu>rvD%aBoRX`o4mwtig=H3o%<|e>WrqM&dx4 zDf6xILT+;CgbAAF&b;%K zp^y`5VFnRL7;!cVS)ls>UJ1WVca&%T3 zn+8>gDB2a^W@nkuyDt=H@v#)h%c{YBy5&2%34E7?T`X=B3 zHSHtgho4Io)>lYhE4va1$FpN=3gtxbEg{)7oLo|f!5f;F?D&Q5lOhFyt@)GbZE0u| z-sMglTmB>M3StuneS4OpQmRWi;p%G+PT9^wx3KNj|~d#lQUC% zMDrDJ}ZOdDJh-K;@P6FRJ)w|oxknne)HJbs+GzohhcD=y#6rIgs|m}f-3hcV^CH#8hRdS8Q5TMe+8ocGzcI= z`~63AtZZZy9mAg863erayzTS1W$#MV>F+C+gJ|JPk^@mipYMuMd0_bQHnKDCkh>ow zyrx1|QqII{=%2vl>6_naGcmuh`_iCjIzX0&Bvm`tHo3->X*BX+?CP-LJu2x@!nx}x zPgLxM^MT)Ykl4F>6_c&y40ouqd8+8j9STSbZCCY%x@Irw`?9ZB>H83xG162JM;R&{2M{63DUv#}GO_jar2dfnBFU_-Rna z*An9j=bzo0|4)eat5ao)OrgSxzheJsXqGt&qg=OHXnRD6B!0;jw!bo%oJxD0()Ry9r1Typg_(a=U$)K!Nv@zpf#5SU18!<&6Vr||=inXh)ss@@vB}#{ZMYnsPOUg4V z-;>DEEeXjJn&cmeY=Uru#KA!QgU9zgX;fg z0b~V;Of1&7$0Wd>l^#+u&@Oz9Ke|L3+g)eh2cfx=)dBE=EU8Ld!7CR#48@3d@w95= z@6vOyLTErgF@qA+BPS_i(WW751J`OsEABD|cd&|V&AK3KG9Jhe(8}R?5E`WWWAXz` zT6MN{|CDUW8NlgiA`@x{f(H?KfVH`|4B!=S`jb>ZoRpQsF=gJ`S5p{(VQu-?LQSh+ z-JZhFHlg3&L&P;FATowsr9oW^jAD8YhhXvq+E1|UM$j4`jG6Rz7F9Z+b2^vG8QX|* z1Z~Yvwkcnsi;cSWlnqOP5zH6&mCRRXo%(!fQ-qdGt_a=Rcpv+4t|{>{Z^%+Ovm)A& zxxI0pR&^b9vGfp?7M)Re+G~hN1uLIKx%8_ASN}%1Q7BhsA3DOD?a{G|Ks#2%vQSdS zjZeR>>5SfR<2R!CfHA!<=0eRIS#c-je^~-wS91?4lqU(ntprkq2-cY{u>Uh}%=^>N zzl!Og$(#0!t_cIu_&150etMD$R9R!@4ztF%RZsw@PhH>jtkvWIoPXtW@Fapv-MzYP z!o7b*P|*uslLtFTv*Mr}gI>i!qEp?DrSb#vnwd1)Tia{zTR!obRHC|s@mT-f>p=Ck zj*K6DfV=X;FTL5Tk+%!3##mB~rpxdOSXXkLH+K4Clv$lfy0OF}1P!N7Uv6m(po}%a_Hv<*?+aI$;VY^a|Ozy4pR@}WX z#xlTlI>l4o$#D%$Na>|Hv$LLwkpJ){gxw2P$SjdvBE>mr>(I_VB~3ctIL}(!bXA8f zNYvUpeLW2CP*+QNQ`Rm8^o(n?XGhe+NjHJ^yfa*v1R?P27mF3b9``gGT{2)?6Y1xx zS_|vqcfai_xRe*GE709b^fluya1KM@$o0=L)qrXmke6(2zlo`*GA`GWE`K7pH@W{9vP)My>u8PI&7Q-BC19Jc zPS<7^uEQyhI`n^ZZ4a3J)g`r6la06*)%7i(XXkY4(P0V)j*2F!@}XhW4W0bcIWT8W zdbQDbdS^K|IuV;~5);n3$)CWwR!Y_oVIB@N1Sg!x8~0M#iyAD766~tTHPpqP9^vsv zSxdBj`kJ2?cNYVGTY?J%!prG+07?69@=4c8#Qzg!Ke7BujircJNz1jV?zE@?ODmNq z#4)r74;cE?@jcPC=}Y-u@z@e59ZApoEUCU}VRq9Za_qrshg^b>W3YC<}W~i)$jOr5xhHK}Qh;8pkka)U5$?psw&S9zF?W(7wdL<7r zJQ%r2*gb;#9`o`N^L*FKtHd6TvS32MtLoK;GTnCdsjXsec9=V& z3u>%HaPzFh=f)q-PzA z@cg-9mj(~&uJQGCt>RJHKy^35QsdaI3F>xie^)qn)%oJ~O?rH~$!zfq4%AHf%ztsS z{&8L~eto}zVAa1;yMK4J2*93V5HlX1cTXb5Hj;!~cwtH}NzU$F&@UxuQghb4_N$07 zz~jNQ19zhrp6Qv~4_`<$pGWM< zKhcBzyUo{8$~|Mq%`RY(O@JzUH$M5U_)?Ys{^BbKWenq2;sk%f3Q~3Y2dv|_ivfH* zl9nW9tnAEs_9-gVwg^S8xrs!V{G8e?LU4m@2g_?+^U@b(!9JA!c^#aaDj%yHjESUA zsvxECqzDlmrtlxW=XFH4oC)wzYh_e4c1tM_T=Zd+%KdwnAdmr6Y`jGTAz!A}%$zDG z6f>#kknGzLQMZB`8px***xu6EI69=&8=}RE&h#HpOVyI36s`54F#_<0F}Pxr#HGRw z?$Wp20DJC%EP2y&MCm^VIIV?o6DPFjR3bp`azdb@vLFOb4sU#K&**;tFz+Wih*%^z zk<7ugLgv|3;quMih^x5Gw#{ZoncO;zg$Oc*+-gaM^7@+^bX$jI<>6&k5Cp4rPXI&7UknYW4{TN5|-F*k6XKD|~l#l3<9Y+FkTz@?iCtX1(gA%yqezH3(9Z`aEgjgna8LBZW7?I?DDeZ&qyEFkh7O11xY4lv9@njy zn<1@_F!^ZQ{m%!oU4vV|2GjdTCUxQP4MM$E&Ax*+0>s93*xRxM(F(=fL%LHp1%8l$uh6oemfr3j9ZPzpvqVuGamUSeo9g8Y3E3EK>~9v z!84x3?dHa4ZA-eU_K;ISK9bk_yL^c9IK1dnTCw$D1h%oWb7N$4Uy<(U1S@3>^%E$X z4`vQA{VpmPfM@ip&G8L~%oHU18UYm9?!+PsN-=!2`%_)q>HSMdK@N<;yc) zW()=53c6`_z$@ynJyZJL=7Ncaj_LK;m(DS3)AF#wvbNus3l(44zEuQ`|GI#Auv)ILmjZr~dj+PKLoqWx=vS;Fw09fC$7&UXz+vzFkiofqSfzD$ zJasm3H(wdRX0e#7n2ETl~CG?ekIzlO`wIryVkSepz zW74Vp$d#^8@3SZ@s0qi1JT4qMud4MzqE*s?@hklelmijNb(Hb7K(b zil7KgMAvM)u_C(BX7+%RJGf`l)lV);i;Uxm2=SR8y0g(s#?kTB2#YimD7;^j+Go%p zS6Aj5aBsJ&$ZiT2s4^sQ$lLjYKs4!b7glv%<3Emx*8rtB%mY+#KOOihZpFoP)7x=2 z7`{ye>0p>?(iE=Xp38ibWB#htkKYkWuN}IqF|e7v!Yyv_Fq7+QY{ClE&w>a~#z=%a z)k9MQL|mi?*QR~C+9c~NDV5E_UD?pYDVoqNEU@&ttW^1LFpKcrvMD#~gKt~rlwBg< zx*e)jDr@!Tw%ZxsvN_#bI)H=3c2s>g>pek);jNqULQ(c{iOG|yvoaTvFfPZ~cZccS zO^qh_)|p_aAYLKPFDLh}aE1WoN97`jMUBV6*u?v~6OPK2W!rm*yiX{T?nXCB{meOe zrp0{?uv<%x#tbq1+i3Fx6$aXk42j3mXb#4mD_dotW^%Z3;hVr8QEvVc>RjXN$^r1y z0tuJ%1|!VU*Q+**XnFRt>UXZ6XPKkT*q;fyf+u&QKjd}; zsiUY$5x}Dbrf9n4b3iJsW{v-UTzv&oTv4}daCi3r!JQz%EkJMx!QI{6g9n!&0fK9A zclY2hxJwvZ2N+<6;c;KpyYGJY51iUnXV==@tJms|==9B(swH5;q*=qY8%uGDs5JVY zkLP#k{v1*rGRj9w741)!IAprzGS*lNuq|MbuS>>eQbXyJP3!H8S* zuQyckHgu&%-#;N<hXIL2ioKs)kv=XE|5GsIqioK!|C5)0}>n9jC@TP*6}hOyNCrA z5uKK~^1Bgct-kC>DbY<=725yx{r>?zLW5}g2}W26bpO6XD(JC%n&@8U$j(iQioA)@ zr)emd9^{L@5MkGEw-t0+B`tAX#Z&D6XGzmypCZYTJ$kT4FvZZ5dA14_H~c!%5VL)= zRrS&>!rq=;wNjH4vh?N*KU-gYv5GPqI)Z5<#0hU8-gxUVus=P>1(9d6MEK26nhx^DkFxx5V75U!@Mo*`MQod`*h?7SgehNlh7V((>3eTi(yo zl!YA|hjgT@DRN3Fe41ml5kH*OH*ikL9OFV_8~ep6jp1V+JL=))o0u_l2aTE2#^=JJ zwM#bw+-Z<_-jalGHeKWvw%Kj@1d_8`%XPH7;-X9U#{7{Pp7ehVmHD8?xii*E;`!;$ za`quCf~aJ^@$c06&tegMGh4U!G?xp=?2M(-+|rXHK<(ZmFWXlSn_Ybe(Br! zxvfTp=$awsWl#E%9m#@{NRi@$%MXU6EfTdJl?1MA_{ zJZ}}zU6&*u#!3gR*6^|9RoDgnRGqC=ML;R}svrBebKux~l$uD#cXuaJM!AKE`61BK ze`X*-bWSuNL;XIlT@3}0DG_JnIE&Ldv&vgJ_|gEtkpt~+hff5f?9z?iW;ktZx`aIc z*%2zw7e~;5h!cJQCga%e^kwbox}=nW7bzh;4jMBud4o#Ky}pk(D2m*L>;y|WdTSoI zSq?`ijIlqCSMnwrZJRSqGKdIzY&v+*0Wqp^ak7Ly!-RIn9_2epZ_)y`!z*FKvgql_szU$YACU6~R?hVCEYo zj{hy(!dpxFw4hWsMDENoVOAwVk zKVJ7chDCpy=gg7o?TooCOIME*7G6?Vsi008I@bLsrWm8BNJ%c_jS?hiBe>xk=TPG7m(bG{KOpknS?aF^;F@&v2Ef=seazJ6TU-|8}> z>Wpu7+>qkP7AzE)&W2{4qo@Q_K-}iAgvR4j;K;~Ows-0!o-Zu53e|sE2fq^NWysci z_W>~`SmI}nMXvD!012%e20LL8y*Gqb^hrM*{o$WjuugN8==&q;Lwb z5EI5ty!@3t+W(hu5P>1L#UGtH+@Wz+Q3O4}g((zKpQq!8u%%$XqHPLZ<|j$OR_^j( zKi?dBMZ9;=On-#D2UU4;$2Vr%8d|YSYjmNJ#Riub#FcsJ)@2LeYna>J(61cqW=c>|`O8Q+~S9 zYH&A4Kv7{T`$M0P+wA^`1ybLsayt|z0MH31GEJ~d$b-~JtP3vuu>wWBpl>u@eXTcL zlMJ@}U9z^KwGiMw(p!P8((MRv>2oR28GDJ|hFJ1$77Q)6T7A?ARnBxuS&6-gF5{0b zBaGQ8WVsm6pmP&%thu(&>__3&p_7sE~C6k`+8f! z)3DnZ;*x_Px#GO3{CBB}O8wPB$pDAl@n2FBXiP3HK#21}QS!4L_m|&-41b>Cn(G_! z&G+dft}VE_SF@S6vR!^bV& zBh6lrLlGI{8E>Y?7q{%{;cB8qie5o!oeOkdh0seG%9n@)(0nsVp?nAb6*>IeM&_q08# zfYM9g(qzJv{wwlD3^UUZ_mH5_^r zf$$#7&MqNw!%jY5i zXZEdMEz1sHklQu>V?*r?{LRs-Gn5QjPiMz?^Vu!fR_qY^OXPv$zM~cYLhF4Arai2~ z)O^7VUp;gV2~7`&{KdG{?_z|2Cid1yN|N3e`}XTrGZQi z*(qt)mPO0=Di&`;1#67kjFUb5h=#U#h*%z8*+G+yHX$I6mv&nrBcVG=`<>SGadt?9 zod+$E^A_X2HmoyB(KK{0Y|*8!t~}{Ipq(1G z#E5~_RRn3W-5QWki#olkG->-w96o25M;BhybOBtKXD+N~14QJ=w1BxBe zwgNN3=O@ExM>WT+-{U@^wu7gMP$Ic|hod>Rx+H>GczH!57=nr=*tM=QbYNds7 zwx2Z-`*969v3*vQA8In|x;NhrG&bANOgSbsI@!D$*Z`*XipUdbPwMykH1%x8nd^6Q z@A;PlyinSSlJz#2k!*tmZ~h$kvXTAc(jNf3?iCicQPhv6t1f12WVV0&HVeFsCX>Mgn^-{yBC zFX+!{Vs}#SJnJ(dZlKaqvf_gGIp`R@A*M7^b6o~bntfR1C?-*bH-gM(mx8<=obqB@ zQXn;hl{}9xRW2FBJMq{V(s)9XZ;P|?9c=~Ou<9PHMv0142_%A zaIaNP>(9<#noc-$cef%0UHF3MJQ`#MvI@4ox10IWugZeY)CW9m`3fT@XA)72IN2Ya zBhPLVesn1TPJ-{?dP&w*l`tfd1PtSS+XcG<8UFF)Li<7O2Je=Rh8~K@4&3s?9)fKS zQ7)JHkMJ>LYOOcK5pY8|-%&V`t$V0jl4tCR|MQR?A%MaN6QVceOso%c;zJ_aL6S>%ReDLj5Ldte%&Fa!Q5? z0>MXfeGU1k9_2WWp9ddmx--Mdr?@~j>6rkO-wTnQ-u7x7beAg1V|({*uVpwA5O|M} zBI4=nxk~;#^^TVMkKoG zCEB*iy=_YiimhR26>G%K;(E{<{oBo}(kjnt|LMgCbppEKvZ3+$&2gx_R!0&$0d1O` zzu>2^wMPCW6P&!76kSLrDX*IW2T$Q)fS(@~xA7X0vxy~9)5Td9h~^RpB>W_`)gk;M z+NJKZWy8M(PTS^$sFsMxL}M>8ss0`xVr>!zUST zo_-7T11X?!81)*YaZLW(Nqw5DP2J-2eGFgh+laZF8J9mU)<{|y){|HWPiojpCi%tr zK!2cinkI|06~t!b1CwO_-p#`Wuzc#o&Y}88qVr*NR7tBDl)mG@ z=kiyP-2YP2|8aZc_ypyugwrV-P>+&dvcFYY6j&?MDxWd=bcnHxHPNV`X`{Zi-cmFo zw?RGdy-hsXuY-$n)!zl^<6=HLLU}WF@_W>4tz8@ntr|8^vBd-X#J~|8-Cau2s6Kzy z&54+mSqKDb6-pvO{pgTCL3fB8X zp6fKv{>VIZ7i+B570%jjc9VI&266q-geYs|mfYN?TQDAERdkyiUj6tnmgy)nA}l1< ziYZ0omq{i_)_yJ~o)WR9{w^;M5H2V7{7&qtKlg6p07rey+v)SE2u+}LT`+F~V=wdr zR#zai*wftB-C~?YegBbJJ6cBehW9yP^8wRr=|W>cHK)JT_Nf2*i{20;6N8sb)VKH` z@7L(YcuL(HEP=sh%8<`ol5j^-YhIjJc1)W=BW#^X0I#@8tKD+WM32BcVo+wkeLpvf zi>XXO3U;Ikejuqc!!!?Nf-xfds)eM1BB<{lJ8wQYNWBlzcs`|T@%0(r+hEY zd|bzukA>}TjTfHSwmk=t)5*b&9z+dz((^t+IIub_W`sPm=IYw8nj*0RpXm0JysqLZkrxwig_|z<{YK}1 z1Co&M{diyu@;BuGxirk8dC}KxF8*ryF4PWeQfy6RVxF}zU27srJL70 zw5Ktst>n!+(+1D0=h6B3`Gx7vn8J0t)G^MX{t>obeI8rn8Lr_qT}u-;EfU3yNtJcy zWA#>ddN7pC0A34~oze|;V1L-fKY7yMN{BbEB>kjORkiK?r_qIvl}q4@Qv56m{+gh(;OE8<@h8Qe7g+jNm1WlE{r%kr4*$Tg>2WS zggL6Yk*Gx@0vV4{!LDH`S$Es<9S?D0D#d~?z0V7@`!97V*~)%gqH?cKk00OIFlTPn z3QRRFgPrK&BsrbTi{%h`98AA_p_yUytvd$@g<_~`>`1AQ^Os=jT?~J+fweimAlq+L zB8{SUF?Q7}8qg6F7oe6xWtGfi^_3HH_zH73+TtQpT5AmE(e#{(e|D3Iy`Q7-7!sR)Ydz^Z1O)Ou|CMz5mS-+CIp0QYB!YptTx}#zA>dfT4$a$? zz>bGAh`eH7mvt~h%ZrMvijT*9cAF6m)wDj#2#W%<{PXz`FRb6}rn90!b%cqyLiLZU{|?;_$TxkT4xhGE`zrpboe97&6vD5Up#Vi}u`fF}Xq~!z z1%{+A7cw_v5{%Jdc6}P!-frVIThbjJIOKkzAj1Uk9LACKNFTA&rupG)Afr* zzXsW&)7DhAI6`&fupV-{ICgCpra_G=oeqsVZG7=sG^=S9%|Bt ztVO5EDzh7L2n2L5p2tTn%bL~?{($Do{>oW|(h{tpw>@<_!%%^h0;e0%EHt>)&pH4< zvmdrgtW?%%W_J?U=&E^NRN&af+hqbSTBILAPS))ippUTRu51St43a6B#_R+&oXJTk z-ZafCWBRMUVf24CPu?`Jgnm4ocSVQh@Oh~j+Fbnn{BX0$fC=yhD~2#1S6@8uSH8Vv zh>iaQLGZDd?TvoUay3UB^E)xNoY+J5=|QVJ@5g zBJ)bzK@U@YuP50fv^_mkT3po0_swJILSG*Z8uxYl?auq`*bqB}`5or&bqqh(yl-xJ z_awkhSqqs|H)|O5>K1(vJ6$QR!W|cvHhMFx3ss%Ilm z)I(1sI?SUI@kzZL+SUB+b<=(DZ!6ykme;-EXK{#7dUcB}Tt6=exr`7j;A+tZm8F{RNcK*p)o_biC;J);5)xue<`nq^|<6 z$#UHn(0pAS{f`c2PyP|C1B}!qm7m=^aqYYMpH+~(LoXJ1eyZB;s6wL}`se}UJML75 z!}&B~#1qMHx7rP~lqucsgwCMA z;sS4V&~^wuacZs+x)t*Wb9@uy3AG+Pytu%Th%}`sBlx&6*OF=UMWNsMCRVE%{xZpo znTsiqCl|AOQP9u}?Ri0}*@J+caZT1aKm%_nf-W-hcvK|^)j_dUy2M31D(sZsOzZBY zamUhUMC(Dr82lw(^z*`R-@ctMN-DFG%^qWOg}71lv})Vmy5$I1(cOvi*{l~$rOdy6 zO^wU!g|+~XywH$G(nsx$db*=_N=?y9UVXc-(-GN9e&SuxuZ+5e{$i=S@onYU@($0> zA_TLO0RbGHSkIL?VSn|Vq)*vD{jfUm-5DI_c* zQ<`aLRycj-l-&+bVo4iRvLk%wz0r0g#C-lfCtpZJAIK9rF9SQDPWw>XHfu9?ltv^1 zKQo#FZ&p~&=(+<4D*T$t_<|%XJt{MWV>Ae#jDY z+T5o7@w{*#IHn=Vle5Y5XWDw)jrb^3wt(@^(#g)Ne>{HS_k-)F zyS2LuuDIhK4YkiC`guY3DkV(nmqvo&T+;e*ch+K18k_*k3{0$BrOoda-m)e^sCjy> zO~txHl_D6EPl^7Co#!^ytojYtTQFbi#bPsv!Sl)l1w-(->8d*>IQTWcp3YHTRvnm- z|I9D;x`z2H{ORO&#%VkW<|Fc_N%!$Mc@rqi^48w!>v-;wb9>7Gxi zu+e&}?Z&+}B&~CQx-{}qaQ+bX8WX+B#p7Qr^GP7`N;YigsBXxDdUmCDz59^=GiT_T z6ZkqTYjB}9RYsgOgFfG{v7gvwMRHGIeF`Hm!N)%r7||!4HIf0`wCsE~(DfV-z2zc< zfQ+oVb+-4tGgMPd$y zP+W2vQuxvjn~^TkK^)c4O&iqOZbDRD0ad&=ftv_&k5o{Dk(2FL;}rdsQpZ3crX`{m z`%I>WfJfgUGxwcP6i(Wlh`Uu}yI{GT7$D>NkEj z0)i*~-6h_NeJS){=YQ$GuNa7l?eMP7mhjHxy=gz*O+lQ@LbI9L9NmBmWgKRxvc8g= z`B;WPApSAR1f9bqgxT~acFEJfjo^K^FCx2SQ?k4CaF9KIn#OD3i_!C#QJZ7|zb#>! zuH%*~q@FEOeW+tKR~h*a_d23OTB}SnU^Sq&NR?^>kfg4B-vx2H1>U=@;`iqDYDdeubL!J{5BTr{KR_vHDq!?F zigE{y-#twE@g11pNa3wyQv3R+;dZ*v zcq5gTm%ZnVp80g4O78E))p^4uGydJ37mb*oveO&xlKHIKAity~l-*t(1sUtdE4tSO zD@*B~dSk=wC4dEBcTI+1`yn_Q7UVzI-uv7As6MRVo0u z`!5LfJ3k^MEyxVjF-WXuWq(uo?GLHrxtePy$-}*Weclizf4I|K$M@9{eZ?f%-Z2v! zn&4|qbXcoK!`8Lq+#WHI7nMB%UrD_{4(F02rb}tT5>lY;00q;9J{=#kn070$58wN8 z62b`N>g2DVvl7gl(h-o37{X^uAo;#|mt9Zf$3>WhPzcgJ*3-t%yUQV;ujI!PS$vU~ zL3jCg3l=!iw%CBRa&Y;P357g(Gmzs25y_&h>aut@iC`RMDlgbBzP`5ep)t;O;_ltn zHMFbQeXy!%##2`^Av~-@n6RV8-fHe=n-RnQp$Hu{_PJ8`>RGUf59c_6uvPvU+iE8Q ziVFTz<7x|Lcv_3F@%L1$b)xnTv(J(z#PeTb_{s*FE5fz?Tx;%iBU>Yn z_|%s*c;%JS2|`V!kl(`}OY;`|nX0z! z^?dH4juQwQ?R_uVNqtZ+cMg{bTbIxt7Sng*#-V1TUB=PUn~9x4jjHwn7x z?*p)@CE{l6LBR(HnfV32#_duSdAsF54HnCouKKVbYa{ce;V550a60os<>1KFI`PA8 ze~$CIiQzp`F458*e@F~uO*jwY>z;!vjvb#kD7}($j2U$?QaSWEIrtuA&gV>$g|V+ z`aS2@h`Y28!VPj>&tw^~xi^9yH@8}MfQg;sr|5v#I~U+gIh>EU3Khjt$rGF4!VAem z@z`aDZ2Q%WenXx!4R11MRMjWgj|KYKUdh=$VdBe;wKT0Z*I z{Jko8+T+3EUZ=sZ)p=R^sfqYty~-b?=|EHmb@zz)5#qcum|UtIbOvZ7r|`p(I+w~$ z5U3s&4;cEdWoGv2{1)v6i=A$p!s`J3zr6e299g~T2Ya#cG{%S=-MdwO?IIX7(=5Mk zQUQK*y1z8C_nS>W%UO% zPz5HPMK2aWj=t6SlXK)wC@Nt$+!@EeZNmS@OvNWlR7y9bg3UXes$o$#;G3((?Yj~Vj0hM=3$htTJ|@9e7XH`EX0ABmQpt;*<;eVJAq+-uEiZQ+ zgDfGSFalG}wx^s==RRE?2;VCLX_G`fV>-VtdA->#;g45w1@6R&)7kQ8k-$K~kg92zxotgMgU^6E0$Dj~4oa*9cL}xEbhkkv;#G zT)nq#G%z=6$M?vMaN4AfN~g;I!79@y-gErdjRtV5RTb%eB}OUE>;5Pkfk1=!*Isva z>NyxYEpo|@9vj}YloDlBfR7-aMts~+@^tBB~)UGUwujpm5U*kQfHq193T zbelRK;~@O92NEG($fZ)Zqm|V_*|`uUvxI%|0hrw4x$YF-9P0IB zsAl)kWVT+2T(}WO#7xX*5Rq0m)3oTCPg3dYv$4w9Nr$bjjW(j9#nJY&o!$29m)GbHg06Kbl}B#Na4AUQBC$w^{Xo}cVLjfdT^(6L)-5uZ(m2Or zV`Xi?h+Qm>LubbIkDilO`O@G-h?euf@r z-KxGSa_JY&V9`&iI8x{y4gIQ9m{-;$umD(JxxiWLr6ino7KZDIx>D~~gAA<9N7Hn> zG7hkFVSsfsDB|yU=xn-DUksVc)3%Gd`)XjGN&Vg6)7?bQTYjm>4laC+RD>QJp{^(# z)tn6)%t+_!QSaw{Q90_U|VKUHG}wzYfS1H!N_iNWe>Uvm3Q#)%JeSNFOuN z_Ieo$6~TKnlkP%aW^D-9tYW@cMClR)qvEg7)I@7Ds~`~R zW&Ctybg~AMEpP8RCyD%&wD~ES5%!pa|ITkOMTDzQ{jIs?d6d7Ah^_iU>Nf3BK8s;M z1G_og@Qu2?a00$cK~_CW}-d0R6nHBoaK0 zl})p>0`_C}nYPuPL`u4GWNF}H@K_PC#oX==fSi58KNw(BNh zZk}VNYWu)^4$eXrQ3Kjh8(f@@X=b*V{QgQRb{NvXNtm!&t^^9G*PE3J+w+r)mv3-T z8&iWUUC3%uZlVSC-!@!acxg#gR5;rAh!On?49RuAxr>f*`DEH#nkn;Sldao?ehjMJ z*x6U%PNkLgCz&&3G3Bb05T3sLM5JB0w2uz3wm8_8SxDo45AWj#|r|dh`>cb7F#@ zKL+n$oj1F0cLr|T&=zRMMZH~KEw-g@XG&N0v4ZO7Gk-Us%`CBUy?DjxCpY=?^9+^a z_fd0h4qO+()IHb0Xiv7NtKgfL4~n)c=oc0TEJgab4cq=ejTRbcI+{ZkFoEK^N6)an zxJL9_22wv}_2s0Do8LBz_W)H;VrJx$t=GmAA4vS8Cg%p0wGdF9cQHq#^R=wH5Kf_P z9;rcvrOX@adFF{k%o`y2QM}jh(4bOhK*BOV|L{fK1Si@GH_C|JZu)7YE~Ot{#AGOz0+8Ki62R~RxOV$ z>9oI*i-HabI8~BKP5pT&pGFCR>nvQ>B)C*yxnJxP{AdzbD6G%taEsT9 zQ*FTAq01tqpa5LaB2oW!U#7_>AVy-s$sNy~T>N z{^MBwVh`l0S&*LXwRgAs{g0AT8|f)@Q05SrUzuX5LHvl{P3^WB;e0hVYb$n9Y=SpK z_7wA*;w;7Z2~LwV*{<)U5OLw!&1TAg>JI(#VOi~q=jIB|rf zyPyd$5k{scifO?aR@L_8C8cUOieX{YN-ub7i1kx!$A-+wj6rR=E!4K3T`$mb()NOn zAjoi0TLRpk2d&ZYl9Q3Yiu&YTmdNnt|qmgUOzAuDT zBO&#Z0qjTv-v-viqxpzBWLGmRO!E)zK;%=>P(LMA;+poS%u-GSkZz1?cR;hSE=f;p z72wSMQw`DO&Y;q?#dyYdlZaM@M+#nNCCskJg_c3PymRQoXKO&J%Z+Hzg0>3mAL1zx^enMy3G8%sYLKz$(%X` zVzcYB70|3wqtp`g&RyaMq@HKVi4@+>d(@LD3WV+H#$hn0LnA6@Ay>vS$%=jOl#0Ch zF*QRKma4xPU#4Qf-R7gDIrU~eb#_H$@Zu&U?qf|~JtAE{K@~9H;iNy0vIAB2F;x}Z z!prG4WieX*8T|wPb;gqcXzEz!ue2RY+qd~=A(5la7Y^T>RlKzlP!*VXOEh=zPvDGi zbHF&_%^Y+6jjEsJPaa3HacX284k(se1S+j}n~7OYxh7c(@e%j>P;R{jPc@70sYzpHTXDf8(!0y$mF{>sK#O5yKaG~4@}aoKqo zqR9S)E(47=o>#(3+Ke%4T^s)$jn`E8&l)qvY9NY3y>57J9^1%S2g7hNlt0U3TUx)* zLSku`$a{V;-2lw2(M=JRG!u^G_^^59Ce~YP3Nrjj(Rx|XBbr9CTpoyZ3-x{$_SoBQ zKTP>xZ`_BSKlZz|!lr`)u1_T}aOv5e|!@|(JZXyJR|B^Gq zS&d+clTVDs+e>TW`ssV<27~)vj%0dfVmy#@WM`B_1jsz!mKXJLaMHzJ3A5tsB32=v zPmY_7j^v2Ckq8kBeiy3)YZ<5u=>j%;U+ABrotYb(TAg>%EW9EcpOoW)#&6RN#g4YWt*JI z3MJEAgTyS)#%sFT@jX@7v9NOF0CC(wA1tpkk4o*{bT9BQQtX(RJqk3hvs2Z|PpBNF}K09q5=N zyh4B=1G7onWq>s%{hNFX*XQ2LT#*Hj1ID>8x^`Yy>u7O5l*>nP2@K3h4Xr${ql^GQ zYkRNI$c66wpD}(yxUxh;yJxdA82V;@E1AHcA}YW7BFwqjn|Y#KA1=+X3ACIf4cNOf z;l;l9KOkLsjQNAZOpa4DEVxS^472-=xrD2NRfMaYD4nF`Z%(et77Tn0m7L|7qfDM` zae&;_-=D^R5r}Ms;>=`5Bbh+1busDhD*gJNCB!qtX?VV26(2qo1phiM3F*z3rtx%C zQfa98LR0?-LBm`k>JBFCz*!Udt`!l(q8o5eX&+-|8)S+%IJD6Y__MiSlK#D4dMN%c z+mG!JLl!o@8Tq^8Y%SG zmHG6@#_>pc$W^k6-{{WbHY&LYdJf+c)0;qdm7dw3Y&t=s4ks?va%(L*4qg|>cirf~ zwky>l9w!5fuxG_Z6m1#NZ$1LVhEGmFQGKy{2mdp`WSZ6ooVCNfkj!G^peyRah`h32 zedpm^eWf}(WXN%o_RUCDUNf7?m9-k2L(welg~;T$UwIO8u2B!yq)pKX zrMuq0<4>?FsPb5>xlBUwnL;24McQ#~mBBr2yIO5X9a>+h*z;Gfi|~V*Q_nHpl-JK# zn-YaRB=z-wkH>U3NA=j))`(&PD^$F<*ksEc!kejjXVDwN>)drSx<%p~&MNzjN(W&@ zgQfOa+?Iq!mY=O$<~zoC%dak4?C`HRzTDknilw`t{x*`MX>(!>Q;EJ8(Jh{RA^%s% z&JBH3H1Y@UA~P8m?VGEf7i4n&hqtWBj)9fQ8iP3Hlp3^96lNPJoLNbJ=JfN;C7TM6hfmJg^D{36*m4zWzPt(Riow1|= zSJZ1ye>%0neQy!WTL^U0wPQ2?aVW}sAXYmKZ64HuBVOu+%j?p8PDvgO z$>t#J3p%nw)#GQ*QDNTm9}x_<(nHNt5;)!IC1NL)vE{sc$s7%mQgP582y&cDew!3z ziZcHpmX{k?1FF2pPwLE+OZ1E89oSt9a4y2|_Z;eJ{h2!2D{qUmMM@J++e1@i=HOdbh>(H>I$xW{2kC<8O97A-a-cy6TkoH#1I|L1>;LlQ`z zKHM+@svoN>XQ}_z%YUL3i|#cik>68Pn>0;|4wGC^BBZh}FV)2ZA7x?KKE4I=swofj zFGuH_x_vNa5v~qNQ^fp{wc4-(`?IlqDM=7{!XHQ<`-sub$u_J)vJi=y#MaIQVI}) zwRsT-mQDSt(dIl~yBFQ}duVq79W7Wj!x0pFjOB7P`yQJn=(kib)mfvB4gC(z75=&G zye)Ubkv%s;@?nsC{0;4g5RMDWz+bKKIFU^$b576g8D~N*6 zR?zNemwM$qHc8qF-%K>y?TId$y;|y z^m;K)*R8EfUynynB+l9QOiA&{5|cmNwj9J~npxt`C-fQL7#WjBe2nuhE2|vA z^7VBi)vh}Cm`Ad=r7@s$I|>4BM&2<1tDkod%a?FJUy2cV$sD(W&@203;t0$6RTb3L z;hZR4qqtwZJ{|R-hPj@$I@t%;I2+9%Y-Cr8cd5TY>L5R6?zS`dW(@;$=kM*jcph+# z=>&DxlVOMk&KH}xa#hQ<#kILJTGH|Y)d+s$n?gT^oO+IzQFzpJB`Oi|qU%!HXe9$f zg(wXKoc`5mnjNvtxh!`}9Fus~n*=>K3@$LU;}ZLTk0shC*Zlx(g*DEGO6MWni9Ba_ zp^(T!pX%#fK86^V;$<<4xymeqYUOYGXMSmIflH@J`vxuDXlAE=gobl$E>|TqWj0^K zv%L)gok9Z*=+sR&HqT}>z#h!fa+*IFa8Vp)(?`D(|I{&vTWeH)Mbh=wlQ}{ddR!Zj z@%H->q(Esvcp2`ci|}KA{UlJ&^=R+Vk%zg~7m-gSv4={gh0WrI6lQ{ZjJz$Fn%4^o z(M6&H^->Sr1WnI^eQ5o)t8n2oF5TDTX>3+mlQ_6u9gf1ZcD;4~-SGEIcoU7;Awyqp zbWrD9L`90~ZT{lvop@6AzlJ>eFS9YBMBTiqd-Kbh60k%kJBJd6>lCOcYWxiQir+-`XRnk3V>{vbzyd!bbp7mc#S%cW^Ndx!* z=y8raEzZjePf&V9>!Yp$^0g{!-8e@{+z7=48gACrCVCu{!}9&f%>P*izT+}Syz}u@ z>k4>%0n1#rA7Ec~OTYq2rN=NTlKX~gOzu`(rphR&*QHvx$AUMKtlP_scWSmySKeaV0oon~Iw#EqKbMES+R!Il3( zf?zjz%ZEk{-z4q8Ai9eDyt%K#DJYmq*^yY5W#%3Z@7_sA_xZbR<@#7G0cCztoT6sI z=3Azw5IzAxPoGMz_#?E|NIV*eqW)J^WTkR42FAu85s>YwrU>�Kz;9NQk(xK;D$0 zz^Q_UYhfYi?y^FdaD^4W8zVMEIQZIc*TNgx&CG`h>%x(XcjTXeh!z1-tSlr!tbZTla130I8s!BCmn zi_fZ>(8QNvkxqUvz&HqbF1F5Oq-Cpn)eDO=JZbHZL#~f&b)80U_}b}K$kd*c>QQFQ z-T_XcKNe`idLcgj%=W_PU@=Kucys;v8X<)TAau4q3AtAq?Qz-N2KTSe)&egaQq=zs zVQ(1}XBw;x1Hs)PxFo?PxC|a7kN^obxVyW%22X;!1ozx53@@o85D2mpxT) zeSaxxo?H6vzWQn-51A6l3bSeGWQDr_KZn*!CAm-&%7PjzRhKl}4z3gw2l;B&O&^rc zUi++hkY8rRG;U+xHH8FNr>APq}r zt|>o98yriF6gfp#ar4BiI1UK7G=m&Gb)sxLa8M8%LJ9k>CE)T0?Oz1+zobwW@(J3$ zxhwEumZ6%w=ALNlKNCU8ni3t=*Q*}1L9!bZT zj^K+v@`Det*Gk6 zsdF34`(2OPFh!E+wa%3%u4E~|Goy8nT^;5$nWyx2(y=4GAXsFEh;66zoEc~$Ogk)^ zXgkdylICb4vP6-d84X@*0aI>U+~u!it=67)ugBeSZ=UZSwyGizXfA{oMWSm>=YOK>=vpgg{xGQR(_j8|* zO(Lr{oDC`yqh{*~67lJ&`aKD19V5ECexZ7`oH#!LGdrbpz=~U@TQoCgt3b^9Q5{Bwt3lU(+7@Rpab2W;0YP8)M%;O}lJ0CA5?Rc`AIdFUTwK8Q zvZrnT+g8ud3)Q?BXt3#izAn&7zs+xrNv;{9PkJpy!Id-Nkg5>F*rYsERhMc&i}eR$2NRvc1rL#^Z; zNv_gEp2T?(1v=`BVeqD}Q#ag##Na8T9IlXnH~K!O6e?yk`KMzlAw72{j$|%$%2QI7 z(UT`ath}}|N{YUGdd!s+q4|`UT_Geq?ei(-+L?G|O5h+Yk{OG9#PMj^ZL8Pm`BH5x zM?vQj3|rJ)Wn753Eue*TYWpM#5V=_n&1^J75@DMbxHhmEJ*QreqE6i)LblBvGGKpG z-@z$&Tm0al2G)$I4?`(*4yWUNpkVf?#o^jeyk@Z3M0h`Ha=wY-w3)vWv%cS;WTG2( zGII*vcTNN&j>QVBohJ(Nt^>MF(_)Zjjb#%38mdny*Kwp%DHLON3G0VlJdqKP4K$)l z-b1@z{$kjB9ZF^YPmt&DHwI%Hmj?@{a}>4WbI*d`?I(0j#6mKcX9#*TIrz#qBeq?X zfY9aooy!k2v zeK}%;y5eeQ^)wi?+Ys1W>Q3{pVhS!OOH$6D(?3ohRlyJgsMbX!R&=$5)>d`d)a;ca zWY!zziA=2x&XlUPXz*G)6-NjcZJh=nDcQHV>4zXDwLFWX|J9>Eut|J^mHbm ziH|laOKDaCH~y%g`+Utl+s@d=MrACv*`V-6?K$Ne51;D8BKM2lde7bFU1E!9O?F1W zb8=7ZNQm+36LZefHyj{w4hdm1G8-_748>m@xe$#+7dBCgx=J>N==tXBBw1BnL4wKW zQb;c7@N(XCB*XJrQV4I^-?{oxX5Zu~yEDxfOp$5Fz3rUjCq1SW6M91(k!9xGH*|LDZS z?Yt;DQsI^1qffbP)-Du5mDjH`_(&HSsxvx$eDNL8&eFe)+w{esqV@E!<1b?F3Wqwc zON)VZtEI(Z$d_t$bmu92J>NRE`301d;d(%8AxMAJ7`w<{@5j{rNUzBs37|iTaIP+dP17xNK zx`Hiu-ws9vV;te1hIgwO*oXgU!nD@7{|O)d#s~bhZlX_PxG_$pdNKL#GMQ!*MaqOgG+9HR5^efPr&R}ebq->)g}w%*@-khmh_PdS=A3bA?;;S z($@ySmMlCgbk_xM1{XGO|2nRE(Ay!&WJ-_4^5cW(Sl&o7UFNg-@LNLZ(PI96W$*d7 z%2mx#yx1bkYskqm_9*hM4rd!zH$5eKSRNt*N7Or33g`K6gom9+Y$et_nbgXiut<5B zOOJzzp3;7MTvk-EXkK+Xm%)EY4j2vL$R2|Q^Z{?et zy)u4++Ky{adu<%5cvjO za~sf$0{apb_=}^&p~A*m_Nht&+Go3h(Ol(IIUd&vpVS_-3QRC4?jS_4>irwS%E%$N zeITi#n7yybkHv7}l%S292OKp3+~P-rxZ+$3SR=3A-O^$%8Q=U>%!5dx82R0Zyb+?2 zpYB*mM1V~H^|T7Znh*pIQZ~XWqun2&$L;q=y_HYZVh@8%v892vcWEprf?`mu<0R$wAAGXtnwRid19Nwv(?sN3oKDI5~l z?0q5ct-#qcUI-c&AKfUN?FGHsyIE@qG_I_}W&|lMwumfG8Ih^bWbP zNUDg%-zBByl@AQdnNtGpKKWOM@&EQZrjA)_D0J;Ome4$44t0GSRrBtg?RWJMn0Dy% zK!ENxlOZVD?d+6pzIU=hjR=GwDXJW1OQ2Jh2D#Y461+p^dVa`MO5PjeF?O%)+QsgAuQ)nBET`ddRlR@_s!(>XB83}s3?cTnAp(J$Xb^F@l%beK6mw2V68=Fr~HOg)Pk=-~dKaEX{XIRy0@vmWlA8qEnU7nt`BA=sow5W)WLoX!hK z_1ak_NnZZs!A6we)9*@vTDnGc?QM3Icw`qkbt=!{=KM(k*vBiAx^*>5R8BC`{{2dR zQVt{PyfiK97SXy}zjlUl8nC0NnII&i7#B#j+IQZ6bMtsT!wS3rEfqDp=p%{%uiybO zd@Q6?pD>|nU7iSbpIrQ#FZBORhm!@L+Y~@int`5ada(UZ(ysCa zni!{Brk@8&Nxg)RTa$#>Fdjxv$iZsG84M^W`P{21>Xz)yUAJz+zB^ZZ3GV2&l&IiY z5JJOJ^m_{4sBM+tQ-cX2aJ2795^{9* zw8vDnx(xLqua{A7b`6{8g37a}IQeXS=7C_N=(qC!o1*f+9s>TGj`X>&8z;YqB>df@ zt4@4~v~O->e$q7yWH^otI$KPa2C(~xh1!34vPcV7(Q<7-L&Fn+>XPU;9YRtUWbWPT znTF4ufi(`7dx;~*i|!YfGrBR~ZAY}c!hc8W$4AWQf1Kc#I2k;3#|R5p4#8f+T+pgR zCl6_M#bQP%nfF2rS#U3-r1DZv!ip8F=pXExW^->C?$)zZLvRJWYZ%(5w&O3yhge3> zQbbgNRedOD9T%0pta<8*SUGzzsY+?1|M~*vKA>ikGx`9>bxgGj-!5`Xt?o8_}HZ<=iN?_2G5uLyXKT(84T3YpgwRSExy$Ye9mO@Lcr_$H2 z4wN3Z#w!Hg_wrCRAH+0cyW9dVwpaub1Wa#m2BZ4S^)|Qi!++JB?dMsUmjNP2bXCAk z&1|u?g#va6&l5aB(ZdV%w#ht})6Uq>QbHG_5{;izd5ljh?DmstxRlP$zLTQCEXtL! zn)$EUXY;ucyXMc-8jOJYf1X(_Bk}o4r}j|9zGid2-w{kpR*Wn3^+T3$;;aCW&O{)H zO!oQbaYlwjpM+K4Vt4PhiL$jZY2tPT*fF;tD$>?%E3Lm3A<*OMM>{3a<`Z5ts(Hq= zfD#NkPVjX3}J~CA@XRl33E=Q0uyIzW&AMsV`je*(Gy~&33C4Km2&PW3Bqp zW_H(Ph66&mqv#vfd~Y#3zhr!4Md}@L>_~Pj`l`6I9D=}o0CZ0JdGmVJvFF;2csh_4 zC)y#c`|wmKc6rA?6UE_ukejXyE5?Y<@nUqtP}VFM!)`U&jjt|^)nYu(JkZckb6H)e z$s!^g81}Z~&pACz$N{SVgs5nQN%785snvXXovHmmah!dk_V~4_8%3A*kp6?0;QKXZ zy*zs$od~3QPD(V`ixkWaeAi8&MWF5e=l@WBeA@60oSG@={zMn-Kq~%|wGof*OrPY% zT=VmM@0^?*4dt+~LbW1?E!1pGYZ>K~R2pYIxV%6ZW_@Ulm=F_mPVeT87)mhH-W@w#LL%hBbFZktt;KtcCVA>MIEk0i@!mUtx`{HR=bei~Sz2ws1%qpk z3X)Z#Bhl}q=#8ix<`2SGswDYNtc}YI{1IK2ccdOp_{Jh}xTy%2`?~1Edgchxv}E6e zf(ZF#}=j+0&lS`C)y!q2UHwRAhKq3Gr+7cJbcuc-pQmC)_zy=+rt?l#}i~ zJCk?D#-_*Mk%8r8dp^V6?a!%ciI@Al7-F8bZMP&=i{}qClM#EC$doON~+TH zuaKF@udAuuXpRTE$|+sz5t%R8Sa}rx9336`k88cmL6V|%QmEcU)4a{YL^Y$1czFBI zwkN9^+$Cx;n2tgG0ODZCr3VJHPPWb&+;s$NX!X|hSpeo7J!}8KK*{QR5ay6B2n_D+ zjxf6k*s$~Qw;wj7xa+^{&@5J=p!95I-Ku!xtDxQ3N(9d8=-rapB$Vy#im|)}oa+U(IM@&Y1Jt{_OmI;PlW{2W1$$0v^Lj>nq(3K(|{nys^GM9|g*yD<(EU zqgu{7w=;TrX*t(u?TGwsteVIBfQFHL-Ok@|`~7Ps3uhZU`<)2&zQ@ZK?!J$;u3ZiG zn%D#q)(r53^=-28j9aHcH_`-8e2y*&&S1LN0g=q@$K38q)dHb;PAYaba@_)v@78)c(oDLE+56cs zfeZQPXpuz3p%c4?%UF@%Cx2(;=t0oIg|iI>!nXc0T9XxLd#(u5@B?Z_;;O)|!vzof z;>DmZA!6NU5SvxW`D$gyW6t^>#9Gho3mIzPA79MhzF&+H?#_il7&dZWp2)60XxX)O zg8bbLW#x5kR8^1aw2P1^JXc{`Sg|$lJ&@Kz14q&YJx{t3(R`nSiA`5QD5)e*3%@P3 zLuri|DPS(C5HWd(s0^qXzln6hDd}ArKlh-V)D~s7`roHHo>W~K`g-fQWv2U-Tl!AS zcuiZjcb!d~Uexi~J8AtT_)swWH?mn3q07>Bc{&e}uYoyo!y@78CnO>w3eY_{BqkYR z(|Ta-&8iyoSb!+6@vs=5ykIwY~l3 zIZuMGeB%2BvcCDpewN@`fX6U1?Rb6icr(t)!2zYzcGbu3C?&7V@$s(DxjS@0h$6-k z+CuE;8y=l_6ChmD(M}%ZNXEWNq(tf^!*kCPGV}Omo5fqzSncBc)J>M@+I(-SL=6MH zen2khauNgFYbw-j_u+g{D5)_XOn5t-!i_dKJp8#M=KG*s3!eSWGq#|Q>U~8nA_hs% z`6Pj6z0H7~2z=q@=O%*uD(VDEl zcA+kc$mn$Y(O@7}mOa!M)>~Uvy`O%!{8**15`*HOI*ursTC^Qpg59qr^q(r4#js(F4W(d>`OryUVTxYH| zeC~Kg8{&Uut;nz8jucYjq-8ryet)M`=r+w6u&>miE26np@%rRSAx+xHh5V9aQ+ycl zEJNfGXNF4V#GUbEXzCJO1~l|=iFHwbRrLiDv|;XZP*Bm?VcIIfdVE8E2GTw34)x}? zm^{hP%e&RPy_ z2Y=JJX*pZD#)f?)9MW+8%7+ZI7tX=`{d;J7Me-tCz|tl5)$)fM1U?G*_coG>?t9M! zXT%uKXeWRALM6KdW3OP&8c}zp)O`qIW02ODxk-6#7Uy9hcJD{1$J=0@N5YhlpaadI z5ep!2=;T@WOh57F(xu=2n`T7=Hh2Beh#sNM&u%Y|r*XaeX{MwlP!F9~wzRZkMqGO!v`il#ne+C~`Ddst^7(O>tkGCNf*9w@s$jA4*URU7LKCa^FW_%eLxuyi_t zcE2rKF8q>9F)O8E-%K-tNI_#mt|0v|cv=+Ug++bfaRs@Nxqcl@cV6Yf41Xs4Ku0|+ zGq}?66eHv7xX~A7NzJT!e@;jkuCg{0wGRTpx__WuYCHg8nhVmz2yB199iEN~bCma6 zNp{hNSJrmj^b7D8u`46#vfR4^KfWe89ujZ{}oIhMBP-`d{YgXl>Md%Enb9rKU`s4t(j?ECtLr*w3DI zH_)1Pxr3Muw(o5yF1%T#Bgprt?n2Rbm_1KRCks*5-avdz$wpQ$AW$n>LE8(H#)@ct zvbXNFu*6s!1NJNFu46bd%AV;Bm*(T1QAlgpaRueoOaE@Q5Pp+rCwKk3=szY*6qyXk z-v}MSA%QOI?vtdih5XO65&2WtWz(MZ^+)n9&q< zpLfWkFLiDSCD!&<+$pEl7B*dWy+>$tddO ziL|cmprf;llyqH-c;9_HD5de-hT7p3K<~=?p?x3Qh3LxGX8aclS}g6!Es1jj$>~#Y z7%$va!8C=O$(;|o@mFX07^mk7+(JV zf2(8^(c#Y4713pICI7i+Y`C}YI%qQAj=L$PRlK&*#bVxPpRMAsc6UqF`P{$jq^U$- z8TO{!2!1jxJuQex7sAr>9xI5GT_qag2Z-zyDBhq)%^bl#TMni-4V_woqhLhGi6%nc z-M8ao4e?b7^JX4rk){~tL%M+&_`d1tTeZ_OGBSd{?>@c#YD~knmEDfL5)F8F`u?hZ zy&B10!;myU0ovV)q7IOG3D>is-v;fMt)mV8(%+SfM=9ToytbH;&lmZD;uZBnYtW$u znQdQadZxcS{mM&!FvSnqPqO+u_KRyxqla~zQU~5Qstu=YR6)eF&dBZDm-Y`&zj;%` zIPe9fy>X{wdTqX)2VZ$|VpnUdkKvP&i(#Nn%zS?(Au|~GY+G5{jA!rD`xH}IxDTgq zD-1pbMR<1DGOW)8K7(eDW1NUiyJ%z_VV)AZ!LQH&EUfFJPW^(w7Grw_lwhm1P`wOC zJ5FKdcOw!$5^KCD_neA8Bv-ksM176+-p(2~)w=ZSR^2=p?yZPbXTmpZ-KXeYv)^FM z9Aa(%*+v#I{Ds`t_c^lo|NIGB{p7zvwW>7j1K4z(3lKVro71KyZ4GdTrQ=`s1ek6k zQIBfGuJfI-DSWJ1?F*Pk1|EK%g_`f<%F=x#WF&56WMft@GI?X;kF?m=<~_IQYadUp z#hvaE?)UY!coCl3sQ`%UE2*i_c2gM7&D1Teu+JZFhI-$F|I`y_+8rPX@Icmbbrd8rxy}Wx3DpE`wnp- zL|c9;T3o__Uo(i*wrs+4*r(z%rRqOB&yOTOd@!mepfv1cY_eLK!OiTgyb=8MMQk-9 zIIGX`o+UsrF_7h%?`Z4c{jsj*0i_=>DL}u8fSSu>4T$12%Lrn+Gchq~stS|gfi`d7 ze&eL>KKI@C?Jvk#OH>sH`yR=lM2wP>()H>3TN%=C4P-|f0=caGK&v;2-LVP{I&Sdh znl#qjKv>pQht(T$9cCB;)LYz_HPS}tv@JqY}+&1#@QHq-xP>&(Rxy=$E%5@7?{r%YpI*KGwath)Jw zS}3(bS5I=z7@4j0wC0HZA4`X3|HQ+?Z9i7`(k+5%sCqgm>2351iz{^BFvr&>%KkSL z@~_A6ckLcjEAc$TQB{3Qr-D1G1HHA$YCtnk(NKa%ufb=MO8Aem`tP3p68>>XQO)~W zxx)1@xuj@!*z*Hx+>lMRuOaY|>R6$dV)TE$YWEHonGBaK@g`EJtpJR(u;J{hR3o!< z4W%Qg;9oHHc2;m4X`8c=Z$e)B*Kc8U=(|9a(q1uW-ogv`fi1obhka8uLyg*HR0mET zrF;dyb@Fmcf4$MvLgnwu-Djt@55@*QJRRC_psy(*lb-%RWx$-;kJ7x1y4@OYPjKDi zA%eOy^gY*&K}i6zfPU)(MCx5Z9rSNY{?*FaXRd-m(E7S)W)&8oN$<* z0SYlZ@E`OPrvMjyHfLpC`{KApVBnaa)VmVtdfiKec=QwWtG)GO6n0ka8=sKu*>hXa zQI4>e2J4c32nnawtC_`nU^Q`G|J47frtVE}&u&3xktyKRjLFtJqCpZjkN3| zcW(XkYvGOupR<+`{v(|u_;C3MR7`>)rg`Usqjf0H9)OFIC7j>W%lV$ifC5MU(6wCa z?vc0za$O=qH^ z#9zvYzX6_}J!o*+$9*u33D7uq%9jB-%f6J za4VaD(0?`^a%EEoa&C{L|D(aFisGNwNdA@gKR=`-Dhl7B1fw4QLg97zigpx~KDzbW zhC334z`OFIdqkmw6rvk~h!iQd5rVM$OORhWt57X71OEYrd8R;@gzcYeNjrs~jMY`z zbgZxw{-ks4toTGx3wk${joHeGS3$!}v-;XMB@gz6=HSDDqk+jl7W(+2lF$FE7z_<1 z8yuXaC|DMfNYPD-WZ5x)MFy4vzH(8bp(2Jq*4X!qgMr=@vhZH#hA$Y_~5slPr8ZY}iWtOtPYvKOy^x z%2%dx<|l_Gvd&e=YaYW$A=Wjfa8lypQdsw8(f{VdY=uBCduv-+PU0W2@jsL3Ai<5) zZ~rTd!*iA%QK!3}B{W#1a?N9LiVY3GhHz9LYK(v9_)!$wSG7B#hE)`ss)~gpkNq-Li!(FCQ10kuB zuYY6nT>FFY@lqvxnp_#Uf>t76@PU8|1OFfC9N>qof? zOrcMa87emv5wSsNu>b5Z>j2wt+Z5wgo6|Rxw|5Tq$7-T*s$o7$9muXa85?yNL40IZ zwYoA98vShFZM?9Rq7ZJ3+rJV&;iQKTSZxno^<__VV=%&j1UO5DHt@+n?s?@M(~ z%5fhO__7&u>_}p+W_&AmL4YeuF*JQy=XbhBFo{th{Z1ekr{c;nkNlcmh>F~4X{%mehP^gm<2 zeA4vQ@J7gX$wIZ`?ElD_C~};iAOA|`o&78{U>%Rze?6Ic(j_ORn8~4ykL&COE0q<`ztA#nzOx>1`foqBrrc#vN~^n5IOs)ppkt+c zbEBqq85pn^Bi`hRm;L;c>D|lor~4$z45L7tZAA5tmPhvIknE85kg0U+v!VBah&_0| zk_c!I<1KkB@rUG#@Gpfn?*!xFEOwj^OsQPDv>3YR4W%%pKIju-jZ*+ z`w{K**@|4ijxW?=CM>_UosBx&u9AYj+zOlBZ1n?a?^LYVlJSODMs`_J6lhb)&5PvB zh+hJnrL2h@CkcK23BA>f)-S+Y$2VNXbqcnp?+2%)NzR!<{L765*qadZsKT>$2=A zfyAHTf$Rp(G#JFP>eU~Beu+P(Zc4xIjQvD$6=W?|L3r*BasJf|pP>lP|E~wT#w<(v z;_aMdVk=7c=zrlJ-To;56u$2HWKMUCuL-;n(9{z5t)Jk>>fKxG0C?Th2pkzp?B|l9 zpL%n;Q#+e!VZ8G6zUV$nufZeqJ=~KT=ROwPjmErW!0+~5(Sj-s(e(>)9^A*{nv5nq zHZ3%k`gY3K1SEIxBRlH-%0Y>EbWHrv?tLO3BNe^Ms_qXyz7DC1`N3{1j;pFkMEBQK z@(n}nH(;1fH2hyx7bMC+2NS`F?Egw1BPp!~)^I+h8})<<_-Z5=nQtg{-RtvIdmK8- zc6N(CaNPBL*(s&gJ+oNDYKz^1;UCX)cDNXAq4szc zW#A5y)Q4W`&Fx0=xp&HG*nGY4C!+5UsEO_z#uuh2d8)3jeu>Sw4J1t$6*Mq@P5aCE zQN=>f)Sv6WzEqYSoCPelrHozp`Fw0ckh@Oz6=6?@dz%n<+MZ!>s5{KIa1-ULHx;C(25{`8kk%r`LT;u(%A^az#p)hI!q$B$;Yz*pn zE%leR*MKTT+t8lNn+dr-E>9Ac>l*onAB2Kx*bLueL!0f{Zff|kK2XOLoG@-OJa=`= zYX;}7ZqS`vOq5=%1$AHG`Ofx=+DTx2hE{F7g^p8Zg=;{x=l+dQEb&>^PAgf4<}XFi z@sW-SZuO%yF%gocZ?o@>xUWaD*$l2wdYM*N@YGqn6#z2tY) zQB1+`A7)vC>GB>_isD{pzSF1ZD#-8{uoFm^5*HW06{H+Dptgg9w_8!v&`7ae?eN#x zK-Zm=hVQ^@zaYhFoeSgh71 z@QD+SDkCY@B(D;xrQ{rgJ8w>O9)dOR4Z>rm6L9c8io`A5*{Ts;TmJNUNQ=8jWsCTHhyCOOd~gs# z0_Zfh3TH^{-qOU&3e7ChM!`-;dXhKGE8cXJXy*IiYKwEKGXCVp_+euWYn3N4-6o2I zvi+|eV01-@AUo!9H52wsamj0g5P}4{P)pxsHEYabU%NJckpHfVM#&;TZN&eew6sjg zWLP8W-hvlo2r{6G*xw#YK4pPhO}5YYmGBbP<-z}GVAETL*rf{cyK8({2i8Vr|ofAJ0%@O{Jzp5o-t7} zC^VCRkVLi2Aul}J)Qc7h_E+)oR-N-PDFot{Nn%h>@lq7IAl~&{_FsiF z?4`?r-tD8_;U#K0>rk%(hxHrtzvc#(8VW%uPZ>Lth}ai)7cooP&ks(`ZST=RpER|) z@Rso*^mVv3rLf>a-9a?-61Tshnk+diAq})3M?d~Ej@*;Bk7l|+ZOC-_mt1E>$=ll! z^oD?kEk&rr(ID#yQF=PX58xo%^k*Vo?&+Mb%~m}hdEHb&1YHly+59gqX|`}AzmBUM3q6G-ZuU9T2_hS zYi@Y;yXx)9o72u!Cz6ujnZ7-B28Ui)d=Egf4Tr`7vy$Mcj!pq7R%->N58`Alx}RD- zOs9%WGw%%YKD>YgP_z8ej|Fy^y3++5u1@LM zKSOam#B#|0nv|aBy*vv=&NfC*rT+h-8$0p8*5lfl<0ItZl4|(PcYZvkSNO@Uof53| z>OA3e(RdpYgqqMJo|T5}*8pOHCQilNbYI8O0hlLeiq)&3B;*3m<@q-}&EGemYuYZ^ zGCbJI$qbUBq!+qj1PJ#;-5Iz305Zg~j7S)&UoZ<65?&*8(&~*RKC&O{rl9 z-*6we?xpb)aaqpuHQJPEsCxRM* zVx!#d1F}gMc;vHLyy;_xJJU)tQQW;xNGukIbIX|5OWu_C zSPOnvmdbNq=rT;Q=GWl}BfuQ-_Uvp_(rwlXaZ7AR4m^-|(LJ|~bPruBS?I>!7yAL; z4Jg#!-9W-^HH%8vU~3=}XNKrG)3amE5abe2fi>5PWzeO3Lj_~yv>vtMuU=BAO4ssN&{_vQZO z{`9xbHZ;n&!gjY|fsUq%JPF3SH4bQxEk>MC+N}}vLaBj88cz7yD=qJ|r-efVdbxA@ zv72RcdnE{pBE8?^9S%4MI+GfEI-uSm>}flvQU>>mfi92 zq*R;+gh?o#ppM7+TL57Hl48;1H!#}NbAxC>4T-}kYgM6jADFP3&sz2?75i1TTl`LT zNBspWggvdguz@INY`cq^8}j9R)QaUOCs7@|(jI2WhY`pH-YppRqffDl^FJWD+?rSu z%UZmWVr5L`F+V}Y+YhH8?)R6Z7ZSAq zX7QVnP{%)AJt>pkPWKD#U)Ir-%nlA}mEUrP=8*G*hv=nw(nsh7>Vn6VcJpW66*b7t zB4ht~xFt7~MxzCVZDVcU>}_20a|Sduy#}e=aoUmRGAoH(x%U)>dd4`gnW# zXI&#*qn5&;L<=2Z+w=EiYkL@io_Sl>FPoQAD+qrEL2!~^di6ag_wAWClnNO;!iN|_ zA&zEc<(?YS@kG7ewa$60cQ1L9OjRMBEGi#3?<6MxYD2qozovJAZMU-ks{4*$?U8*P8l*mvew za4SAPTYu6ke^~Qwqo^6|AId2!5}e}3Q)*`|&-Q9f->~Db0@PYgm-@%1ZPEHuC4 zU9NnsIVLuoaMW!U-(M?rlJ?Yc^c?*6p#lF~PvcLS1E^S55f&g!x zcTuQ0R!~P%C9Ytl;LkR4J4|mEX|{QcQ+rp{jNka1UT*z%7|1f_^p>Vl8Fweb_f;Eb zK#jS?{cNsDYQ7_3bh$DMb*6;r)YSc6i5yE3;o{I&Ps-iG_vs@75`_U$mTvDpXD;(M zIppyaVhXCfWqGn*NtM?YNecdXl-n2IWmY{H;Rp$~v#R^H(9y+qZ!Heo7|=&PQN;Q+ z7g8e&(^>1lY}yytk@|C=NWKOesI0+TUZHJ%Z-x}qpp_`6(n2gr5Wn>P(b@Z}>rqY+ z=~2P^V{h@52d-oQ`m5;fMsnt>leQE*9MAy}e%_T``&+<3F22|9m5~W#^?Qfu*Tp|H z9WyYxXa_Yn1@5-pm(WSarx%-pw&VR{6+cP4JgDX0mg}_cWfAp7TRV;LLmFb+l+A7O ziaCN|@c+x$a!6ApucV#k07j40`ALz4DR38uj{ay9;AYxIcW)p3PIOs${J52} zp@4>T>0RODl>OOw;Yr)v%PB=-QZR4RQiLy9rhJ@e%9h#^E!3ia9hL2Mpo2fFNE|vj z=bAM&m>>v*IWZ&uCeZm*7#PC!Eg#L|Lkgi=sP@GN$U9{WLO&IzAZXhQl_KBt@EQsO z3duF%X+0I1Zu)F}mBIMu?Lz9T@dy(OW>@9W95V@TPrM;Nao*%j09}W@gRpzQNblJo)b@M3MQyptX4Cy z#Z7PO^RX~CO%cF}jpFk;w#6*@JHgnWJ|xv{ZLIs~y=S zbrQf4=OVr-q*0LB%_r{&j2?et_IONepXBayx6hDvZk@Ktz+Vvg-^^i7mu2}vIN2>5GZ!>c=@;KRO}fWJqYmIfJ$l$Qu&E<4<; zT{vltXJ1^QDU3zpKf<;Q?FbH~T0b$`w?O1>o0zAP;V()S2H03@ag-#O4c zrv47s!p_(A*zg`07*TC$TqKM#+<7F*`~{(C&eXZJ=W$<@map@BxN$jy4yi4}*@jhK z_d45sY^B0Zo)?*~UJdJCr+$feso>>tVOxeJ?l)BYl+yNvLKz5;|4fX!KXx0|FGX{B z=~R?uFk0$`Bm2>zG#NRX;OS)t4V#imij7Bn`?Xg~`)!(1QB`x111r_pxRIgUhRgd3 z=<9Ks53jmkNXUE+;0MMvn`7J=+`!0^EJks-7>$SWx@4P{^HaK#jtvu~e|FR*7PnoQ z2<_Te$;HS;`Z~N5j<3{;JM7^=<$c*hMKaHnp>_Ye$V8d=(M=8Rkt0W>)l=Hm19G*@ zwe`*a;;9xgiW#Si)J4&Gc6>|fIbMLJBU^!SAj+B17^2g@1?S8Y3nrML}tn{FN;TwNiF ze8teR=sq<)6VaQd%1lCKXonL~qQyt%CH7SgkDHNHbLn}XJ)TV)fjIkFwv

    {Zcsp4W#3_ae7C#zOjM=o*?_T+%NQXcCDRDMLIOBIvg7vaQE7(Rn(Zx!v zp601UPU#QQ*pE>B{YHeqeUIXpWMa)*>ww-B&@kb|=cpC`6uoJhY{D;Ed4gvBck zvD{9^OxnHe?=L~VKiHu>AC%D%q7>=)JKG~aBkR~oh$E7oTIWI{G# zG!=1m)JqnszlI;xun!%nHeYK=t)ueRYiqkvS=;g4p-8{gBb;>RJsof2)$vNjcyJ(j zX8k8%JGbq4l9pM_E3XFYd1LV!4XvX#~_WVqXJ#DeyIe6EV>QGpVZmL)n zp}`j&8>2dg}L$Zwy%VVF-<&B@4!FUD$Bll?h|>CIWu6)xqU1OJm(pk%B2B$rd#8jKUH%yBYc=c2wklRKPP6)gkwTBzuaG&VCUt08oK1= zy`*})@=g2#c1*#0jJ_e3vKr9+ATlDCy#N||XMz3E_ObeB9dDV0bBRjMQEiUd$W@>+ z6Ae6^-kLLu;;E9IB5a^JZzDNZ)|qfq6Ks!&F3YOkfUtv}e5)A7a)GXEeLfqOO7LzP ziMOXwSp&m^eQ;9x^P3P?+_Y?|yRVlT7&PRVp}%88Dq*#0pK+3#9NQVgyk*7XHc}di zu~(SUIAYo()b`YnrxWzrwS1KtN^?IG#g$&I!_#9?#QW7@hnq2yNLkKRT!YfZs2{w(#s` zzgtU2Dx8?hKix=Nc@_`FB+CL(G(>!zw$74&zNSehA{T@7@Z{F}q$(u3T1aF9u9I+K zrh1cNibMz9i0RRm4jia{R3Q)xqJPTEcVWA1zP2yc%%l0NT^DWhnJ={u@JOr@!k64+ z$$Qxhu@|T?re*H=Db?=Hk$6PuEF|RlY%SZOoDA<(1^gpE0iH0OaGluJ+wsOf6t)X{ z7nLggryU^o3OdijYN+65XV(7WHZGXU%g#3C{@Nj>-kojO{r>-J?@goGe7CT1rF2kq zq-I*GYRJ!AGgWiVC4$fzs%ABom=$f!Q`9_DMGyo*qSe++YmT`!#1tw>M2Ocpztf&` z{_FqY{rs+z4^Ohzon)C7=uJPL&O2_nOQKoIR?C=|;=uM49BAyX;dp+(PJDXnW;7xC zT8aIa576)_ExUPb6+FTPbYr6F-d*PFst-$v%sgiw+^g6PK}&dlx=i!w+JmC`-4lan zTZ-5`$QE`EgFU)m8iHfP|G@hWBh45{2Nme_Ux)aUTSBSbV?0?ct-846cBVcJ$82O92aGP5i2n!J)wfDGU_I zL$s1I9K2sq?utR`=_7YSw1tI}wlooGLm}q(T&Tt1OFc$gfi}U5oUA@WCgQ*1VB)^( zEchvj&ZQK}vE; zx8=3@40(!I`wST?1pfAy+DX$O(*@|*+7@LS`Qcmn>lzD8)hxnp@#p5(&;2>FCMSZ0 zcs}Z|bgcEat7k8(P@OrwED&%1^+ZLbOmF0=&&OwnL!0e;GMj%1bY4>k#$}JDY`JCie*W0b zFLv91`?X^sbtF*G*_P<2Y2_ItQQfd8D1rH(T36DW++GJ>@^F zxh`gGW4%U6YP%lC*o2yq7WyEF4P{+5QFEbh$*}Z7``yt|RsG;9lE?NsLAGY5)hZ`r z`&KA=J&x_H5CC)AZhuM#S>0G}ZeO8@nAWjLCnL?EK~e z{D6=?4BHP#L9ShMn(TOHc62&KY|;-mJ5C-yx4hdEntm_hPBhV*N5gm8JWYk-w8i+k*+nw_Xi8ZMW$Z z26}|gQnK6fww-44Q1N!F+E1MtAq%tqEWqhh!-yQnij#X?s*p#E2F z`Z}x?m$tHDzG|5sRTO2f9!z=bLOz4w@oq3vUkZbh@oh1E>6N9vSmLZOZn|Mu#Y<(5 zLTrLl`UHndo(5+^77d2mPX^#Ej{X%kO^7zhLu>Fa$A}=Y(85QdFWUG%ceU`IP6JYE zH%PmL^OZe7kQ;~#$YH92{gk+|!16dwezk3KEJvm4w{tP`!f(oLer^H%^bwb2PkdTj z7ihP*@&bmt@J%e%sa=|k8O+EJxHy)tJ=`#qHqzJi_DNu19Od?dHydm3j75y*ENiXI zT!scav!#-y*dCI*syrON)+gSt0ePcRv$-Jp7S1Z64i?c?KE^;+nA)dmMF4sSKi%U}IIM0f5UfLYXiMCvm z>m7hXP(A@Aoc8(PC8*ga^Aa1Wp(KQoC0Pa3+ADdj^3iDxFdKdI|3-4D+DsziJn*Gds@`889|X9HZuA??jY{GHe8BcuWVMv&Sb#PQW4ePh@a;P zqoV%j<(%0Qi|4#aMfpm(g*RGz;7pqr-ZO;HzYB{>-YYLTz7!0Z)5(;!i_!w)_*!{^ zcjmua(&dkXV2X{Ak1|_~Y0L^~IjlN{7~v&#jM=WCO(lx?K_03^8er?qb?T3z%da4+ zEewjnT}bZr6Q)-&(p%rgUP-0!f{-@no;x4=>62Y|9voMa!I1s4nd9t+#MVM@Brf!d zWq@uWdTWvQWN{jPTUl~jMdbvidM+_~>c(in^HI70k6DqFEEAibMLrjbhbu8-KIwPg zB)mzKLl7d8-PX~E!8?OxV?{KXXe7&%7d*0t#ylV6R2Ek*d{GY_lb{Hnzxl18l0THw z-7fUxxd#fLg7$bJcUD>#@?lMRwAq$mj%i0&he4n9=Lt1gg@n^nFoa~yhBSJgL8OBa zFrAJnn0$-7hn7C0J3y107c3t`F?f(dhoZ}y1}bHeTIi`PR4~*gN+6Hw?nOIE^qio` zQbTH@zxvNkwa{P^e47&J`ucslFvb%D*0#h@v}8%mb~7+O&cL8NI_eC7%@#t${INMl zR_C`s2H4n~pV*IrB9S7muCWYfk8ay`ZNzn~fQ(chUD`F;@?i7)3++&DFt8Y!& zN6q$`ITl27;zLYt?*!xh>3wLuIMgc1bR&L(suXOw^w;85oF3)_$PPFd%>tY#fCh|y zqgqR-5|*{7xosK4ahf0D0Z#nrt@K&lk!EO)-U6@Y(+&HUZrAH?m!2_XxaJg{I}~AO z01kcAws&ZW@A$^P+*gCuLfgruA=-mCp!oG}OK{jQ^~)YPdzm{&99B~&!mOU;yY2Xb z&jNR}(Wr9dk3p1xeGcO}X%=>7*Pe(DC5+Tm?;>_z@e5eeg?N>_e8U{oh&jyO%?%>0ZJR?=hH)oX^j=x%lBvP!bk51gWxWf1k#6D zR6E1^_=^BSS40u|9w}x6XzI1VbcgEYf?mayf4H-M`m`tWXE$XED318oVS9NM=$Z8> zY>#sdS<{>W>H)Y)ef|~groV$5E?mI(YKdvDW5T5>?(-rTW^c( z(8agDKWM={eq?>{=xxcw40?hSil2VQ+{?k&+*69o0Gmg?^VFytck~^PPfQs@0)!++ z*om%QZ{ijRdjdQAlW;^XE=Cjw_jrk>JL7{iD%Ea$v+}@VzSb9nA#nvNKq;2 zH{|cscWYj&`t%fO1cV64KC^+?#xMQVj9MGSXJPv^P_6JESt-QY?r^|7Qr$bV-M)Is z8Sr6B?j+Af>*<#Nylx*frZvx^R86q+94M@xsk#yToh=8B{S@(73FDn<^F*!7zi}#J zT&eaQtesutU^R7MHiN}zJkWXU`_uKY#+Xe0$}a2Weaf!yfxpdQe(T;%2Cr@BcqQ6E z&aKv>bADTs)`323R=!9hi zvaR-xK3QO6Fh|DlJ+5vQDD{2Voa_Bn(Ce_V)4qe`*f(M_pNc)f&u^V??UDu*w)g6C zCc569f0TQ-9y{poeGQ?6wa6q+nXe63v3VO18it}Q(EIoX`=M}J zQ?O^<=qH^iUzXO4*}IiBd^4%vE=5|zD7rxD@@6%WzH&BOAqRIz&pz4)929;u*2P}- z5p-SOjt%8{kV!sidS7eUs-;_N*<|>a*NMyh`C47Q>5KL(@zqyQaRcH>^F2$hwP}5} zQ61Hqh~0Gi>%@5|__c7VCDH9p&b&|3J;RIG{QJ4l4+MH6fM z$19eP`j8B@Lecn^jiMWwfx*m= z2EOy;Td&dB6JyESLG9@u=IS!7cPSH2Xg2S@2GJ&i9S8EqkAK z?LFu199l#Nf28iex2ls;L%0ojPPj}w%Xp%A0mt=qRilh9lYTD~-x(?I|6G6xMF_8& zunuN^-AHT9MVXdd`!JL+pbUEcQF*(-7vp^$sdHQt>#y{UETt;CHlfKiuCnSjfkWE( zy_OjD*GgAleo{QL;winsQZVPyYRRS`X=j>ul!<$nh}|A0`IwmjOuY!IsIZ#_bE1Yp@CfU-YOOUP< zwITv|@C(@|19@0pNzqMs*hpX$kmUd%^3ohW)xg~$_T=)!|FpG zM*O(RYsQ;?5AD|Gkg%Z2Sh(aUIlDAGCsjG9PEqr%aDR7d2-2&nlt__KJ4_5TUT4ATp0IDFnCY?g9whrCpJWR? z2^BVXz)d8QuPz9VcUYo7VtZ0+&;kal5jWb z-KS;X{B|2S~${)|Ky7+UDEf2Lyul6#jE zfL4QLlhR8Z?46z%MRv9ucy(E39tO4-)9t0}hqkH7NmU9k&3Z=Vcu)1<6i{Rew#T6i#T|Qt1D|9vDa}(COUEo)r^rJr z0+F!ye6%1ChH>BNC_4bW@ROhZ%R7^9I zL5OFm{Zm24&Xir2%DK=`u}KM=xX=)GEq=A&a{N^2;SlSLD9R7XFF zRk>>X0_CdxOwJfwX%XB~X#;c`X@G6y?nbS|zx2-wg4{^bVmtpVlaY{ z(R6nS-<>3N@F0yC`LfSSqJfC|^6FuhJTpnBJT+_MeK;GM8 z8yRL51OsZrT#B3OHX67bm%*v>FFtc~f72NzZI&s>PBFOIAZ<$_9<%T$c7$uJmhgP7 zItt?6K-bIG9HsVEVW+C?AW_EQAbw(M!X>dMfzyvf^6Ckrh&xi4@JlB%rgFq5x50eN zvjW`rIGJ5KL5o+fT7h4%-AC{DDtC(jFMWI3$qc-R+_r9X?in@)E-S)XzeK8QFrw9` z*>KT)TL<$%E6;DtuG)~308o|CF5(-lOqQhcT@VHX3u59-k>4P7@#!SiozJ3OH#YW> z^3*!$5V)3BlE~iugm*i)|A5y zJ$?OqoYdC(FChIzBg0J&BA~hlCpXloo!TMOD4o>vRAyP0s%rm|J^$1`RN=Fq8l#eTL8momjQml$xhwu+WMKacIf`!f2GDkd53$rZQfu2hsM z_xrCdnCFhe{NO823s0wt^u*l;(LM^rE1+ZMr4hO8J6%0fMFoRjnEA1aiY7!BT@@A~ z?eAgBcUl?Uws(q8s%O*o{Obno%)!%H#aDRf=^jJv(UT$zLy+fluJ zK+HPuIP46K@Xs4EYf+Al4bEe>;KgW$ET@hy`_y|Mt5fBEuBUb)N6R} z$~xP;k0;;|LUoz~+S>teB~9h3{d;M-*wftV?im~Wa4r#_ zutToOncYyF)fIA_a0#F3ZfGJLcpc8fwgt7Y+r^4?2j%8a9P zT|4fRBn<{<>C;ebE(L97d3?~xn&0<~(`)7d)}nC?)~8KSzAm;ljTk^}y%h?{Q3?*M zB7hkZ)dA&uyp!rwzb+Se>-^T^e~WS(+D%PMDCLt|(MN>y6wQz=trBRdT*ZIMIZQxz z-c6;%ZDPE`Vjxi49aejn)1Cc2tAM=Z0xVc2oiAb+`+PRdsG6s7X$@F|-Yg!G7eTL)JFOp5ajmrwheQWB92xc=spW{0Y z67p!6jN4~9_{?g3tdCRc1`^?y~rCqs}m$BET4cCk5 zW?CQ9qs#G!R*pWtmBp-N^gL1I(-q-MU!q)Je`tI$G;tHjI6tiAfga*^2_Rt5mZ+0W zq9)hkZjfxg<2I_T9bnm_A=l_8$eAc74(|qp5PZ{^N0F{J7<*jp^-L_01Wyh?0L16< zLDk6<*Fmrr!tjyL)N@ve9S0D(n=hB#U`WRm+F<3|6GgcW32xes-#2rctVOk*9B6^# z?p%LKI2SdV>0 znr>pVvD{ucB6xw>Hb0O9lfj##J&=IZEEH?VIoQgw&~pwJ;FgeFZ0)F(vc zJLy)<_IGpGm>1Y0D)0fO-qv^1>9Mdcbxm zR_NUFOUqc5Fa=77p*AD&>K-|`rM-Py7lZFjYXaaEAiaQAWiRqlUYFK{ zJ|~|VOL-kvA%pMhmQux8K;Ldx_Q%V)kzNMceJ$HdhYak>3gsU2{&x)WI3NzhttmI8 z7yoHxXd~ns+kc^UA?(7d#Q?NU9*u(~mXeBiSV#Ti%8KQQ-^(ZSlgjMgGJ z#`vzEt)tuW_%)PJq0BdFYiypi! zvf{p5z4pPR1^}_I*FqKof&<<$T|#meEe#JpMLY)Q;i2)%w90Z8wm+j^&Q zwz6$KICD6%S7?uY(w`?HB>9qAK89q!-nw)=myd3}y=P#GCk%BD)s(GoUSL?9Js~>) zn=>FAfphMC-AOfQ(&2b(3?uk2zsUc4-?CJeSJ;KrB*g< z$WzX(s-}VmjuXrI#lh`gdo2d%D{UZ(KejU%$np9U3-fIx`e^Vd`eZs$0k74MYnq46 zx`I7sbh=ciYKLd9vc39uKI)&JI_79K;%*w{ynAQvsZp*k+vT$+zBe+Y%-!NU?I*8= zrS=h`*=9c9AiL@ZF>Sm%Iw#w$UU2Jd75&o}_rq@1`z?MQsDCzqgbxX}=dsH9JpYyL zfvO8QxwrhwrjwWI`9;3}@1A^ss(79r)KZTjZk~?t$@Sk-ST0HBI=25>&LU#depp_V za+O@|5w6mDi(c#3r!dEb31u2W)Z00fo#sx2dh8s#{L=?$3N}yP6hfgrZ6;FhJ=NeO z&DT79XN9V&p(#50zh%gIo?2k|!sj>FV(Az;-c>46Ujv}tpPaJ@+|ra#ZY^;d`RX`P zX;SWp%aU>nzkHfGKDu~j<1hn?kdjago_4euq~J*|ur@E~Rxh`hZP6um>4zDUur|e$ zBZq5Ldso|T|A**Nxxq3i^$~IdeL3qS`*N+|C&rLr>kxNy+tYUO-kOi{IEW*AYnBGv z!T9@%yL|>qr;YE%MJ%~S3REKrJ=#4Ywm)q@Y;4*W0^SlFhFkjgJpF@O7>-Mih9es^ zs>gk0eD*P{w>AK+)tFM>nB6K-^iX>&LZ~RATR~`J+Kqg>3FmE(?^55I-oU;ln7829 ziDcpVrcNbGe1HQn#;ZCEWfiMS+$4PD_K*)X>!NT~E*}T)2#`RzN{cLW)nK{B!d3yZ zQMVZ8lJEC?LuK7|9d1<;Ca@d#YT|@E_Cfd|mCr3|tji}N)qt72VVvhqH?DgKCEa8& zR2p+Gf}cN%mX_p%$;4DncuXD4`tPm`u)o-D?>lY&OF+h->TjXz+GD_FCJJW%3Y8@7 zsj>eQv(6uBoE3g|<>KkP=+@9PLmh z;oGRAyk62#_hAsH(on*_+Z$o5GFib!6mMnr)q{+OKoS+2(szANHys^JsAxkTizNr3 ztn;ynO~h_51g>w&G5_dAvcv7Z^bGERO#r8(Lv>t@1b!Baf!Lo~$Rj3wcb{Z;gz$(3 zY&2Ep)QoVOSZ69Oli&n*0Q;27mE)_q8-Nd|UAg$>PE#X{q{i(WKqa@3|1B!>mTjhL zwg2#u;q4a`eyJF0#3iX%xh7w~F_qZx{J6rrK)L5u==rT`I{fAP9n@@LqJnkl)K!j# z>g5G=RE^h6Jj)sB6NZOE4r*uxi@dzOXNk821qGAx@vMj` zw=PeAc?hk8n`PhE5(LHe9qyVdqN?P1js)OUI5?hQjhIE$xZZ5ZD{3=zv3WyEI4G(zrb=d;r>1Bfm7^zt|-O2%P#Qvo%gG?YKR-Wa^n z7;+rw?{TaY$|Q_#+a=2h&!?pCm=!7(qLazTViZNV)skahleFbq*BCdlU2rCxWcD>> zdAc=}`PTFgd}F&G-H8=$hqVFnY^ZJ=IM>o(O=fH+U1OJWeth&@lRI7EaJAU<-Y-Wk z=y|GWj)U0$WH?hJ9?2lFByy8#g|-apm(Sw|`1nB97lps_$-(9~YTil%O~VVm(iTas zK(qIUW-dgc)4OV}XG(WO(B8=U)Tt1Ao0g8GC2Bxz9I z$x#>`1$O{n?({Y9__~~4ZPJ806nPE`eDAUN&XX+CX=9056anDPrwKj1Nc@#(B>=n~ zl{02Xb~~!V?cVWwWKV)mJM30fJ0t?8zy9cqX%$B)61YHL6PkebZ~KYlu0(Ehb}OeH z(IzIpRi#e(E1JA`)T*4=h$$MSOa-Ib$##7xvN$RiB|5!*3V>`zB`MqnCERhlXLUT*^oObRKFbgHvj8a_wHV1%agKw z80YHxS*!fsOPWv#J@*+6Y^j1eWIj5ul=2J~ORq{5eoy4oU+T;&u_gX_nrhM1a@Zuo zHF~K2%Hl0`*!JX*z`+iUR^v-2c#&DmK>4zNh6vE292&2HXt=7xp%8xMwri=zZx~zJaXFIo@Yvk2$X0I6ayas?djmX%0uLL(BC+&S*{U=B?MvQ)Tu2Q6lX+MmL+n!L*lK$Y9du)GLmA@3_G11H3w3nV% z^0G(hZpw`fM6b<>lmXkvIxf;-eSTY%iuxR|LxbQ~opCF7S~7Wg zW4Oe7Q4W7R9PdSX6Qj$cWIf193_n_~N*LZ=Dqb3>m~Wm7U!*9V9wJEL9pPRFlyhJV z69g~n#IN^wt-WI6H*!3jt_W|fL`r8cx@Gkgn>^F@OCVeywT^1H7=@0oW}(=`u`d+rkzDM2N9(xxc|_RLP@jE{yd&cHMy+`2u zV)`)$>qnt3*s{I|-|14*NVco&EQ>2_3iTULy=>bd=Q}c!h~D zad2SQQIY%%pq zScefHa8KaIIT9*dON4=A{B?XvrOm3hLI5@uP*Gl^A?CMT zWXg1FwluZ2x*s^rBP;qTAyGkyyQUgUYeKhc!(aP*Gi!|3@!?H{!TrlDG*?uq^*Asg$2fk8|07ZO{rWZ`;&B)7}>- zRK-T+j1;GH_}O0r)xBsHo(2iiWQ{{tu#3MTJy?tl2A6Fg8^DnU@BeDO*S1zgom zNGAxsnCcFzn#>VwYClScPN0Iu9{4I8Y;&vQ-};O#+;{q*+F77M;v(6<>DJGE^v(D| zT*HLIMxoY&-*F~m)G5=c6%NY&+p#jf4I8KfmYiwUU_09|=Z63n#fDB|ZI4ZKBg5je z%AT`k0}LZWvJzmaOJ=K$2RXEtV)q@oe01JqOtM{Y&$pC(NHiUhJwZz9Fys2M1nfpm zWNu^E(?__lrI^Gt2PgNna)w)_G?LG-lM0b_$`|^%EvwkSDSXh!lN`VTD|uG%1#S75OBTA*M9$r zVI8&64T#)e^dAKL!S6q0#|^<#4}YssmgV>N|9e&VbT#6mEa(6K>i>hky=?LkyZ9eY z@BGmTE%nDIh7q^U2!1~)=ho6!0e`xxdf_2yXyK1+(+{KKVWR$HBbD?k=jn=Vi;C<@ z&8c_7->u#o*}C}rIZsf6NzNP z#4maywy$4sPx;AnBEr6-aMw_!IBZ-^d;;f={_F0@t&6|@BZ&Ir@_s+o|5Yma-|Byc yzyGtw|E%#FaQ}nL|A^v$eDHt62Mhk9zd~6# + ## Usage There are 6 presets available. diff --git a/stories/theme/c-theme-advanced.mdx b/stories/theme/c-theme-advanced.mdx index a4616adea..cabefed01 100644 --- a/stories/theme/c-theme-advanced.mdx +++ b/stories/theme/c-theme-advanced.mdx @@ -101,7 +101,7 @@ const SomeComponent = styled.div` background: ${Colour["background-error"]}; `; -// Or if you extract the props +// If you extract the props, remember to wrap nested interpolations with the css helper const AnotherComponent = styled.div` ${(props) => { return css` @@ -124,7 +124,7 @@ const SomeComponent = styled.div` }, }; - return css` + return ` background: ${Colour["background-error"](modifiedProps)}; `; }} diff --git a/stories/theme/colour/a-colour-introduction.mdx b/stories/theme/colour/a-colour-introduction.mdx index 226cd951f..f4573a7b6 100644 --- a/stories/theme/colour/a-colour-introduction.mdx +++ b/stories/theme/colour/a-colour-introduction.mdx @@ -13,12 +13,7 @@ There are two types of colour tokens: **primitive** and **semantic**. Primitive tokens define raw colour values. Semantic tokens are meaningful aliases of primitive tokens. -{/* TODO: Update this image */} - - + Use semantic tokens whenever possible to maintain a consistent look and feel @@ -47,20 +42,6 @@ import styled, { css } from "styled-components"; const Container = styled.div` color: ${Colour["text"]}; color: ${Colour.Primitve["neutral-100"]}; - - // If you extract props, remember to wrap nested interpolations with the css helper - ${(props) => { - return css` - color: ${Colour["text"]}; - `; - }} - - // Otherwise, you have to pass the props down manually (not recommended) - ${(props) => { - return ` - color: ${Colour["text"](props)}; - `; - }} `; ``` From 5b53e901d4ee6f84c88dccda1a5b62d98e3e20b5 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 19 Sep 2024 15:53:32 +0800 Subject: [PATCH 0451/1949] [BOOKINGSG-6120][JH] add aria props --- .../combobox-picker/combobox-picker.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index 0f0651825..4dca66238 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -7,6 +7,7 @@ import { ElementWithDropdown } from "../../shared/dropdown-wrapper"; import { ErrorMessage } from "../../form/form-label.style"; import { RangeInputInnerContainer } from "../../shared/range-input-inner-container"; import { SelectorInput, TimeContainer, Wrapper } from "../common.styles"; +import { SimpleIdGenerator } from "../../util"; import { TimeHelper } from "../../util/time-helper"; import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; @@ -37,6 +38,7 @@ export const ComboboxPicker = ({ // ============================================================================= // CONST, STATE, REF // ============================================================================= + const [internalId] = useState(() => SimpleIdGenerator.generate()); const [activeTimeSelector, setActiveTimeSelector] = useState(null); const [dropdownOpen, setDropdownOpen] = useState(false); @@ -280,6 +282,7 @@ export const ComboboxPicker = ({ parseInput(startTimeVal), startOptions )} + listboxId={internalId} /> ); } else { @@ -293,6 +296,7 @@ export const ComboboxPicker = ({ parseInput(endTimeVal), endOptions )} + listboxId={internalId} /> ); } @@ -331,6 +335,12 @@ export const ComboboxPicker = ({ onClick={() => handleInputClick("start")} onKeyDown={handleKeyDownEvent} autoComplete="off" + aria-label="Start time input" + type="text" + role="combobox" + aria-expanded={dropdownOpen} + aria-controls={internalId} + aria-autocomplete="list" /> {/* To */} handleInputClick("end")} onKeyDown={handleKeyDownEvent} autoComplete="off" + aria-label="End time input" + type="text" + role="combobox" + aria-expanded={dropdownOpen} + aria-controls={internalId} + aria-autocomplete="list" /> {renderClearButton()} From 45e504260dd76af5510892b80cef6050746a4ea5 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 19 Sep 2024 16:01:46 +0800 Subject: [PATCH 0452/1949] [BOOKINGSG-6120][JH] NaN fix for focusedItem not found --- src/shared/dropdown-list-v2/dropdown-list.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/shared/dropdown-list-v2/dropdown-list.tsx b/src/shared/dropdown-list-v2/dropdown-list.tsx index 0777cbfa5..216791b48 100644 --- a/src/shared/dropdown-list-v2/dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/dropdown-list.tsx @@ -212,10 +212,13 @@ export const DropdownList = ({ setTimeout(() => { const index = listItems.indexOf(topScrollItem); const focusedItem = listItemRefs.current[index]; + // Align the item to top of scrollable container if (nodeRef.current) { - nodeRef.current.scrollTop = focusedItem?.offsetTop - 8; + const scrollOffset = focusedItem?.offsetTop ?? 0; + nodeRef.current.scrollTop = scrollOffset - 8; } + setFocusedIndex(index); }, 0); }, [listItemRefs, listItems, setFocusedIndex, topScrollItem]); From c76515f474601137f5e7ac56133ad5436ee8ff26 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Thu, 19 Sep 2024 17:15:52 +0800 Subject: [PATCH 0453/1949] [BOOKINGSG-6120][JH] fix tab interactions, remove force start input if empty fields (conflicting behavior w tab) --- .../combobox-picker/combobox-picker.tsx | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index 4dca66238..bfb775820 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -127,29 +127,16 @@ export const ComboboxPicker = ({ const handleInputFocus = (selector: TimeRangeInputType) => { if (disabled || readOnly) return; - // Force start input if both fields are empty - if (selector === "end" && startTimeVal === "" && endTimeVal === "") { - selector = "start"; - startInputRef.current.focus(); - return; - } - // Only run onFocus if not already focused - if (!activeTimeSelector) { - setActiveTimeSelector(selector); - setDropdownOpen(true); - onFocus && onFocus(); - } + if (!activeTimeSelector && !dropdownOpen) onFocus?.(); + + setActiveTimeSelector(selector); + setDropdownOpen(true); }; const handleInputClick = (selector: TimeRangeInputType) => { if (disabled || readOnly) return; - // Force start input if both fields are empty - if (selector === "end" && startTimeVal === "" && endTimeVal === "") { - selector = "start"; - } - setActiveTimeSelector(selector); setDropdownOpen(true); (selector === "start" ? startInputRef : endInputRef).current.select(); @@ -158,8 +145,6 @@ export const ComboboxPicker = ({ function handleKeyDownEvent(event: React.KeyboardEvent) { switch (event.code) { case "Enter": - case "Tab": - event.preventDefault(); if (activeTimeSelector === "start") { handleStartTime(startTimeVal); } else if (activeTimeSelector === "end") { @@ -167,6 +152,10 @@ export const ComboboxPicker = ({ endInputRef.current.blur(); } break; + case "Tab": + // No input-specific behaviors, use native tab interaction + handleTimeChange(startTimeVal, endTimeVal, {}); + break; default: break; } @@ -224,6 +213,7 @@ export const ComboboxPicker = ({ if (triggerOnBlur) { setActiveTimeSelector(null); + setDropdownOpen(false); onBlur?.(); } @@ -245,6 +235,7 @@ export const ComboboxPicker = ({ onChange?.(timeValue); setActiveTimeSelector(null); + setDropdownOpen(false); }; // ============================================================================= @@ -390,7 +381,7 @@ export const ComboboxPicker = ({ Date: Thu, 19 Sep 2024 17:59:27 +0800 Subject: [PATCH 0454/1949] [BOOKINGSG-6120][JH] add onDismiss to hide dropdown --- src/time-range-picker/combobox-picker/combobox-picker.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index bfb775820..d2877b49f 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -238,6 +238,10 @@ export const ComboboxPicker = ({ setDropdownOpen(false); }; + const handleDismiss = () => { + setDropdownOpen(false); + }; + // ============================================================================= // RENDER FUNCTIONS // ============================================================================= @@ -385,6 +389,7 @@ export const ComboboxPicker = ({ renderElement={renderElement} renderDropdown={renderDropdown} onClose={handleOnBlur} + onDismiss={handleDismiss} offset={8} alignment={alignment} fitAvailableHeight From 8308c2a1696c7557d8f672287904569d71370f02 Mon Sep 17 00:00:00 2001 From: qroll Date: Fri, 20 Sep 2024 16:39:22 +0800 Subject: [PATCH 0455/1949] [MISC][RL] Resolve vulnerabilities --- package-lock.json | 197 +++++++++++++++++++++------------------------- 1 file changed, 88 insertions(+), 109 deletions(-) diff --git a/package-lock.json b/package-lock.json index b966239d5..83cde11f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8967,26 +8967,6 @@ "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", "dev": true }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -11020,9 +11000,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -11033,7 +11013,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -11058,21 +11038,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -13342,9 +13307,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -14296,37 +14261,37 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -14346,27 +14311,21 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -14554,9 +14513,9 @@ "dev": true }, "node_modules/fast-xml-parser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz", - "integrity": "sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", "dev": true, "funding": [ { @@ -14704,13 +14663,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -14730,6 +14689,15 @@ "ms": "2.0.0" } }, + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -24036,10 +24004,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -26150,9 +26121,9 @@ ] }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { "braces": "^3.0.3", @@ -27326,9 +27297,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", "dev": true }, "node_modules/path-type": { @@ -28450,9 +28421,9 @@ ] }, "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "dependencies": { "side-channel": "^1.0.6" @@ -31311,9 +31282,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "dependencies": { "debug": "2.6.9", @@ -31375,20 +31346,29 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -33849,21 +33829,20 @@ } }, "node_modules/webpack": { - "version": "5.91.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", - "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", + "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.16.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -34003,9 +33982,9 @@ "dev": true }, "node_modules/webpack/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -34014,10 +33993,10 @@ "node": ">=0.4.0" } }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/webpack/node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, "peerDependencies": { "acorn": "^8" From 5c7006a91f71c597e6010c39462cba54c6448bf8 Mon Sep 17 00:00:00 2001 From: qroll Date: Fri, 20 Sep 2024 16:36:43 +0800 Subject: [PATCH 0456/1949] [MISC][RL] Bump v2.8.0-canary.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 83cde11f5..55c5ecf5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0", + "version": "2.8.0-canary.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.7.0", + "version": "2.8.0-canary.1", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index dccefbfeb..96898a31d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0", + "version": "2.8.0-canary.1", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From bc978d2bf755a99bb49cd670043132e0068097c6 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Fri, 20 Sep 2024 17:01:35 +0800 Subject: [PATCH 0457/1949] [CCUBE-1547][MAHI]Fix naming convention --- src/theme/radius/theme-helper.ts | 6 +++--- src/theme/spacing/theme-helper.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/theme/radius/theme-helper.ts b/src/theme/radius/theme-helper.ts index 615fcb4ef..e67822249 100644 --- a/src/theme/radius/theme-helper.ts +++ b/src/theme/radius/theme-helper.ts @@ -13,15 +13,15 @@ const RadiusSpec: ThemeCollectionSpec = { export const getRadius = (key: keyof RadiusSet) => { return (props: StyledComponentProps): string => { const theme = props.theme; - const radiusset: RadiusSet = getCollection( + const radiusSet: RadiusSet = getCollection( RadiusSpec, theme.radiusScheme ); if (theme.overrides && theme.overrides.radius) { - return `${getValue(radiusset, key, theme.overrides.radius)}px`; + return `${getValue(radiusSet, key, theme.overrides.radius)}px`; } else { - return `${radiusset[key]}px`; + return `${radiusSet[key]}px`; } }; }; diff --git a/src/theme/spacing/theme-helper.ts b/src/theme/spacing/theme-helper.ts index 4d428e835..27c9140de 100644 --- a/src/theme/spacing/theme-helper.ts +++ b/src/theme/spacing/theme-helper.ts @@ -13,15 +13,15 @@ const SpacingSpec: ThemeCollectionSpec = { export const getSpace = (key: keyof SpacingSet) => { return (props: StyledComponentProps): string => { const theme = props.theme; - const spacingset: SpacingSet = getCollection( + const spacingSet: SpacingSet = getCollection( SpacingSpec, theme.spacingScheme ); if (theme.overrides && theme.overrides.spacing) { - return `${getValue(spacingset, key, theme.overrides.spacing)}px`; + return `${getValue(spacingSet, key, theme.overrides.spacing)}px`; } else { - return `${spacingset[key]}px`; + return `${spacingSet[key]}px`; } }; }; From f4904794fbde9d10b8d7afe8e875e552d87d6642 Mon Sep 17 00:00:00 2001 From: roll Date: Sat, 21 Sep 2024 19:09:44 +0800 Subject: [PATCH 0458/1949] [V3][RL] Display primitive token backing the semantic token --- src/theme/colour-primitive/theme-helper.ts | 5 +- .../doc-primitive-colour-display.tsx | 1 + .../doc-semantic-colour-display.tsx | 46 ++++++++++++++++--- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/theme/colour-primitive/theme-helper.ts b/src/theme/colour-primitive/theme-helper.ts index 1316489a6..337f87443 100644 --- a/src/theme/colour-primitive/theme-helper.ts +++ b/src/theme/colour-primitive/theme-helper.ts @@ -11,7 +11,10 @@ import { RBSColourSet } from "./specs/rbs-colour-set"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { ColourCollectionsMap } from "./types"; -const ColourSpec: ThemeCollectionSpec = { +export const ColourSpec: ThemeCollectionSpec< + ColourCollectionsMap, + ColourScheme +> = { collections: { lifesg: LifeSgColourSet, bookingsg: BookingSgColourSet, diff --git a/stories/theme/doc-elements/doc-primitive-colour-display.tsx b/stories/theme/doc-elements/doc-primitive-colour-display.tsx index 035dddf35..86e73701d 100644 --- a/stories/theme/doc-elements/doc-primitive-colour-display.tsx +++ b/stories/theme/doc-elements/doc-primitive-colour-display.tsx @@ -244,4 +244,5 @@ const SwatchLabel = styled.span` const SwatchValue = styled.span` font-size: 0.875rem; + color: #787878; `; diff --git a/stories/theme/doc-elements/doc-semantic-colour-display.tsx b/stories/theme/doc-elements/doc-semantic-colour-display.tsx index a5fc6e35e..a67785f40 100644 --- a/stories/theme/doc-elements/doc-semantic-colour-display.tsx +++ b/stories/theme/doc-elements/doc-semantic-colour-display.tsx @@ -1,3 +1,4 @@ +import { ColourSpec } from "src/theme/colour-primitive/theme-helper"; import { getSemanticColour } from "src/theme/colour-semantic/theme-helper"; import { SemanticColourSet, ThemeSpec } from "src/theme/types"; import styled, { ThemeProvider, useTheme } from "styled-components"; @@ -9,21 +10,44 @@ interface SemanticColourPalette { const SemanticColourPalette = ({ tokens }: SemanticColourPalette) => { const theme = useTheme(); - return ( + // apply proxy to spy on the primitive token being accessed + let colourToken: string; + const proxy = { + get(target, prop) { + colourToken = prop; + return target[prop]; + }, + }; + const scheme = theme.colourScheme; + const original = ColourSpec.collections[scheme]; + ColourSpec.collections[scheme] = new Proxy(original, proxy); + + const component = ( {tokens.map((token) => { + colourToken = undefined; const colour = getSemanticColour(token)({ theme }); + const reference = colourToken || colour; + colourToken = undefined; return ( - {token} +

    + {token} + {reference} +
    ); })} ); + + // clean up proxy + ColourSpec.collections[scheme] = original; + + return component; }; interface SemanticColourDisplayProps { @@ -196,7 +220,7 @@ const Display = styled.div` margin-bottom: 2.5rem; &:last-child { - margin-bottom: 1rem; + margin-bottom: 3rem; } `; @@ -205,7 +229,7 @@ const Palette = styled.div``; const PaletteLabel = styled.div` font-size: 1.25rem; font-weight: bolder; - margin-bottom: 1rem; + margin-bottom: 1.5rem; `; const Swatch = styled.ul` @@ -213,13 +237,13 @@ const Swatch = styled.ul` flex-direction: column; margin: 0; padding: 0; - gap: 0.5rem; + gap: 0.25rem; `; const SwatchItem = styled.li` display: flex; justify-items: flex-start; - align-items: center; + align-items: flex-start; gap: 0.5rem; `; @@ -240,9 +264,17 @@ const SwatchColour = styled.div` background: ${(props) => props.$colour}; `; -const SwatchLabel = styled.span` +const SwatchLabel = styled.div` font-family: monospace; font-size: 1rem; border-radius: 4px; padding: 0 0.5rem; `; + +const SwatchReference = styled.div` + font-family: monospace; + font-size: 0.875rem; + border-radius: 4px; + padding: 0 0.5rem; + color: #787878; +`; From c8461a52968d89fa08bc39cfb2296442aeb81eff Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Sun, 22 Sep 2024 12:48:07 +0800 Subject: [PATCH 0459/1949] [BOOKINGSG-6120][JH] focus input if dismissed while on dropdown, move padding to styled component --- .../combobox-picker/combobox-picker.styles.tsx.tsx | 11 +++++++++++ .../combobox-picker/combobox-picker.tsx | 12 ++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 src/time-range-picker/combobox-picker/combobox-picker.styles.tsx.tsx diff --git a/src/time-range-picker/combobox-picker/combobox-picker.styles.tsx.tsx b/src/time-range-picker/combobox-picker/combobox-picker.styles.tsx.tsx new file mode 100644 index 000000000..acda7d763 --- /dev/null +++ b/src/time-range-picker/combobox-picker/combobox-picker.styles.tsx.tsx @@ -0,0 +1,11 @@ +import styled from "styled-components"; +import { InputWrapper } from "../../shared/input-wrapper/input-wrapper"; + +// ============================================================================= +// STYLING +// ============================================================================= +export const TimeFieldContainer = styled(InputWrapper)` + height: 3rem; + gap: 0.5rem; + padding-right: 2.75rem; +`; diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index d2877b49f..5c48920a7 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -6,8 +6,9 @@ import { DropdownListState } from "../../shared/dropdown-list-v2"; import { ElementWithDropdown } from "../../shared/dropdown-wrapper"; import { ErrorMessage } from "../../form/form-label.style"; import { RangeInputInnerContainer } from "../../shared/range-input-inner-container"; -import { SelectorInput, TimeContainer, Wrapper } from "../common.styles"; +import { SelectorInput, Wrapper } from "../common.styles"; import { SimpleIdGenerator } from "../../util"; +import { TimeFieldContainer } from "./combobox-picker.styles.tsx"; import { TimeHelper } from "../../util/time-helper"; import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; @@ -239,6 +240,10 @@ export const ComboboxPicker = ({ }; const handleDismiss = () => { + (activeTimeSelector === "start" + ? startInputRef + : endInputRef + ).current.focus(); setDropdownOpen(false); }; @@ -298,12 +303,11 @@ export const ComboboxPicker = ({ }; const renderElement = () => ( - {renderClearButton()} - + ); const renderError = () => From daeabb99e226652d8ff686ac6dc7307f2fb182cf Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Sun, 22 Sep 2024 12:52:14 +0800 Subject: [PATCH 0460/1949] [BOOKINGSG-6120][JH] use toTimeString helper for to24Hour --- src/util/time-helper.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/util/time-helper.ts b/src/util/time-helper.ts index 82869e6aa..70d9f7012 100644 --- a/src/util/time-helper.ts +++ b/src/util/time-helper.ts @@ -202,9 +202,7 @@ export namespace TimeHelper { let h = hr; if (p === "pm" && h < 12) h += 12; if (p === "am" && h === 12) h = 0; - return `${h.toString().padStart(2, "0")}:${m - .toString() - .padStart(2, "0")}`; + return toTimeString(h, m); } return time; // No conversion if string alr has am/pm }; From 69a74e232c86a211a98e6234cb9d5abe61f82c89 Mon Sep 17 00:00:00 2001 From: roll Date: Sun, 22 Sep 2024 17:34:36 +0800 Subject: [PATCH 0461/1949] [V3][RL] Update doc order --- .storybook/preview.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.storybook/preview.ts b/.storybook/preview.ts index ee8c9d74f..16743f856 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -32,6 +32,13 @@ const preview: Preview = { "Getting started", ["Installation", "Themes", "Media Query", "Layout"], "Foundations", + [ + "Introduction", + "Themes", + "Colours", + "Typography", + "Animation", + ], "General", ["Animations", "Button", ["Base", "With Icon"], "*"], "Form", From dfc2078b362861f3a5a9204e4d0387796542e55d Mon Sep 17 00:00:00 2001 From: roll Date: Sun, 22 Sep 2024 17:36:43 +0800 Subject: [PATCH 0462/1949] [V3][RL] Rename CCubeTheme --- .storybook/preview.ts | 4 ++-- src/theme/index.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 16743f856..8ec43f037 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -5,7 +5,7 @@ import { ThemeProvider } from "styled-components"; import { LifeSGTheme, BookingSGTheme, - CcubeTheme, + CCubeTheme, MyLegacyTheme, RBSTheme, } from "../src/theme"; @@ -16,7 +16,7 @@ const preview: Preview = { themes: { LifeSG: LifeSGTheme, BookingSG: BookingSGTheme, - CCube: CcubeTheme, + CCube: CCubeTheme, MyLegacy: MyLegacyTheme, RBS: RBSTheme, // TODO: update when OS theme is added diff --git a/src/theme/index.ts b/src/theme/index.ts index 18f232dab..be04cd383 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -48,7 +48,7 @@ export const BookingSGTheme: ThemeSpec = { breakpointScheme: "lifesg", }; -export const CcubeTheme: ThemeSpec = { +export const CCubeTheme: ThemeSpec = { colourScheme: "ccube", fontScheme: "ccube", animationScheme: "lifesg", From 342f5b5484008fa60548a4ff8e6c58f67ac4ec78 Mon Sep 17 00:00:00 2001 From: roll Date: Sun, 22 Sep 2024 12:26:54 +0800 Subject: [PATCH 0463/1949] [V3][RL] Add other theme colours --- stories/theme/colour/c-colour-bookingsg.mdx | 24 +++++++++++++++++++++ stories/theme/colour/d-colour-rbs.mdx | 24 +++++++++++++++++++++ stories/theme/colour/e-colour-ccube.mdx | 24 +++++++++++++++++++++ stories/theme/colour/f-colour-mylegacy.mdx | 24 +++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 stories/theme/colour/c-colour-bookingsg.mdx create mode 100644 stories/theme/colour/d-colour-rbs.mdx create mode 100644 stories/theme/colour/e-colour-ccube.mdx create mode 100644 stories/theme/colour/f-colour-mylegacy.mdx diff --git a/stories/theme/colour/c-colour-bookingsg.mdx b/stories/theme/colour/c-colour-bookingsg.mdx new file mode 100644 index 000000000..8c6e08ab1 --- /dev/null +++ b/stories/theme/colour/c-colour-bookingsg.mdx @@ -0,0 +1,24 @@ +import { Meta } from "@storybook/blocks"; +import { BookingSGTheme } from "src/theme"; +import { PrimitiveColourDisplay, SemanticColourDisplay } from "../doc-elements"; + + + +# BookingSG colours + +These are the palettes used when the `colourScheme` is `"bookingsg"`. + +```tsx +const theme: ThemeSpec = { + colourScheme: "bookingsg", + // ...other specifications +}; +``` + +## Semantic colours + + + +## Primitive colours + + diff --git a/stories/theme/colour/d-colour-rbs.mdx b/stories/theme/colour/d-colour-rbs.mdx new file mode 100644 index 000000000..6e9955474 --- /dev/null +++ b/stories/theme/colour/d-colour-rbs.mdx @@ -0,0 +1,24 @@ +import { Meta } from "@storybook/blocks"; +import { RBSTheme } from "src/theme"; +import { PrimitiveColourDisplay, SemanticColourDisplay } from "../doc-elements"; + + + +# RBS colours + +These are the palettes used when the `colourScheme` is `"rbs"`. + +```tsx +const theme: ThemeSpec = { + colourScheme: "rbs", + // ...other specifications +}; +``` + +## Semantic colours + + + +## Primitive colours + + diff --git a/stories/theme/colour/e-colour-ccube.mdx b/stories/theme/colour/e-colour-ccube.mdx new file mode 100644 index 000000000..f74da978f --- /dev/null +++ b/stories/theme/colour/e-colour-ccube.mdx @@ -0,0 +1,24 @@ +import { Meta } from "@storybook/blocks"; +import { CCubeTheme } from "src/theme"; +import { PrimitiveColourDisplay, SemanticColourDisplay } from "../doc-elements"; + + + +# CCube colours + +These are the palettes used when the `colourScheme` is `"ccube"`. + +```tsx +const theme: ThemeSpec = { + colourScheme: "ccube", + // ...other specifications +}; +``` + +## Semantic colours + + + +## Primitive colours + + diff --git a/stories/theme/colour/f-colour-mylegacy.mdx b/stories/theme/colour/f-colour-mylegacy.mdx new file mode 100644 index 000000000..a92eb1b25 --- /dev/null +++ b/stories/theme/colour/f-colour-mylegacy.mdx @@ -0,0 +1,24 @@ +import { Meta } from "@storybook/blocks"; +import { MyLegacyTheme } from "src/theme"; +import { PrimitiveColourDisplay, SemanticColourDisplay } from "../doc-elements"; + + + +# MyLegacy colours + +These are the palettes used when the `colourScheme` is `"mylegacy"`. + +```tsx +const theme: ThemeSpec = { + colourScheme: "mylegacy", + // ...other specifications +}; +``` + +## Semantic colours + + + +## Primitive colours + + From 2fb04f2f57a6264cf72e384d9e21711ce709e98e Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 11 Sep 2024 12:36:23 +0800 Subject: [PATCH 0464/1949] [CCUBE-1545][MAHI]Set up V3 Typography component with its test case and storybook visualisation --- src/typography/helper.ts | 98 ++++++++++++++++ src/typography/types.ts | 51 +++++++++ src/typography/typography-style.ts | 75 +++++++++++++ src/typography/typography.tsx | 106 ++++++++++++++++++ .../Typography-Body.stories.tsx | 38 +++++++ .../Typography-Header.stories.tsx | 37 ++++++ .../Typography-Link.stories.tsx | 30 +++++ stories/typography-test/mock-theme.ts | 26 +++++ .../typography-component-body.spec.tsx | 78 +++++++++++++ .../typography-component-link.spec.tsx | 92 +++++++++++++++ .../typography/typography-component.spec.tsx | 47 ++++++++ 11 files changed, 678 insertions(+) create mode 100644 src/typography/helper.ts create mode 100644 src/typography/types.ts create mode 100644 src/typography/typography-style.ts create mode 100644 src/typography/typography.tsx create mode 100644 stories/typography-test/Typography-Body.stories.tsx create mode 100644 stories/typography-test/Typography-Header.stories.tsx create mode 100644 stories/typography-test/Typography-Link.stories.tsx create mode 100644 stories/typography-test/mock-theme.ts create mode 100644 tests/typography/typography-component-body.spec.tsx create mode 100644 tests/typography/typography-component-link.spec.tsx create mode 100644 tests/typography/typography-component.spec.tsx diff --git a/src/typography/helper.ts b/src/typography/helper.ts new file mode 100644 index 000000000..0a8f6fe56 --- /dev/null +++ b/src/typography/helper.ts @@ -0,0 +1,98 @@ +import { css } from "styled-components"; +import { TypographyProps, TypographySizeType, TypographyWeight } from "./types"; +import { TypographyStyle } from "./typography-style"; +import { Colour, Font } from "../theme"; +import { StyledComponentProps } from "../theme/helpers"; + +const getResolvedTypographyWeight = ( + weight: TypographyWeight, + props: StyledComponentProps +): string => { + const weightMap: Record = { + 300: "light", + 400: "regular", + 600: "semibold", + 700: "bold", + }; + + // If resolvedWeight is a string that is a number for eg "400", convert it to a number + const numericWeight = + typeof weight === "string" && !isNaN(Number(weight)) + ? Number(weight) + : weight; + + // Map it to its string equivalent + const mappedWeight = weightMap[numericWeight as number] || numericWeight; + const finalWeight = Font[`weight-${mappedWeight}`]; + + // If final weight is a function, resolve it with props + return typeof finalWeight === "function" ? finalWeight(props) : finalWeight; +}; + +export const getTypographyStyle = ( + type: TypographySizeType, + weight: TypographyWeight, + paragraph = false +) => { + return (props: any) => { + const attrs = TypographyStyle[type]; + + const resolvedWeight = getResolvedTypographyWeight(weight, props); + + // Check if function if so resolve with props + const fontSize = + typeof attrs.fontSize === "function" + ? attrs.fontSize(props) + : attrs.fontSize; + + // Make it a int for calc + const fontSizeValue = parseFloat(fontSize); + const fontSizeUnit = fontSize.replace(fontSizeValue.toString(), ""); + + // Add extra margin for paragraphs + const getMarginBottomStyle = () => { + const marginBottomScale = paragraph ? 1.05 : 0; + return css` + margin-bottom: ${fontSizeValue * marginBottomScale}${fontSizeUnit}; + `; + }; + + return css` + font-size: ${fontSize}; + line-height: ${attrs.lineHeight}; + letter-spacing: ${attrs.letterSpacing || 0}; + font-weight: ${resolvedWeight}; + ${getMarginBottomStyle()} + `; + }; +}; + +export const getDisplayStyle = (inline = false, paragraph = false) => { + if (paragraph) { + return css` + display: block; + `; + } else if (inline) { + return css` + display: inline; + `; + } else { + return css` + display: block; + `; + } +}; + +// Helper func to refactor code +export const createTypographyStyles = ( + textStyle: TypographySizeType, + props: TypographyProps +) => css` + ${getTypographyStyle( + textStyle, + props.weight || "regular", + props.paragraph + )(props)} + color: ${Colour.Primitive["neutral-20"]}; + ${getDisplayStyle(props.inline, props.paragraph)} +`; diff --git a/src/typography/types.ts b/src/typography/types.ts new file mode 100644 index 000000000..9046f5b90 --- /dev/null +++ b/src/typography/types.ts @@ -0,0 +1,51 @@ +export type TypographySizeType = + | "HeaderXXL" + | "HeaderXL" + | "HeaderLG" + | "HeaderMD" + | "HeaderSM" + | "HeaderXS" + | "BodyBL" + | "BodyLG" + | "BodyMD" + | "BodySM" + | "LinkBL" + | "LinkMD" + | "LinkLG" + | "LinkSM"; + +export interface TypographyStyleSpec { + fontSize?: number | undefined; + fontWeight?: number | undefined; + lineHeight?: number | undefined; + letterSpacing?: number | undefined; +} + +export type TypographyWeight = + | "regular" + | "semibold" + | "bold" + | "light" + | 400 + | 600 + | 700 + | 300; + +export type TextStyleSetType = { + [key in TypographySizeType]: TypographyStyleSpec; +}; + +export interface TypographyProps extends React.HTMLAttributes { + // Can be any weight such as regular or 400 + weight?: TypographyWeight; + // For consumer to choose if they want the text to be inline for example + inline?: boolean; + // For consumer to choose for block level style + paragraph?: boolean; +} + +export interface LinkProps extends TypographyProps { + // If the link is external + external?: boolean; + textStyle?: TypographySizeType; +} diff --git a/src/typography/typography-style.ts b/src/typography/typography-style.ts new file mode 100644 index 000000000..14959b256 --- /dev/null +++ b/src/typography/typography-style.ts @@ -0,0 +1,75 @@ +import { Font } from "../theme"; + +export const TypographyStyle = { + HeaderXXL: { + fontSize: Font["header-size-xxl"], + lineHeight: Font["header-lh-xxl"], + letterSpacing: Font["header-ls-xxl"], + }, + HeaderXL: { + fontSize: Font["header-size-xl"], + lineHeight: Font["header-lh-xl"], + letterSpacing: Font["header-ls-xl"], + }, + HeaderLG: { + fontSize: Font["header-size-lg"], + lineHeight: Font["header-lh-lg"], + letterSpacing: Font["header-ls-lg"], + }, + HeaderMD: { + fontSize: Font["header-size-md"], + lineHeight: Font["header-lh-md"], + letterSpacing: Font["header-ls-md"], + }, + HeaderSM: { + fontSize: Font["header-size-sm"], + lineHeight: Font["header-lh-sm"], + letterSpacing: Font["header-ls-sm"], + }, + HeaderXS: { + fontSize: Font["header-size-xs"], + lineHeight: Font["header-lh-xs"], + letterSpacing: Font["header-ls-xs"], + }, + + BodyBL: { + fontSize: Font["body-size-baseline"], + lineHeight: Font["body-lh-baseline"], + letterSpacing: Font["body-ls-baseline"], + }, + BodyLG: { + fontSize: Font["body-size-lg"], + lineHeight: Font["body-lh-lg"], + letterSpacing: Font["body-ls-lg"], + }, + BodyMD: { + fontSize: Font["body-size-md"], + lineHeight: Font["body-lh-md"], + letterSpacing: Font["body-ls-md"], + }, + BodySM: { + fontSize: Font["body-size-sm"], + lineHeight: Font["body-lh-sm"], + letterSpacing: Font["body-ls-sm"], + }, + LinkBL: { + fontSize: Font["body-size-baseline"], + lineHeight: Font["body-lh-baseline"], + letterSpacing: Font["body-ls-baseline"], + }, + LinkLG: { + fontSize: Font["body-size-lg"], + lineHeight: Font["body-lh-lg"], + letterSpacing: Font["body-ls-lg"], + }, + LinkMD: { + fontSize: Font["body-size-md"], + lineHeight: Font["body-lh-md"], + letterSpacing: Font["body-ls-md"], + }, + LinkSM: { + fontSize: Font["body-size-sm"], + lineHeight: Font["body-lh-sm"], + letterSpacing: Font["body-ls-sm"], + }, +}; diff --git a/src/typography/typography.tsx b/src/typography/typography.tsx new file mode 100644 index 000000000..be7982f8b --- /dev/null +++ b/src/typography/typography.tsx @@ -0,0 +1,106 @@ +import styled, { css } from "styled-components"; +import { + createTypographyStyles, + getDisplayStyle, + getTypographyStyle, +} from "./helper"; +import { Colour } from "../theme"; +import { LinkProps, TypographyProps, TypographySizeType } from "./types"; +import { ExternalIcon } from "@lifesg/react-icons/external"; + +export namespace Typography { + const createHeader = ( + tag: keyof JSX.IntrinsicElements, + textStyle: TypographySizeType + ) => { + const Header = styled(tag)` + ${(props: TypographyProps) => + createTypographyStyles(textStyle, props)} + `; + Header.displayName = `Header-${textStyle}`; + return Header; + }; + + export const HeaderXXL = createHeader("h1", "HeaderXXL"); + export const HeaderXL = createHeader("h2", "HeaderXL"); + export const HeaderLG = createHeader("h3", "HeaderLG"); + export const HeaderMD = createHeader("h4", "HeaderMD"); + export const HeaderSM = createHeader("h5", "HeaderSM"); + export const HeaderXS = createHeader("h6", "HeaderXS"); + + const createBody = (textStyle: TypographySizeType) => { + const Body = styled.p` + ${(props: TypographyProps) => + createTypographyStyles(textStyle, props)} + `; + Body.displayName = `Body-${textStyle}`; + return Body; + }; + + export const BodyBL = createBody("BodyBL"); + export const BodyLG = createBody("BodyLG"); + export const BodyMD = createBody("BodyMD"); + export const BodySM = createBody("BodySM"); + + const createLinkComponent = (textStyle: TypographySizeType) => { + const Component = (props: LinkProps) => ( + + ); + Component.displayName = `Link-${textStyle}`; + return Component; + }; + + export const LinkBL = createLinkComponent("LinkBL"); + export const LinkMD = createLinkComponent("LinkMD"); + export const LinkLG = createLinkComponent("LinkLG"); + export const LinkSM = createLinkComponent("LinkSM"); +} + +console.log("Hello"); + +// FOR LINK : +export const StyledExternalIcon = styled(ExternalIcon)` + height: 1em; + width: 1em; + margin-left: 0.4em; + vertical-align: middle; +`; + +const HyperlinkBase = styled.a` + ${(props) => { + return css` + ${getTypographyStyle( + props.textStyle, + props.weight || "regular" + )(props)} + color: ${Colour.hyperlink}; + text-decoration: none; + + :hover, + :active, + :focus { + color: ${Colour["text-hover"]}; + + svg { + color: ${Colour["text-hover"]}; + } + } + + ${getDisplayStyle(props.inline, props.paragraph)} + `; + }} +`; + +const HyperlinkComponent = ({ + external = false, + children, + ...rest +}: LinkProps) => { + return ( + + {children} + {external && } + + ); +}; +HyperlinkComponent.displayName = "HyperlinkComponent"; diff --git a/stories/typography-test/Typography-Body.stories.tsx b/stories/typography-test/Typography-Body.stories.tsx new file mode 100644 index 000000000..a67257da1 --- /dev/null +++ b/stories/typography-test/Typography-Body.stories.tsx @@ -0,0 +1,38 @@ +import { ThemeProvider } from "styled-components"; +import { Typography } from "../../src/typography/typography"; +import { mockOverrideTheme, mockTheme } from "./mock-theme"; + +export default { + title: "Typography-Test/Body", + component: Typography, +}; + +export const Body_Inline = () => ( + + + Testing for BodyBL and Bold with inline + +
    + + Testing for BodyLG and SemiBold with inline + +
    + + Testing for BodyMD and light with inline + +
    +); + +export const Body_Paragraph = () => ( + + + Testing for BodyBL and Bold with paragraph + + + Testing for BodyLG and regular with paragraph + + + Testing for BodyMD and Light with paragraph + + +); diff --git a/stories/typography-test/Typography-Header.stories.tsx b/stories/typography-test/Typography-Header.stories.tsx new file mode 100644 index 000000000..3616c4a84 --- /dev/null +++ b/stories/typography-test/Typography-Header.stories.tsx @@ -0,0 +1,37 @@ +import { ThemeProvider } from "styled-components"; +import { Typography } from "../../src/typography/typography"; +import { mockTheme } from "./mock-theme"; + +export default { + title: "Typography-Test/Header", + component: Typography, +}; + +// HeaderXXL with bold weight and inline display +export const Header_Inline = () => ( + + + Testing for HeaderXXL and Bold with inline + + + Testing for HeaderXL and regualar with inline + + + Testing for HeaderSM and Bold with inline + + +); + +export const Header_Paragraph = () => ( + + + Testing for HeaderXXL and Bold with paragraph + + + Testing for HeaderXL and Bold with paragraph + + + Testing for HeaderSM and Light with paragraph + + +); diff --git a/stories/typography-test/Typography-Link.stories.tsx b/stories/typography-test/Typography-Link.stories.tsx new file mode 100644 index 000000000..2d076a67b --- /dev/null +++ b/stories/typography-test/Typography-Link.stories.tsx @@ -0,0 +1,30 @@ +import { ThemeProvider } from "styled-components"; +import { Typography } from "../../src/typography/typography"; +import { mockTheme } from "./mock-theme"; + +export default { + title: "Typography-Test/Link", + component: Typography, +}; + +export const LinkBL_Regular = () => ( + + + This is a baseline link + + +); + +export const LinkLG_Bold_Inline = () => ( + + + This is a bold link with inline display + + +); + +export const LinkSM_External = () => ( + + External Small Link + +); diff --git a/stories/typography-test/mock-theme.ts b/stories/typography-test/mock-theme.ts new file mode 100644 index 000000000..f9160551a --- /dev/null +++ b/stories/typography-test/mock-theme.ts @@ -0,0 +1,26 @@ +import { ThemeSpec } from "../../src/theme/types"; + +export const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", +}; + +export const mockOverrideTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", + overrides: { + primitiveColour: { + "neutral-20": "#9D00FF", + }, + }, +}; diff --git a/tests/typography/typography-component-body.spec.tsx b/tests/typography/typography-component-body.spec.tsx new file mode 100644 index 000000000..fcaeb9e7d --- /dev/null +++ b/tests/typography/typography-component-body.spec.tsx @@ -0,0 +1,78 @@ +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import { Typography } from "../../src/typography/typography"; +import { ThemeSpec } from "../../src/theme/types"; +import { ThemeProvider } from "styled-components"; + +describe("Typography Components", () => { + it("renders BodyBL with correct styles", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", + }; + + const { container } = render( + + + This is body text + + + ); + + const p = container.firstChild; + expect(p).toHaveStyleRule("font-size", "1.125rem"); + expect(p).toHaveStyleRule("line-height", "1.625rem"); + expect(p).toHaveStyleRule("letter-spacing", "0rem"); + expect(p).toHaveStyleRule("font-weight", "400"); + expect(p).toHaveStyleRule("color", "#282828"); + }); + + it("renders BodyLG with correct styles", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", + }; + + const { container } = render( + + + This is large body text + + + ); + + const p = container.firstChild; + expect(p).toHaveStyleRule("font-size", "1rem"); + expect(p).toHaveStyleRule("line-height", "1.5rem"); + expect(p).toHaveStyleRule("letter-spacing", "0.014rem"); + expect(p).toHaveStyleRule("font-weight", "600"); + expect(p).toHaveStyleRule("display", "inline"); + expect(p).toHaveStyleRule("color", "#282828"); + }); + + it("renders BodyMD with paragraph styling", () => { + const { container } = render( + + This is medium body text + + ); + + const p = container.firstChild; + expect(p).toHaveStyleRule("font-size", "0.875rem"); + expect(p).toHaveStyleRule("line-height", "1.6rem"); + expect(p).toHaveStyleRule("letter-spacing", "0.012rem"); + expect(p).toHaveStyleRule("margin-bottom", "0.9187500000000001rem"); + expect(p).toHaveStyleRule("display", "block"); + expect(p).toHaveStyleRule("color", "#282828"); + }); +}); diff --git a/tests/typography/typography-component-link.spec.tsx b/tests/typography/typography-component-link.spec.tsx new file mode 100644 index 000000000..765909818 --- /dev/null +++ b/tests/typography/typography-component-link.spec.tsx @@ -0,0 +1,92 @@ +import React from "react"; +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import { Typography } from "../../src/typography/typography"; +import { ThemeSpec } from "../../src/theme/types"; +import { ThemeProvider } from "styled-components"; + +describe("Typography Link Components", () => { + it("renders LinkBL with correct styles", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", + }; + + const { container } = render( + + + This is a baseline link + + + ); + + const link = container.firstChild; + expect(link).toHaveStyleRule("font-size", "1.125rem"); + expect(link).toHaveStyleRule("line-height", "1.625rem"); + expect(link).toHaveStyleRule("letter-spacing", "0rem"); + expect(link).toHaveStyleRule("font-weight", "400"); + expect(link).toHaveStyleRule("color", "#1768BE"); + }); + + it("renders LinkLG with correct styles", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", + }; + + const { container } = render( + + + This is a large link + + + ); + + const link = container.firstChild; + expect(link).toHaveStyleRule("font-size", "1rem"); + expect(link).toHaveStyleRule("line-height", "1.5rem"); + expect(link).toHaveStyleRule("letter-spacing", "0.014rem"); + expect(link).toHaveStyleRule("font-weight", "600"); + expect(link).toHaveStyleRule("display", "inline"); + expect(link).toHaveStyleRule("color", "#1768BE"); + }); + + it("renders external LinkSM with external icon", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", + }; + + const { container } = render( + + + External Small Link + + + ); + + const link = container.firstChild; + expect(link).toHaveStyleRule("font-size", "0.75rem"); + expect(link).toHaveStyleRule("line-height", "1.2rem"); + expect(link).toHaveStyleRule("letter-spacing", "0.012rem"); + expect(link).toHaveStyleRule("color", "#1768BE"); + + const icon = container.querySelector("svg"); + expect(icon).not.toBeNull(); + }); +}); diff --git a/tests/typography/typography-component.spec.tsx b/tests/typography/typography-component.spec.tsx new file mode 100644 index 000000000..7878a6455 --- /dev/null +++ b/tests/typography/typography-component.spec.tsx @@ -0,0 +1,47 @@ +import React from "react"; +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import { Typography } from "../../src/typography/typography"; +import { ThemeSpec } from "../../src/theme/types"; +import { ThemeProvider } from "styled-components"; + +describe("Typography Components", () => { + it("renders H1 with correct styles", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", + }; + + const { container } = render( + + + Hello World + + + ); + + const h1 = container.firstChild; + expect(h1).toHaveStyleRule("font-size", "3rem"); + expect(h1).toHaveStyleRule("display", "inline"); + expect(h1).toHaveStyleRule("color", "#282828"); + expect(h1).toHaveStyleRule("font-weight", "700"); + }); + + it("renders H2 as block with paragraph styling", () => { + const { container } = render( + Hello World + ); + + const h2 = container.firstChild; + expect(h2).toHaveStyleRule("font-size", "2.5rem"); + expect(h2).toHaveStyleRule("display", "block"); + expect(h2).toHaveStyleRule("margin-bottom", "2.625rem"); + expect(h2).toHaveStyleRule("color", "#282828"); + expect(h2).toHaveStyleRule("font-weight", "400"); + }); +}); From c69304a77ddbd5fd89444075c59939069dddf31a Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Mon, 23 Sep 2024 16:32:31 +0800 Subject: [PATCH 0465/1949] [BOOKINGSG-6120][JH] add test cases for combobox timerangepicker --- src/shared/dropdown-list-v2/dropdown-list.tsx | 4 +- .../combobox-picker/combobox-picker.tsx | 4 +- .../time-range-picker.spec.tsx | 555 ++++++++++++++++++ 3 files changed, 560 insertions(+), 3 deletions(-) create mode 100644 tests/time-range-picker/time-range-picker.spec.tsx diff --git a/src/shared/dropdown-list-v2/dropdown-list.tsx b/src/shared/dropdown-list-v2/dropdown-list.tsx index 216791b48..bdf7dd2f6 100644 --- a/src/shared/dropdown-list-v2/dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/dropdown-list.tsx @@ -209,7 +209,7 @@ export const DropdownList = ({ if (topScrollItem === undefined) return; // Delay to ensure render is complete - setTimeout(() => { + const timer = setTimeout(() => { const index = listItems.indexOf(topScrollItem); const focusedItem = listItemRefs.current[index]; @@ -221,6 +221,8 @@ export const DropdownList = ({ setFocusedIndex(index); }, 0); + + return () => clearTimeout(timer); }, [listItemRefs, listItems, setFocusedIndex, topScrollItem]); useEffect(() => { diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index 5c48920a7..056fdc71b 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -81,8 +81,8 @@ export const ComboboxPicker = ({ useEffect(() => { if (value) { - const start = parseInput(value.start); - const end = parseInput(value.end); + const start = parseInput(value.start) ?? ""; + const end = parseInput(value.end) ?? ""; setStartTimeVal(start); setEndTimeVal(end); diff --git a/tests/time-range-picker/time-range-picker.spec.tsx b/tests/time-range-picker/time-range-picker.spec.tsx new file mode 100644 index 000000000..b6689550c --- /dev/null +++ b/tests/time-range-picker/time-range-picker.spec.tsx @@ -0,0 +1,555 @@ +import { act, render, screen, waitFor } from "@testing-library/react"; +import { FormTimeRangePicker } from "../../src/form/form-time-range-picker"; +import { TimeRangePicker } from "../../src/time-range-picker/time-range-picker"; +import { TimeHelper } from "../../src/util/time-helper"; +import userEvent from "@testing-library/user-event"; + +// ============================================================================= +// UNIT TESTS +// ============================================================================= +const START_LABEL = "Start time input"; +const END_LABEL = "End time input"; +const DROPDOWN_TESTID = "dropdown-list"; + +describe("TimeRangePicker", () => { + beforeEach(() => { + jest.clearAllMocks(); + global.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn(), + })); + }); + + describe("Combobox variant", () => { + it("should render the component", () => { + render(); + + expect(screen.queryByLabelText(START_LABEL)).toBeInTheDocument(); + expect(screen.queryByLabelText(END_LABEL)).toBeInTheDocument(); + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + }); + + it("should render with initial values", () => { + render( + + ); + + expect(screen.queryByLabelText(START_LABEL)).toHaveValue("9:00am"); + expect(screen.queryByLabelText(END_LABEL)).toHaveValue("3:00pm"); + }); + + it("should handle clear button click", async () => { + const user = userEvent.setup(); + render( + + ); + + await user.click(screen.queryByLabelText("Clear")); + + expect(screen.queryByLabelText(START_LABEL)).toHaveValue(""); + expect(screen.queryByLabelText(END_LABEL)).toHaveValue(""); + }); + + it("should open dropdown on input click", async () => { + const user = userEvent.setup(); + render(); + user.click(screen.getByLabelText(START_LABEL)); + await waitFor(() => + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible() + ); + }); + + describe("generated dropdown options", () => { + it("should have end first option be after start time", async () => { + render( + + ); + + screen.getByLabelText(END_LABEL).focus(); + expect(screen.queryAllByRole("option")[0]).toHaveTextContent( + "9:00am" + ); + }); + + it("should have correct options for 24hr format", async () => { + render( + + ); + + screen.getByLabelText(START_LABEL).focus(); + expect(screen.queryAllByRole("option")[0]).toHaveTextContent( + "00:00" + ); + }); + + it("should have correct start/end limits", async () => { + render( + + ); + + screen.getByLabelText(START_LABEL).focus(); + expect(screen.queryAllByRole("option")[0]).toHaveTextContent( + "1:00pm" + ); + screen.getByLabelText(END_LABEL).focus(); + expect( + screen.queryAllByRole("option").slice(-1)[0] + ).toHaveTextContent("6:00pm"); + }); + + it("should have correct interval between options", async () => { + render( + + ); + + screen.getByLabelText(START_LABEL).focus(); + const options = screen + .getAllByRole("option") + .map((option) => option.textContent); + expect(options).toEqual([ + "1:00pm", + "2:00pm", + "3:00pm", + "4:00pm", + ]); + }); + }); + + describe("validation errors", () => { + it("should show error if start time is after end time", () => { + render( + + ); + + expect( + screen.queryByText("End time must be after start time") + ).toBeInTheDocument(); + }); + + it("should show error if start input cannot be parsed", async () => { + const user = userEvent.setup(); + const mockOnChange = jest.fn(); + render( + + ); + + screen.getByLabelText(START_LABEL).focus(); + await act(async () => { + await user.keyboard("abc"); + }); + expect( + screen.queryByText("Invalid start time") + ).toBeInTheDocument(); + + await act(async () => { + await user.keyboard("{Enter}"); + }); + expect(screen.getByLabelText(START_LABEL)).toHaveValue(""); + expect(mockOnChange).toHaveBeenCalledTimes(0); + + // Remain at start if both fields are empty + expect(screen.getByLabelText(START_LABEL)).toHaveFocus(); + }); + + it("should show error if end input cannot be parsed", async () => { + const user = userEvent.setup(); + render(); + + screen.getByLabelText(END_LABEL).focus(); + await act(async () => { + await user.keyboard("xyz"); + }); + + expect( + screen.queryByText("Invalid end time") + ).toBeInTheDocument(); + }); + + it("should show error message when 'errorMessage' prop is true", async () => { + render( + + ); + + // "Error Message" should overwrite internal error + expect(screen.queryByText("Error Message")).toBeInTheDocument(); + }); + }); + + describe("parseInput tests", () => { + it("should parse regex matching strings", async () => { + expect(TimeHelper.parseInput("0")).toBe("12:00am"); + expect(TimeHelper.parseInput("0:")).toBe("12:00am"); + expect(TimeHelper.parseInput("9.30")).toBe("9:30am"); + expect(TimeHelper.parseInput("24")).toBe("12:00am"); + expect(TimeHelper.parseInput("1a")).toBe("1:00am"); + expect(TimeHelper.parseInput("1am")).toBe("1:00am"); + expect(TimeHelper.parseInput("8p")).toBe("8:00pm"); + expect(TimeHelper.parseInput("20")).toBe("8:00pm"); + expect(TimeHelper.parseInput("20am")).toBe("8:00pm"); + expect(TimeHelper.parseInput("2359")).toBe("11:59pm"); + }); + + it("should parse for 24hr format", async () => { + expect(TimeHelper.parseInput("0", "24hr")).toBe("00:00"); + expect(TimeHelper.parseInput("24", "24hr")).toBe("00:00"); + expect(TimeHelper.parseInput("1am", "24hr")).toBe("01:00"); + expect(TimeHelper.parseInput("8p", "24hr")).toBe("20:00"); + expect(TimeHelper.parseInput("20", "24hr")).toBe("20:00"); + expect(TimeHelper.parseInput("20am", "24hr")).toBe("20:00"); + }); + + it("should give am for 7 to 11", async () => { + expect(TimeHelper.parseInput("7")).toBe("7:00am"); + expect(TimeHelper.parseInput("8")).toBe("8:00am"); + expect(TimeHelper.parseInput("9")).toBe("9:00am"); + expect(TimeHelper.parseInput("10")).toBe("10:00am"); + expect(TimeHelper.parseInput("11")).toBe("11:00am"); + }); + + it("should give pm for 12 to 6", async () => { + expect(TimeHelper.parseInput("12")).toBe("12:00pm"); + expect(TimeHelper.parseInput("1")).toBe("1:00pm"); + expect(TimeHelper.parseInput("2")).toBe("2:00pm"); + expect(TimeHelper.parseInput("3")).toBe("3:00pm"); + expect(TimeHelper.parseInput("4")).toBe("4:00pm"); + expect(TimeHelper.parseInput("5")).toBe("5:00pm"); + expect(TimeHelper.parseInput("6")).toBe("6:00pm"); + }); + + it("should give undefined (error) for invalid input", async () => { + expect(TimeHelper.parseInput("am")).toBeUndefined(); + expect(TimeHelper.parseInput("pm")).toBeUndefined(); + expect(TimeHelper.parseInput(":00")).toBeUndefined(); + expect(TimeHelper.parseInput("00::")).toBeUndefined(); + expect(TimeHelper.parseInput("1:1")).toBeUndefined(); + expect(TimeHelper.parseInput("1:60")).toBeUndefined(); + expect(TimeHelper.parseInput("25")).toBeUndefined(); + expect(TimeHelper.parseInput("1ama")).toBeUndefined(); + expect(TimeHelper.parseInput("11111")).toBeUndefined(); + }); + }); + + describe("change behavior", () => { + it("should select list item correctly", async () => { + const user = userEvent.setup(); + const mockOnChange = jest.fn(); + const mockOnBlur = jest.fn(); + + render( + + ); + + const startInput = screen.getByLabelText(START_LABEL); + + // Click start dropdown option + user.click(startInput); + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + await act(async () => { + await user.click(screen.queryByText("9:00am")); + }); + await waitFor(() => expect(startInput).toHaveValue("9:00am")); + expect(mockOnChange).toHaveBeenCalledTimes(1); + + // Click end dropdown option + await act(async () => { + await user.click(screen.queryByText("10:00am")); + }); + await waitFor(() => + expect(screen.getByLabelText(END_LABEL)).toHaveValue( + "10:00am" + ) + ); + + expect(mockOnChange).toHaveBeenCalledTimes(2); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + }); + + it("should handle Enter key", async () => { + const user = userEvent.setup(); + const mockOnChange = jest.fn(); + render( + + ); + + const startInput = screen.getByLabelText(START_LABEL); + + startInput.focus(); + user.keyboard("{9}{Enter}"); + await waitFor(() => expect(startInput).toHaveValue("9:00am")); + expect(mockOnChange).toHaveBeenCalledTimes(1); + }); + + it("should handle Tab key", async () => { + const user = userEvent.setup(); + const mockOnChange = jest.fn(); + render( + + ); + + const startInput = screen.getByLabelText(START_LABEL); + + startInput.focus(); + user.keyboard("9"); + user.keyboard("{Tab}"); + await waitFor(() => expect(startInput).toHaveValue("9:00am")); + expect(mockOnChange).toHaveBeenCalledTimes(1); + }); + }); + + describe("focus/blur behavior", () => { + it("should call onFocus on click", async () => { + const user = userEvent.setup(); + const mockOnFocus = jest.fn(); + + render( + + ); + + await user.click(screen.getByLabelText(START_LABEL)); + expect(mockOnFocus).toHaveBeenCalledTimes(1); + }); + + it("should call onBlur via outside click", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + + ); + + user.click(screen.getByLabelText(START_LABEL)); + await waitFor(() => screen.queryByTestId(DROPDOWN_TESTID)); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.click(screen.queryByText("1:00am")); + }); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.click(document.body); + }); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + + it("should dismiss dropdown via Esc key", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + + ); + + user.click(screen.getByLabelText(START_LABEL)); + await waitFor(() => + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible() + ); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await user.keyboard("{Escape}"); + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + + expect(screen.getByLabelText(START_LABEL)).toHaveFocus(); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + }); + + it("should call onBlur after end input", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + const mockOnFocus = jest.fn(); + + render( + <> + + + ); + + // Enter end input + user.click(screen.getByLabelText(END_LABEL)); + await waitFor(() => screen.getByTestId(DROPDOWN_TESTID)); + await waitFor(() => + expect(screen.getByLabelText(END_LABEL)).toHaveFocus() + ); + await act(async () => { + await user.keyboard("{5}{Enter}"); + }); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + expect(mockOnFocus).toHaveBeenCalledTimes(1); + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + }); + + it("should call onFocus and onBlur when cycling through the tab sequence", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + const mockOnFocus = jest.fn(); + + render( + <> + + +
    +); + +export const FlexContent = () => ( + + +

    Header Test

    +

    + This is some testing text in the paragraph tag. +

    + Placeholder + +
    +
    +); + +export const GridNormalContent = () => ( + + +

    Header Test

    +

    This is some testing text in the paragraph tag.

    + Placeholder + +
    +
    +); + +export const GridContentWithSpan = () => ( + + +

    Header Test

    +

    + This is some testing text in the paragraph tag. +

    + Placeholder + +
    +
    +); + +export const StretchContent = () => ( + + +

    Header Test

    +

    + This is some testing text in the paragraph tag. +

    + Placeholder + +
    +
    +); diff --git a/stories/layout-test/Section.stories.tsx b/stories/layout-test/Section.stories.tsx new file mode 100644 index 000000000..d5410fe17 --- /dev/null +++ b/stories/layout-test/Section.stories.tsx @@ -0,0 +1,24 @@ +import { ThemeProvider } from "styled-components"; +import { Section } from "../../src/layout/section"; +import { mockTheme } from "./mock-theme"; + +export default { + title: "Layout-Test/Section", + component: Section, +}; + +export const Default = () => ( + +
    +

    This is a section with default props.

    +
    +
    +); + +export const Stretched = () => ( + +
    +

    This section is stretched.

    +
    +
    +); diff --git a/stories/layout-test/mock-theme.ts b/stories/layout-test/mock-theme.ts new file mode 100644 index 000000000..b65375fa5 --- /dev/null +++ b/stories/layout-test/mock-theme.ts @@ -0,0 +1,11 @@ +import { ThemeSpec } from "../../src/theme/types"; + +export const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", +}; diff --git a/tests/layout/layout-container.spec.tsx b/tests/layout/layout-container.spec.tsx new file mode 100644 index 000000000..21bc44841 --- /dev/null +++ b/tests/layout/layout-container.spec.tsx @@ -0,0 +1,124 @@ +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import { ThemeProvider } from "styled-components"; +import { ThemeSpec } from "../../src/theme/types"; +import { Container } from "../../src/layout/container"; + +const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", +}; + +describe("Container Component", () => { + it("should render with flex layout by default", () => { + const { container } = render( + + Content + + ); + + expect(container.firstChild).toHaveStyleRule("display", "flex"); + }); + + it("should render with flex-column layout when type is 'flex-column'", () => { + const { container } = render( + + Content + + ); + + expect(container.firstChild).toHaveStyleRule("display", "flex"); + expect(container.firstChild).toHaveStyleRule( + "flex-direction", + "column" + ); + }); + + it("should render with grid layout when type is 'grid'", () => { + const { container } = render( + + Content + + ); + + expect(container.firstChild).toHaveStyleRule("display", "grid"); + expect(container.firstChild).toHaveStyleRule( + "grid-template-columns", + "repeat(12,minmax(0,1fr))" + ); + }); + + it("should apply stretch styles when 'stretch' prop is true", () => { + const { container } = render( + + Content + + ); + + expect(container.firstChild).toHaveStyleRule("padding", "0 3rem"); + expect(container.firstChild).toHaveStyleRule("width", "auto"); + }); + + it("should apply responsive styles based on media queries", () => { + const { container } = render( + + Content + + ); + + // Check styles for xl-max media query + expect(container.firstChild).toHaveStyleRule("max-width", "1140px", { + media: `screen and (max-width: 1440px)`, + }); + + expect(container.firstChild).toHaveStyleRule("max-width", "720px", { + media: `screen and (max-width: 767px)`, + }); + + expect(container.firstChild).toHaveStyleRule("width", "100%", { + media: `screen and (max-width: 420px)`, + }); + expect(container.firstChild).toHaveStyleRule("padding", "0", { + media: `screen and (max-width: 420px)`, + }); + expect(container.firstChild).toHaveStyleRule("max-width", "unset", { + media: `screen and (max-width: 420px)`, + }); + }); + + it("should apply responsive grid styles based on media queries", () => { + const { container } = render( + + Content + + ); + + // Check grid styles for md-max media query + expect(container.firstChild).toHaveStyleRule("column-gap", "1.5rem", { + media: `screen and (max-width: 767px)`, + }); + expect(container.firstChild).toHaveStyleRule( + "grid-template-columns", + "repeat(8,minmax(0,1fr))", + { + media: `screen and (max-width: 767px)`, + } + ); + + expect(container.firstChild).toHaveStyleRule("column-gap", "1rem", { + media: `screen and (max-width: 420px)`, + }); + expect(container.firstChild).toHaveStyleRule( + "grid-template-columns", + "repeat(4,minmax(0,1fr))", + { + media: `screen and (max-width: 420px)`, + } + ); + }); +}); diff --git a/tests/layout/layout-content.spec.tsx b/tests/layout/layout-content.spec.tsx new file mode 100644 index 000000000..5b576462d --- /dev/null +++ b/tests/layout/layout-content.spec.tsx @@ -0,0 +1,104 @@ +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import { ThemeProvider } from "styled-components"; +import { ThemeSpec } from "../../src/theme/types"; +import { Content } from "../../src/layout/content"; + +const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", +}; +// Test it out on the browser +describe("Content Component", () => { + it("should render correctly with default props", () => { + const { container, getByTestId } = render( + + Test Content + + ); + + // Verify that the Section and Container components are rendered + const section = getByTestId("content"); + const containerElement = getByTestId("content-container"); + + expect(section).toBeInTheDocument(); + expect(containerElement).toBeInTheDocument(); + + // Verify default styling + expect(section).toHaveStyleRule("display", "block"); + expect(containerElement).toHaveStyleRule("display", "flex"); + }); + + it("should apply stretch styles when 'stretch' prop is true", () => { + const { getByTestId } = render( + + Test Content + + ); + + const section = getByTestId("content"); + const containerElement = getByTestId("content-container"); + + // Verify stretch styles on Section + expect(section).toHaveStyleRule("padding", "0 1.5rem", { + media: `screen and (max-width: 1440px)`, + }); + + // Verify stretch styles on Container + expect(containerElement).toHaveStyleRule("padding", "0 3rem"); + }); + + it("should render Container with flex-column layout when type is 'flex-column'", () => { + const { getByTestId } = render( + + Test Content + + ); + + const containerElement = getByTestId("content-container"); + + // Verify that Container has flex-column layout + expect(containerElement).toHaveStyleRule("display", "flex"); + expect(containerElement).toHaveStyleRule("flex-direction", "column"); + }); + + it("should render Container with grid layout when type is 'grid'", () => { + const { getByTestId } = render( + + Test Content + + ); + + const containerElement = getByTestId("content-container"); + + // Verify that Container has grid layout + expect(containerElement).toHaveStyleRule("display", "grid"); + expect(containerElement).toHaveStyleRule( + "grid-template-columns", + "repeat(12,minmax(0,1fr))" + ); + }); + + it("should apply default padding when 'stretch' prop is not true", () => { + const { getByTestId } = render( + + Test Content + + ); + + const section = getByTestId("content"); + const containerElement = getByTestId("content-container"); + + // Verify default padding styles on Section + expect(section).toHaveStyleRule("padding", "0 1.5rem"); + + // Verify default padding styles on Container + expect(containerElement).toHaveStyleRule("padding", "0 0.75rem"); + expect(containerElement).toHaveStyleRule("max-width", "1320px"); + }); +}); diff --git a/tests/layout/layout-section.spec.tsx b/tests/layout/layout-section.spec.tsx new file mode 100644 index 000000000..cd2a8b302 --- /dev/null +++ b/tests/layout/layout-section.spec.tsx @@ -0,0 +1,80 @@ +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import { ThemeProvider } from "styled-components"; +import { ThemeSpec } from "../../src/theme/types"; +import { Section } from "../../src/layout/section"; + +const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", +}; + +describe("Section Component", () => { + it("should render with default block display and apply default padding when 'stretch' prop is not provided", () => { + const { container } = render( + +
    Content
    +
    + ); + + expect(container.firstChild).toHaveStyleRule("display", "block"); + expect(container.firstChild).toHaveStyleRule("padding", "0 1.5rem"); + expect(container.firstChild).toHaveStyleRule( + "padding-left", + "1.5rem !important" + ); + expect(container.firstChild).toHaveStyleRule( + "padding-right", + "1.5rem !important" + ); + }); + + it("should apply stretch styles when 'stretch' prop is true", () => { + const { container } = render( + +
    Content
    +
    + ); + + expect(container.firstChild).toHaveStyleRule("padding", "0 1.5rem", { + media: `screen and (max-width: 1440px)`, + }); + expect(container.firstChild).toHaveStyleRule( + "padding-left", + "1.5rem !important", + { + media: `screen and (max-width: 1440px)`, + } + ); + expect(container.firstChild).toHaveStyleRule( + "padding-right", + "1.5rem !important", + { + media: `screen and (max-width: 1440px)`, + } + ); + }); + + it("should apply media query styles correctly for default", () => { + const { container } = render( + +
    Content
    +
    + ); + + expect(container.firstChild).toHaveStyleRule("padding", "0 1.5rem"); + expect(container.firstChild).toHaveStyleRule( + "padding-left", + "1.5rem !important" + ); + expect(container.firstChild).toHaveStyleRule( + "padding-right", + "1.5rem !important" + ); + }); +}); From d4c4f80743186fceff5c3c5a01937156b55f91ea Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Mon, 23 Sep 2024 10:37:29 +0800 Subject: [PATCH 0467/1949] [CCUBE-1554][MAHI]Codemod scripts for migrating text and mediaquery and their test cases --- codemods/migrate-mediaquery/data.ts | 20 ++++ codemods/migrate-mediaquery/index.ts | 95 +++++++++++++++++++ codemods/migrate-text/data.ts | 16 ++++ codemods/migrate-text/index.ts | 61 ++++++++++++ tests/codemod/migrate-mediaQuery/test-data.ts | 95 +++++++++++++++++++ .../migrate-mediaQuery/transformer.spec.tsx | 36 +++++++ tests/codemod/migrate-text/test-data.ts | 54 +++++++++++ .../codemod/migrate-text/transformer.spec.tsx | 36 +++++++ 8 files changed, 413 insertions(+) create mode 100644 codemods/migrate-mediaquery/data.ts create mode 100644 codemods/migrate-mediaquery/index.ts create mode 100644 codemods/migrate-text/data.ts create mode 100644 codemods/migrate-text/index.ts create mode 100644 tests/codemod/migrate-mediaQuery/test-data.ts create mode 100644 tests/codemod/migrate-mediaQuery/transformer.spec.tsx create mode 100644 tests/codemod/migrate-text/test-data.ts create mode 100644 tests/codemod/migrate-text/transformer.spec.tsx diff --git a/codemods/migrate-mediaquery/data.ts b/codemods/migrate-mediaquery/data.ts new file mode 100644 index 000000000..a923eeec6 --- /dev/null +++ b/codemods/migrate-mediaquery/data.ts @@ -0,0 +1,20 @@ +export const mediaQueryMap = { + MaxWidth: { + mobileS: "xxs", + mobileM: "xs", + mobileL: "sm", + tablet: "lg", + desktopM: "xl", + desktopL: "xl", + desktop4k: "xl", + }, + MinWidth: { + mobileS: "xs", + mobileM: "sm", + mobileL: "md", + tablet: "xl", + desktopM: "xxl", + desktopL: "xxl", + desktop4k: "xxl", + }, +}; diff --git a/codemods/migrate-mediaquery/index.ts b/codemods/migrate-mediaquery/index.ts new file mode 100644 index 000000000..93218a2d8 --- /dev/null +++ b/codemods/migrate-mediaquery/index.ts @@ -0,0 +1,95 @@ +import { API, FileInfo, JSCodeshift } from "jscodeshift"; +import { mediaQueryMap } from "./data"; + +export default function transformer(file: FileInfo, api: API, options: any) { + const j: JSCodeshift = api.jscodeshift; + const source = j(file.source); + + let isV2MediaQueryImport = false; + let isV2MediaWidthsUsed = false; + + source.find(j.ImportDeclaration).forEach((path) => { + const importPath = path.node.source.value; + + if (importPath === "@lifesg/react-design-system/v2_media") { + isV2MediaQueryImport = true; + + // loop over specifiers to rename V2_MediaQuery + if (path.node.specifiers && path.node.specifiers.length > 0) { + path.node.specifiers.forEach((specifier) => { + if (j.ImportSpecifier.check(specifier)) { + if (specifier.imported.name === "V2_MediaQuery") { + specifier.imported.name = "MediaQuery"; + if ( + specifier.local && + specifier.local.name === "V2_MediaQuery" + ) { + specifier.local.name = "MediaQuery"; + } + } else if ( + specifier.imported.name === "V2_MediaWidths" + ) { + isV2MediaWidthsUsed = true; + } + } + }); + + // change the import source path + path.node.source.value = "@lifesg/react-design-system/theme"; + } + } + }); + + if (isV2MediaWidthsUsed) { + let hasLoggedV2MediaWidthsWarning = false; + + source + .find(j.Identifier, { name: "V2_MediaWidths" }) + .forEach((path) => { + if (!hasLoggedV2MediaWidthsWarning) { + console.error( + `\x1b[31mDeprecated usage detected: V2_MediaWidths is deprecated and needs adjustment. File: ${file.path}\x1b[0m` + ); + hasLoggedV2MediaWidthsWarning = true; + } + }); + } + + if (isV2MediaQueryImport) { + // change all instances of V2_MediaQuery + source.find(j.Identifier, { name: "V2_MediaQuery" }).forEach((path) => { + path.node.name = "MediaQuery"; + }); + + // for nested member expression + source.find(j.MemberExpression).forEach((path) => { + const object = path.node.object; + const property = path.node.property; + + // checking the obj + if ( + j.MemberExpression.check(object) && // ensure obj is a MemberExpression + j.Identifier.check(object.object) && + object.object.name === "MediaQuery" && // check if MediaQuery + j.Identifier.check(object.property) && // max,min width + (object.property.name === "MaxWidth" || + object.property.name === "MinWidth") && + j.Identifier.check(property) + ) { + const queryType = object.property.name; + const mediaKey = property.name; + + // check if the mediaKey exists in the mediaQueryMap + if ( + mediaQueryMap[queryType] && + mediaQueryMap[queryType][mediaKey] + ) { + const newMediaKey = mediaQueryMap[queryType][mediaKey]; + property.name = newMediaKey; + } + } + }); + } + + return source.toSource(); +} diff --git a/codemods/migrate-text/data.ts b/codemods/migrate-text/data.ts new file mode 100644 index 000000000..a301729fe --- /dev/null +++ b/codemods/migrate-text/data.ts @@ -0,0 +1,16 @@ +export const textComponentMap = { + D1: "HeaderXXL", + D2: "HeaderXL", + D3: "HeaderMD", + D4: "HeaderSM", + H1: "HeaderLG", + H2: "HeaderMD", + H3: "HeaderSM", + H4: "HeaderXS", + H5: "HeaderXS", + H6: "HeaderXS", + DBody: "HeaderSM", + Body: "BodyBL", + BodySmall: "BodyLG", + XSmall: "LinkSM", +}; diff --git a/codemods/migrate-text/index.ts b/codemods/migrate-text/index.ts new file mode 100644 index 000000000..c0695d50d --- /dev/null +++ b/codemods/migrate-text/index.ts @@ -0,0 +1,61 @@ +import { API, FileInfo, JSCodeshift } from "jscodeshift"; +import { textComponentMap } from "./data"; + +export default function transformer(file: FileInfo, api: API, options: any) { + const j: JSCodeshift = api.jscodeshift; + const source = j(file.source); + + let isLifesgImport = false; + + // Check import declarations + source.find(j.ImportDeclaration).forEach((path) => { + const importPath = path.node.source.value; + + // If the import is from lifesg ds , set to true + if (importPath === "@lifesg/react-design-system/v2_text") { + isLifesgImport = true; + + // Check if specifiers exist and iterate over them + if (path.node.specifiers && path.node.specifiers.length > 0) { + path.node.specifiers.forEach((specifier) => { + if ( + j.ImportSpecifier.check(specifier) && + specifier.imported.name === "V2_Text" + ) { + specifier.imported.name = "Typography"; + if ( + specifier.local && + specifier.local.name === "V2_Text" + ) { + specifier.local.name = "Typography"; + } + + // Update the import path + path.node.source.value = + "@lifesg/react-design-system/typography"; + } + }); + } + } + }); + + // change if import from @lifesg/react-design-system + if (isLifesgImport) { + // update JSX and identifiers + source.find(j.JSXMemberExpression).forEach((path) => { + const { object, property } = path.node; + + // Change V2_text to typography + if (j.JSXIdentifier.check(object) && object.name === "V2_Text") { + object.name = "Typography"; + + // Map properties (e.g., Body -> BodyBL) + if (textComponentMap[property.name]) { + property.name = textComponentMap[property.name]; + } + } + }); + } + + return source.toSource(); +} diff --git a/tests/codemod/migrate-mediaQuery/test-data.ts b/tests/codemod/migrate-mediaQuery/test-data.ts new file mode 100644 index 000000000..91bd6a25e --- /dev/null +++ b/tests/codemod/migrate-mediaQuery/test-data.ts @@ -0,0 +1,95 @@ +export const inputCode = ` +import { V2_MediaQuery, V2_MediaWidths } from "@lifesg/react-design-system/v2_media"; + +const StyledContainer = styled.div\` + flex-grow: 1; + margin: 0 auto; + position: relative; + width: auto; + height: auto; + + \${(props) => { + if (props.stretch) { + return css\` + padding: 0 3rem; + \`; + } else { + return css\` + padding: 0 0.75rem; + /* Max width restrictions */ + max-width: 1320px; + + \${V2_MediaQuery.MaxWidth.desktopM} { + max-width: 1140px; + } + \`; + } + }} + \${V2_MediaQuery.MaxWidth.tablet} { + max-width: 720px; + } + \${V2_MediaQuery.MaxWidth.mobileL} { + width: 100%; + padding: 0; + max-width: unset; + } + + @media (max-width: \${V2_MediaWidths.mobileL}px) { + padding: 0; + max-width: 100%; + } + + @media (max-width: \${V2_MediaWidths.mobileL}px) { + padding: 0; + max-width: 100%; + } +\`; +`; + +export const expectedOutputCode = ` +import { MediaQuery, V2_MediaWidths } from "@lifesg/react-design-system/theme"; + +const StyledContainer = styled.div\` + flex-grow: 1; + margin: 0 auto; + position: relative; + width: auto; + height: auto; + + \${(props) => { + if (props.stretch) { + return css\` + padding: 0 3rem; + \`; + } else { + return css\` + padding: 0 0.75rem; + /* Max width restrictions */ + max-width: 1320px; + + \${MediaQuery.MaxWidth.xl} { + max-width: 1140px; + } + \`; + } + }} + \${MediaQuery.MaxWidth.lg} { + max-width: 720px; + } + \${MediaQuery.MaxWidth.sm} { + width: 100%; + padding: 0; + max-width: unset; + } + + @media (max-width: \${V2_MediaWidths.mobileL}px) { + padding: 0; + max-width: 100%; + } + + @media (max-width: \${V2_MediaWidths.mobileL}px) { + padding: 0; + max-width: 100%; + } +\`; +`; diff --git a/tests/codemod/migrate-mediaQuery/transformer.spec.tsx b/tests/codemod/migrate-mediaQuery/transformer.spec.tsx new file mode 100644 index 000000000..5e34ec2cc --- /dev/null +++ b/tests/codemod/migrate-mediaQuery/transformer.spec.tsx @@ -0,0 +1,36 @@ +import { execSync } from "child_process"; +import * as fs from "fs"; +import * as path from "path"; +import { expectedOutputCode, inputCode } from "./test-data"; + +describe("Codemod Transformer for V2_Layout to Layout", () => { + const inputPath = path.join(__dirname, "input.tsx"); + const outputPath = path.join(__dirname, "output.tsx"); + + beforeAll(() => { + // Create sample input file for testing + jest.resetAllMocks(); + fs.writeFileSync(inputPath, inputCode); + }); + + afterAll(() => { + // Delete the files created for testing (comment this out to view files) + fs.unlinkSync(inputPath); + fs.unlinkSync(outputPath); + }); + + it("should transform V2_Layout components to Layout components and map props correctly", () => { + fs.copyFileSync(inputPath, outputPath); + + // Execute the jscodeshift command for the codemod + execSync( + `jscodeshift --parser=tsx -t ./codemods/migrate-mediaquery ${outputPath}` + ); + + // Check the transformed code + const transformedCode = fs.readFileSync(outputPath, "utf8"); + + // Compare the transformed code with the expected output + expect(transformedCode.trim()).toEqual(expectedOutputCode.trim()); + }); +}); diff --git a/tests/codemod/migrate-text/test-data.ts b/tests/codemod/migrate-text/test-data.ts new file mode 100644 index 000000000..7e9e5e64b --- /dev/null +++ b/tests/codemod/migrate-text/test-data.ts @@ -0,0 +1,54 @@ +export const inputCode = ` + + +import { V2_Text } from "@lifesg/react-design-system/v2_text"; + +const ExampleComponent = () => ( +
    + This is body text + This is a heading + This is smaller body text + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Morbi euismod quam eget ex tincidunt dapibus. Donec vitae + leo vehicula, fermentum urna vitae, gravida ex. + + + Aenean imperdiet faucibus velit, eu maximus libero facilisis + ut. Donec nulla nisi, fermentum eget lorem at, feugiat + ultricies ex. Aliquam volutpat nibh non suscipit rhoncus. + + +
    +); + +export default ExampleComponent; +`; + +export const expectedOutputCode = ` + +import { Typography } from "@lifesg/react-design-system/typography"; + +const ExampleComponent = () => ( +
    + This is body text + This is a heading + This is smaller body text + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Morbi euismod quam eget ex tincidunt dapibus. Donec vitae + leo vehicula, fermentum urna vitae, gravida ex. + + + Aenean imperdiet faucibus velit, eu maximus libero facilisis + ut. Donec nulla nisi, fermentum eget lorem at, feugiat + ultricies ex. Aliquam volutpat nibh non suscipit rhoncus. + + +
    +); + +export default ExampleComponent; +`; diff --git a/tests/codemod/migrate-text/transformer.spec.tsx b/tests/codemod/migrate-text/transformer.spec.tsx new file mode 100644 index 000000000..0f1dd6001 --- /dev/null +++ b/tests/codemod/migrate-text/transformer.spec.tsx @@ -0,0 +1,36 @@ +import { execSync } from "child_process"; +import * as fs from "fs"; +import * as path from "path"; +import { expectedOutputCode, inputCode } from "./test-data"; + +describe("Codemod Transformer for V2_Text to Typography", () => { + const inputPath = path.join(__dirname, "input.tsx"); + const outputPath = path.join(__dirname, "output.tsx"); + + beforeAll(() => { + // create sample input file for testing + jest.resetAllMocks(); + fs.writeFileSync(inputPath, inputCode); + }); + + afterAll(() => { + // delete the files created for testing (comment this out to view files) + fs.unlinkSync(inputPath); + fs.unlinkSync(outputPath); + }); + + it("should transform V2_Text components to Typography components", () => { + fs.copyFileSync(inputPath, outputPath); + + // Execute the jscodeshift command for the codemod + execSync( + `jscodeshift --parser=tsx -t ./codemods/migrate-text ${outputPath}` + ); + + // Check the transformed code + const transformedCode = fs.readFileSync(outputPath, "utf8"); + + // Compare the transformed code with the expected output + expect(transformedCode.trim()).toEqual(expectedOutputCode.trim()); + }); +}); From 10fe9a389a02b69233a90d26ead7b131b010c32f Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 24 Sep 2024 13:32:23 +0800 Subject: [PATCH 0468/1949] [BOOKINGSG-6120][JH] add time-helper test for parseInput --- .../time-range-picker.spec.tsx | 55 ------------------- tests/utils/time-helper.spec.ts | 55 +++++++++++++++++++ 2 files changed, 55 insertions(+), 55 deletions(-) create mode 100644 tests/utils/time-helper.spec.ts diff --git a/tests/time-range-picker/time-range-picker.spec.tsx b/tests/time-range-picker/time-range-picker.spec.tsx index b6689550c..76bfadd7d 100644 --- a/tests/time-range-picker/time-range-picker.spec.tsx +++ b/tests/time-range-picker/time-range-picker.spec.tsx @@ -1,7 +1,6 @@ import { act, render, screen, waitFor } from "@testing-library/react"; import { FormTimeRangePicker } from "../../src/form/form-time-range-picker"; import { TimeRangePicker } from "../../src/time-range-picker/time-range-picker"; -import { TimeHelper } from "../../src/util/time-helper"; import userEvent from "@testing-library/user-event"; // ============================================================================= @@ -206,60 +205,6 @@ describe("TimeRangePicker", () => { }); }); - describe("parseInput tests", () => { - it("should parse regex matching strings", async () => { - expect(TimeHelper.parseInput("0")).toBe("12:00am"); - expect(TimeHelper.parseInput("0:")).toBe("12:00am"); - expect(TimeHelper.parseInput("9.30")).toBe("9:30am"); - expect(TimeHelper.parseInput("24")).toBe("12:00am"); - expect(TimeHelper.parseInput("1a")).toBe("1:00am"); - expect(TimeHelper.parseInput("1am")).toBe("1:00am"); - expect(TimeHelper.parseInput("8p")).toBe("8:00pm"); - expect(TimeHelper.parseInput("20")).toBe("8:00pm"); - expect(TimeHelper.parseInput("20am")).toBe("8:00pm"); - expect(TimeHelper.parseInput("2359")).toBe("11:59pm"); - }); - - it("should parse for 24hr format", async () => { - expect(TimeHelper.parseInput("0", "24hr")).toBe("00:00"); - expect(TimeHelper.parseInput("24", "24hr")).toBe("00:00"); - expect(TimeHelper.parseInput("1am", "24hr")).toBe("01:00"); - expect(TimeHelper.parseInput("8p", "24hr")).toBe("20:00"); - expect(TimeHelper.parseInput("20", "24hr")).toBe("20:00"); - expect(TimeHelper.parseInput("20am", "24hr")).toBe("20:00"); - }); - - it("should give am for 7 to 11", async () => { - expect(TimeHelper.parseInput("7")).toBe("7:00am"); - expect(TimeHelper.parseInput("8")).toBe("8:00am"); - expect(TimeHelper.parseInput("9")).toBe("9:00am"); - expect(TimeHelper.parseInput("10")).toBe("10:00am"); - expect(TimeHelper.parseInput("11")).toBe("11:00am"); - }); - - it("should give pm for 12 to 6", async () => { - expect(TimeHelper.parseInput("12")).toBe("12:00pm"); - expect(TimeHelper.parseInput("1")).toBe("1:00pm"); - expect(TimeHelper.parseInput("2")).toBe("2:00pm"); - expect(TimeHelper.parseInput("3")).toBe("3:00pm"); - expect(TimeHelper.parseInput("4")).toBe("4:00pm"); - expect(TimeHelper.parseInput("5")).toBe("5:00pm"); - expect(TimeHelper.parseInput("6")).toBe("6:00pm"); - }); - - it("should give undefined (error) for invalid input", async () => { - expect(TimeHelper.parseInput("am")).toBeUndefined(); - expect(TimeHelper.parseInput("pm")).toBeUndefined(); - expect(TimeHelper.parseInput(":00")).toBeUndefined(); - expect(TimeHelper.parseInput("00::")).toBeUndefined(); - expect(TimeHelper.parseInput("1:1")).toBeUndefined(); - expect(TimeHelper.parseInput("1:60")).toBeUndefined(); - expect(TimeHelper.parseInput("25")).toBeUndefined(); - expect(TimeHelper.parseInput("1ama")).toBeUndefined(); - expect(TimeHelper.parseInput("11111")).toBeUndefined(); - }); - }); - describe("change behavior", () => { it("should select list item correctly", async () => { const user = userEvent.setup(); diff --git a/tests/utils/time-helper.spec.ts b/tests/utils/time-helper.spec.ts new file mode 100644 index 000000000..309f0246b --- /dev/null +++ b/tests/utils/time-helper.spec.ts @@ -0,0 +1,55 @@ +import { TimeHelper } from "../../src/util/time-helper"; + +describe("parseInput tests", () => { + it("should parse regex matching strings", async () => { + expect(TimeHelper.parseInput("0")).toBe("12:00am"); + expect(TimeHelper.parseInput("0:")).toBe("12:00am"); + expect(TimeHelper.parseInput("9.30")).toBe("9:30am"); + expect(TimeHelper.parseInput("24")).toBe("12:00am"); + expect(TimeHelper.parseInput("1a")).toBe("1:00am"); + expect(TimeHelper.parseInput("1am")).toBe("1:00am"); + expect(TimeHelper.parseInput("8p")).toBe("8:00pm"); + expect(TimeHelper.parseInput("20")).toBe("8:00pm"); + expect(TimeHelper.parseInput("20am")).toBe("8:00pm"); + expect(TimeHelper.parseInput("2359")).toBe("11:59pm"); + }); + + it("should parse for 24hr format", async () => { + expect(TimeHelper.parseInput("0", "24hr")).toBe("00:00"); + expect(TimeHelper.parseInput("24", "24hr")).toBe("00:00"); + expect(TimeHelper.parseInput("1am", "24hr")).toBe("01:00"); + expect(TimeHelper.parseInput("8p", "24hr")).toBe("20:00"); + expect(TimeHelper.parseInput("20", "24hr")).toBe("20:00"); + expect(TimeHelper.parseInput("20am", "24hr")).toBe("20:00"); + }); + + it("should give am for 7 to 11", async () => { + expect(TimeHelper.parseInput("7")).toBe("7:00am"); + expect(TimeHelper.parseInput("8")).toBe("8:00am"); + expect(TimeHelper.parseInput("9")).toBe("9:00am"); + expect(TimeHelper.parseInput("10")).toBe("10:00am"); + expect(TimeHelper.parseInput("11")).toBe("11:00am"); + }); + + it("should give pm for 12 to 6", async () => { + expect(TimeHelper.parseInput("12")).toBe("12:00pm"); + expect(TimeHelper.parseInput("1")).toBe("1:00pm"); + expect(TimeHelper.parseInput("2")).toBe("2:00pm"); + expect(TimeHelper.parseInput("3")).toBe("3:00pm"); + expect(TimeHelper.parseInput("4")).toBe("4:00pm"); + expect(TimeHelper.parseInput("5")).toBe("5:00pm"); + expect(TimeHelper.parseInput("6")).toBe("6:00pm"); + }); + + it("should give undefined (error) for invalid input", async () => { + expect(TimeHelper.parseInput("am")).toBeUndefined(); + expect(TimeHelper.parseInput("pm")).toBeUndefined(); + expect(TimeHelper.parseInput(":00")).toBeUndefined(); + expect(TimeHelper.parseInput("00::")).toBeUndefined(); + expect(TimeHelper.parseInput("1:1")).toBeUndefined(); + expect(TimeHelper.parseInput("1:60")).toBeUndefined(); + expect(TimeHelper.parseInput("25")).toBeUndefined(); + expect(TimeHelper.parseInput("1ama")).toBeUndefined(); + expect(TimeHelper.parseInput("11111")).toBeUndefined(); + }); +}); From 95707132562598a60a0039a8e7c7c249816b6f34 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Tue, 24 Sep 2024 14:53:04 +0800 Subject: [PATCH 0469/1949] [BOOKINGSG-6120][JH] fix dismissed dropdown + blur interaction --- .../combobox-picker/combobox-picker.tsx | 31 ++++++++++++++++--- .../time-range-picker.spec.tsx | 30 ++++++++++++++++++ 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index 056fdc71b..985c237ef 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -5,6 +5,7 @@ import { DropdownList } from "../../shared/dropdown-list-v2/dropdown-list"; import { DropdownListState } from "../../shared/dropdown-list-v2"; import { ElementWithDropdown } from "../../shared/dropdown-wrapper"; import { ErrorMessage } from "../../form/form-label.style"; +import { OpenChangeReason } from "@floating-ui/react"; import { RangeInputInnerContainer } from "../../shared/range-input-inner-container"; import { SelectorInput, Wrapper } from "../common.styles"; import { SimpleIdGenerator } from "../../util"; @@ -173,10 +174,6 @@ export const ComboboxPicker = ({ }); }; - const handleOnBlur = () => { - handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true }); - }; - const handleTimeChange = ( startInput: string, endInput: string, @@ -247,6 +244,29 @@ export const ComboboxPicker = ({ setDropdownOpen(false); }; + const handleBlur = (event: React.FocusEvent) => { + if ( + nodeRef.current && + !nodeRef.current.contains(event.relatedTarget) && + !dropdownOpen + ) { + // Call only when blur triggered while dropdown is dismissed + handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true }); + } + }; + + // NOTE: Dropdown dismissal (esc) does not trigger onClose + const handleClose = (reason: OpenChangeReason) => { + if (reason === "outside-press") { + // No handleTimeChange to avoid duplicate call from handleBlur + setActiveTimeSelector(null); + setDropdownOpen(false); + } else { + // Dropdown closed via exiting component (eg. tab) + handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true }); + } + }; + // ============================================================================= // RENDER FUNCTIONS // ============================================================================= @@ -308,6 +328,7 @@ export const ComboboxPicker = ({ $disabled={disabled} $error={error || !!validationError} $readOnly={readOnly} + onBlur={handleBlur} > { expect(mockOnBlur).toHaveBeenCalledTimes(1); }); + it("should call onBlur via outside click, if dropdown was dismissed", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + + ); + + user.click(screen.getByLabelText(START_LABEL)); + await waitFor(() => screen.queryByTestId(DROPDOWN_TESTID)); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.click(screen.queryByText("1:00am")); + }); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + // Dismiss dropdown + await act(async () => await user.keyboard("{Esc}")); + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.click(document.body); + }); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + it("should dismiss dropdown via Esc key", async () => { const user = userEvent.setup(); const mockOnBlur = jest.fn(); From c4cb15135bc3e3eeb9672db817253021df7ad19b Mon Sep 17 00:00:00 2001 From: qroll Date: Thu, 19 Sep 2024 23:38:18 +0800 Subject: [PATCH 0470/1949] [MOL-16654][RL] Create inline popover trigger --- src/popover-v2/index.ts | 3 +- src/popover-v2/popover-inline/index.ts | 1 + .../popover-inline/popover-inline.styles.ts | 52 +++++ .../popover-inline/popover-inline.tsx | 29 +++ src/popover-v2/types.ts | 10 + .../popover-inline/popover-inline.mdx | 30 +++ .../popover-inline/popover-inline.stories.tsx | 108 ++++++++++ .../popover-v2/popover-inline/props-table.tsx | 50 +++++ stories/popover-v2/popover.mdx | 8 + stories/popover-v2/props-table.tsx | 191 +++++++++--------- tests/popover/popover-inline.spec.tsx | 73 +++++++ 11 files changed, 460 insertions(+), 95 deletions(-) create mode 100644 src/popover-v2/popover-inline/index.ts create mode 100644 src/popover-v2/popover-inline/popover-inline.styles.ts create mode 100644 src/popover-v2/popover-inline/popover-inline.tsx create mode 100644 stories/popover-v2/popover-inline/popover-inline.mdx create mode 100644 stories/popover-v2/popover-inline/popover-inline.stories.tsx create mode 100644 stories/popover-v2/popover-inline/props-table.tsx create mode 100644 tests/popover/popover-inline.spec.tsx diff --git a/src/popover-v2/index.ts b/src/popover-v2/index.ts index 45f01d955..a327e5517 100644 --- a/src/popover-v2/index.ts +++ b/src/popover-v2/index.ts @@ -1,3 +1,4 @@ -export * from "./popover-trigger"; export * from "./popover"; +export * from "./popover-inline"; +export * from "./popover-trigger"; export * from "./types"; diff --git a/src/popover-v2/popover-inline/index.ts b/src/popover-v2/popover-inline/index.ts new file mode 100644 index 000000000..2e9c0c621 --- /dev/null +++ b/src/popover-v2/popover-inline/index.ts @@ -0,0 +1 @@ +export * from "./popover-inline"; diff --git a/src/popover-v2/popover-inline/popover-inline.styles.ts b/src/popover-v2/popover-inline/popover-inline.styles.ts new file mode 100644 index 000000000..61cbee2b7 --- /dev/null +++ b/src/popover-v2/popover-inline/popover-inline.styles.ts @@ -0,0 +1,52 @@ +import { Color } from "../../color"; +import styled from "styled-components"; +import { PopoverInlineStyle } from "../types"; + +// ============================================================================= +// STYLE INTERFACE +// ============================================================================= + +interface StyledTextProps { + $defaultStyle: PopoverInlineStyle; + $hoverStyle: PopoverInlineStyle; +} + +interface StyledIconProps { + $standalone: boolean; +} + +// ============================================================================= +// STYLING +// ============================================================================= +const getTextStyle = (style: PopoverInlineStyle) => { + switch (style) { + case "underline": + return "text-decoration: underline 1px;"; + case "underline-dashed": + return "text-decoration: underline dashed 1px;"; + } +}; + +export const StyledText = styled.span` + color: ${Color.Primary}; + font-weight: 600; + text-underline-position: under; + + ${({ $defaultStyle }) => getTextStyle($defaultStyle)} + + &:hover, + &:focus-visible { + color: ${Color.Secondary}; + ${({ $hoverStyle }) => getTextStyle($hoverStyle)} + } + + svg { + height: 1lh; // align vertically + width: 1em; // scale icon with font size + vertical-align: top; + } +`; + +export const StyledIcon = styled.span` + ${(props) => !props.$standalone && "margin-left: 0.25rem;"} +`; diff --git a/src/popover-v2/popover-inline/popover-inline.tsx b/src/popover-v2/popover-inline/popover-inline.tsx new file mode 100644 index 000000000..855ef1107 --- /dev/null +++ b/src/popover-v2/popover-inline/popover-inline.tsx @@ -0,0 +1,29 @@ +import { PopoverTrigger } from "../popover-trigger"; +import { PopoverInlineProps } from "../types"; +import { StyledIcon, StyledText } from "./popover-inline.styles"; + +export const PopoverInline = ({ + content, + icon, + underlineStyle = "default", + underlineHoverStyle = "default", + ...otherProps +}: PopoverInlineProps) => { + // ========================================================================= + // RENDER FUNCTIONS + // ========================================================================= + return ( + + + {content} + {icon && {icon}} + + + ); +}; diff --git a/src/popover-v2/types.ts b/src/popover-v2/types.ts index 6fa9030c4..b6102eb5b 100644 --- a/src/popover-v2/types.ts +++ b/src/popover-v2/types.ts @@ -36,3 +36,13 @@ export interface PopoverV2TriggerProps { onPopoverAppear?: (() => void) | undefined; onPopoverDismiss?: (() => void) | undefined; } + +export type PopoverInlineStyle = "default" | "underline" | "underline-dashed"; + +export interface PopoverInlineProps + extends Omit { + content?: React.ReactNode | undefined; + icon?: JSX.Element | undefined; + underlineStyle?: PopoverInlineStyle | undefined; + underlineHoverStyle?: PopoverInlineStyle | undefined; +} diff --git a/stories/popover-v2/popover-inline/popover-inline.mdx b/stories/popover-v2/popover-inline/popover-inline.mdx new file mode 100644 index 000000000..f3a86ec0b --- /dev/null +++ b/stories/popover-v2/popover-inline/popover-inline.mdx @@ -0,0 +1,30 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Heading4, Secondary, Title } from "../../storybook-common"; +import * as PopoverInlineStories from "./popover-inline.stories"; +import { PropsTable } from "./props-table"; + + + +PopoverInline + +Overview + +Provides additional information for content within a text block. + + + +Text style + +The text and icon inherit the font size of the surrounding text. + + + + + +Underline style + + + +Component API + + diff --git a/stories/popover-v2/popover-inline/popover-inline.stories.tsx b/stories/popover-v2/popover-inline/popover-inline.stories.tsx new file mode 100644 index 000000000..68371afc0 --- /dev/null +++ b/stories/popover-v2/popover-inline/popover-inline.stories.tsx @@ -0,0 +1,108 @@ +import { ICircleFillIcon } from "@lifesg/react-icons"; +import type { Meta, StoryObj } from "@storybook/react"; +import { PopoverInline } from "src/popover-v2"; +import { Text } from "src/text"; + +type Component = typeof PopoverInline; + +const meta: Meta = { + title: "Modules/PopoverV2/PopoverInline", + component: PopoverInline, +}; + +export default meta; + +export const InlineText: StoryObj = { + render: () => { + return ( + <> + + The{" "} + {" "} + jumps over the dog + +
    + + The{" "} + {" "} + jumps over the dog + + + ); + }, +}; + +export const InlineIcon: StoryObj = { + render: () => { + return ( + <> + + Get a free slice of pizza today{" "} + } + /> + +
    + + Get a free slice of pizza today{" "} + } + /> + + + ); + }, +}; + +export const InlineTextAndIcon: StoryObj = { + render: () => { + return ( + + Only available on{" "} + } + > + + ); + }, +}; + +export const UnderlineStyle: StoryObj = { + render: () => { + return ( + <> + + This is the{" "} + } + underlineStyle="underline" + underlineHoverStyle="underline" + /> + +
    + + This is the{" "} + } + underlineStyle="underline-dashed" + underlineHoverStyle="underline-dashed" + /> + + + ); + }, +}; diff --git a/stories/popover-v2/popover-inline/props-table.tsx b/stories/popover-v2/popover-inline/props-table.tsx new file mode 100644 index 000000000..48173fb65 --- /dev/null +++ b/stories/popover-v2/popover-inline/props-table.tsx @@ -0,0 +1,50 @@ +import { ApiTable } from "../../storybook-common/api-table"; +import { ApiTableSectionProps } from "../../storybook-common/api-table/types"; +import { COMMON_POPOVER_ATTRIBUTES } from "../props-table"; + +const DATA: ApiTableSectionProps[] = [ + { + attributes: [ + { + name: "className", + description: "Class selector for the component", + propTypes: ["string"], + }, + { + name: "id", + description: "The unique identifier for the component", + propTypes: ["string"], + }, + { + name: "data-testid", + description: "The test identifier for the component", + propTypes: ["string"], + }, + { + name: "content", + description: "The text content to display", + propTypes: ["React.ReactNode"], + }, + { + name: "icon", + description: "The icon to display", + propTypes: ["React.ReactNode"], + }, + { + name: "underlineStyle", + description: "The underline style of the text", + propTypes: ["React.ReactNode"], + defaultValue: `"default"`, + }, + { + name: "underlineHoverStyle", + description: "The underline style of the text when hovered", + propTypes: ["React.ReactNode"], + defaultValue: `"default"`, + }, + ...COMMON_POPOVER_ATTRIBUTES, + ], + }, +]; + +export const PropsTable = () => ; diff --git a/stories/popover-v2/popover.mdx b/stories/popover-v2/popover.mdx index 546f9a0ac..a3145f4b9 100644 --- a/stories/popover-v2/popover.mdx +++ b/stories/popover-v2/popover.mdx @@ -11,6 +11,12 @@ import { PropsTable } from "./props-table"; A component which appears when hovering or clicking on a target element and displays information about a certain element in the page. +This module contains: + +- PopoverV2 - the presentational component +- PopoverTrigger - a utility component that handles triggering of the popover +- [PopoverInline](/docs/modules-popoverv2-popoverinline--docs) - a utility component that displays a text or icon-based trigger + ```tsx import { PopoverTrigger } from "@lifesg/react-design-system/popover-v2"; ``` @@ -54,4 +60,6 @@ If you still encounter z-index issues, try setting a custom `zIndex` or +Component API + diff --git a/stories/popover-v2/props-table.tsx b/stories/popover-v2/props-table.tsx index 2224ccdc2..550b7a9d2 100644 --- a/stories/popover-v2/props-table.tsx +++ b/stories/popover-v2/props-table.tsx @@ -2,6 +2,102 @@ import { ApiTable } from "../storybook-common/api-table"; import { ApiTableSectionProps } from "../storybook-common/api-table/types"; import { TabAttribute, Tabs } from "../storybook-common/tabs"; +export const COMMON_POPOVER_ATTRIBUTES: ApiTableSectionProps["attributes"] = [ + { + name: "popoverContent", + description: ( + <> + The content of the Popover + + ), + propTypes: ["string", "JSX.Element", "() => React.ReactNode"], + mandatory: true, + }, + { + name: "trigger", + description: ( + <> + The trigger for the appearance of the Popover + + ), + propTypes: [`"click"`, `"hover"`], + defaultValue: `"click"`, + }, + { + name: "position", + description: ( + <> + The visual position of the Popover in relation to + its trigger + + ), + propTypes: [ + `"top"`, + `"top-start"`, + `"top-end"`, + `"bottom"`, + `"bottom-start"`, + `"bottom-end"`, + `"left"`, + `"left-start"`, + `"left-end"`, + `"right"`, + `"right-start"`, + `"right-end"`, + ], + defaultValue: `"top"`, + }, + { + name: "zIndex", + description: ( + <> + The custom z-index of the Popover. Try specifying + this if you encounter z-index conflicts. + + ), + propTypes: ["number"], + }, + { + name: "rootNode", + description: ( + <> + The root element that hosts the popover element. Try specifying + this if zIndex does not work. +
    +
    + For example, if the parent of the trigger element has a higher + z-index than the popover, the popover may not be visible. + Specify the parent here instead so that they share the same + stacking context. + + ), + propTypes: ["RefObject"], + defaultValue: ( + <> + documentbody + + ), + }, + { + name: "onPopoverAppear", + description: ( + <> + The callback when the Popover appears + + ), + propTypes: ["() => void"], + }, + { + name: "onPopoverDismiss", + description: ( + <> + The callback when the Popover dismisses + + ), + propTypes: ["() => void"], + }, +]; + const POPOVER_TRIGGER_DATA: ApiTableSectionProps[] = [ { attributes: [ @@ -31,100 +127,7 @@ const POPOVER_TRIGGER_DATA: ApiTableSectionProps[] = [ propTypes: ["React.ReactNode"], mandatory: true, }, - { - name: "popoverContent", - description: ( - <> - The content of the Popover - - ), - propTypes: ["string", "JSX.Element", "() => React.ReactNode"], - mandatory: true, - }, - { - name: "trigger", - description: ( - <> - The trigger for the appearance of the{" "} - Popover - - ), - propTypes: [`"click"`, `"hover"`], - defaultValue: `"click"`, - }, - { - name: "position", - description: ( - <> - The visual position of the Popover in - relation to it’s trigger - - ), - propTypes: [ - `"top"`, - `"top-start"`, - `"top-end"`, - `"bottom"`, - `"bottom-start"`, - `"bottom-end"`, - `"left"`, - `"left-start"`, - `"left-end"`, - `"right"`, - `"right-start"`, - `"right-end"`, - ], - defaultValue: `"top"`, - }, - { - name: "zIndex", - description: ( - <> - The custom z-index of the Popover. Try - specifying this if you encounter z-index conflicts. - - ), - propTypes: ["number"], - }, - { - name: "rootNode", - description: ( - <> - The root element that hosts the popover element. Try - specifying this if zIndex does not work. -
    -
    - For example, if the parent of the trigger element has a - higher z-index than the popover, the popover may not be - visible. Specify the parent here instead so that they - share the same stacking context. - - ), - propTypes: ["RefObject"], - defaultValue: ( - <> - documentbody - - ), - }, - { - name: "onPopoverAppear", - description: ( - <> - The callback when the Popover appears - - ), - propTypes: ["() => void"], - }, - { - name: "onPopoverDismiss", - description: ( - <> - The callback when the Popover dismisses - - ), - propTypes: ["() => void"], - }, + ...COMMON_POPOVER_ATTRIBUTES, ], }, ]; diff --git a/tests/popover/popover-inline.spec.tsx b/tests/popover/popover-inline.spec.tsx new file mode 100644 index 000000000..c3fff9631 --- /dev/null +++ b/tests/popover/popover-inline.spec.tsx @@ -0,0 +1,73 @@ +import { CircleIcon } from "@lifesg/react-icons"; +import { + render, + screen, + waitFor, + waitForElementToBeRemoved, +} from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { PopoverInline } from "../../src/popover-v2"; + +const TEXT_CONTENT = "Text"; +const TOOLTIP_CONTENT = "Tooltip"; + +// ============================================================================= +// UNIT TESTS +// ============================================================================= +describe("PopoverInline", () => { + it("should render the popover text and icon", () => { + render( + } + popoverContent={TOOLTIP_CONTENT} + /> + ); + + const text = screen.getByText(TEXT_CONTENT); + const icon = document.querySelector("svg"); + + expect(text).toBeInTheDocument(); + expect(icon).toBeInTheDocument(); + expect( + text.compareDocumentPosition(icon) & + Node.DOCUMENT_POSITION_FOLLOWING + ).toBeTruthy(); + expect(screen.queryByText(TOOLTIP_CONTENT)).not.toBeInTheDocument(); + }); + + describe("trigger", () => { + it("should display the popover when clicked", async () => { + render( + + ); + + userEvent.click(screen.getByText(TEXT_CONTENT)); + + await waitFor(() => screen.getByText(TOOLTIP_CONTENT)); + }); + + it("should display the popover when hovered", async () => { + render( + + ); + + userEvent.hover(screen.getByText(TEXT_CONTENT)); + + await waitFor(() => screen.getByText(TOOLTIP_CONTENT)); + + userEvent.unhover(screen.getByText("Text")); + + await waitForElementToBeRemoved(() => + screen.queryByText(TOOLTIP_CONTENT) + ); + }); + }); +}); From b028b0653a39a0cca7c833d85560855706215f82 Mon Sep 17 00:00:00 2001 From: qroll Date: Fri, 20 Sep 2024 00:16:02 +0800 Subject: [PATCH 0471/1949] [MOL-16654][RL] Enhance popover interaction --- src/popover-v2/popover-trigger.tsx | 135 ++++++++++++++--------------- stories/popover-v2/popover.mdx | 12 ++- 2 files changed, 75 insertions(+), 72 deletions(-) diff --git a/src/popover-v2/popover-trigger.tsx b/src/popover-v2/popover-trigger.tsx index 777c89a5a..a20671ac4 100644 --- a/src/popover-v2/popover-trigger.tsx +++ b/src/popover-v2/popover-trigger.tsx @@ -1,24 +1,29 @@ import { + FloatingFocusManager, FloatingPortal, autoUpdate, flip, limitShift, offset, shift, + useClick, + useDismiss, useFloating, + useHover, + useInteractions, } from "@floating-ui/react"; -import { useEffect, useRef, useState } from "react"; +import { useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; import { MediaWidths } from "../media"; import { useFloatingChild } from "../overlay/use-floating-context"; import { PopoverV2 } from "./popover"; import { TriggerContainer } from "./popover-trigger.styles"; -import { PopoverV2TriggerProps } from "./types"; +import { PopoverV2TriggerProps, PopoverV2TriggerType } from "./types"; export const PopoverTrigger = ({ children, popoverContent, - trigger = "click", + trigger: _trigger = "click", position = "top", zIndex, rootNode, @@ -35,7 +40,7 @@ export const PopoverTrigger = ({ const isMobile = useMediaQuery({ maxWidth: MediaWidths.mobileL, }); - const { refs, floatingStyles } = useFloating({ + const { refs, floatingStyles, context } = useFloating({ open: visible, placement: position, whileElementsMounted: autoUpdate, @@ -46,63 +51,46 @@ export const PopoverTrigger = ({ limiter: limitShift(), }), ], + onOpenChange: (isOpen) => { + setVisible(isOpen); + + // this callback is triggering twice on hover, the check here prevents extra calls + if (visible !== isOpen) { + handleVisibilityChange(isOpen); + } + }, }); const parentZIndex = useFloatingChild(); - // ========================================================================= - // EFFECTS - // ========================================================================= - useEffect(() => { - // NOTE: Do not add mouse down event if it's mobile - if (isMobile || !visible) { - return; - } - document.addEventListener("mousedown", handleMouseDownEvent); + const trigger: PopoverV2TriggerType = isMobile ? "click" : _trigger; + const click = useClick(context, { + // allow trigger by Space/Enter, but disable mouse click in hover mode + ignoreMouse: trigger === "hover", + }); + const dismiss = useDismiss(context); + const hover = useHover(context, { + enabled: trigger === "hover", + // short window to enter the floating element without it closing + delay: { close: 500 }, + }); - return () => { - document.removeEventListener("mousedown", handleMouseDownEvent); - }; - }, [visible]); + const { getReferenceProps, getFloatingProps } = useInteractions([ + click, + dismiss, + hover, + ]); // ========================================================================= // EVENT HANDLERS // ========================================================================= - const handleMouseDownEvent = (event: MouseEvent) => { - if ( - !nodeRef.current?.contains(event.target as Node) && - !popoverRef.current?.contains(event.target as Node) - ) { - // outside click - setVisible(false); - - if (onPopoverDismiss) onPopoverDismiss(); - } - }; - - const handleClick = (event: React.MouseEvent) => { - event.preventDefault(); - if (trigger === "click" || isMobile) { - setVisible(!visible); - - if (!visible && onPopoverAppear) onPopoverAppear(); - if (visible && onPopoverDismiss) onPopoverDismiss(); - } - }; - - const handleOnMouseEnter = () => { - if (trigger === "hover" && !isMobile) { - setVisible(true); - } - }; - - const handleOnMouseLeave = () => { - if (trigger === "hover" && visible && !isMobile) { - setVisible(false); - } - }; - const handlePopoverMobileClose = () => { setVisible(false); + handleVisibilityChange(false); + }; + + const handleVisibilityChange = (nextVisible: boolean) => { + if (nextVisible && onPopoverAppear) onPopoverAppear(); + if (!nextVisible && onPopoverDismiss) onPopoverDismiss(); }; // ========================================================================= @@ -122,34 +110,41 @@ export const PopoverTrigger = ({ return ( <> - {visible && ( - -
    { - popoverRef.current = node; - refs.setFloating(node); - }} - style={{ - ...floatingStyles, - zIndex: zIndex ?? parentZIndex, - }} - > - {renderPopover()} -
    -
    - )} { nodeRef.current = node; refs.setReference(node); }} - onClick={handleClick} - onMouseEnter={handleOnMouseEnter} - onMouseLeave={handleOnMouseLeave} + {...getReferenceProps({ + onClick: (event) => { + // prevent popover interaction from triggering click events on parents + event.stopPropagation(); + event.preventDefault(); + }, + })} {...otherProps} > {children} + {visible && ( + + +
    { + popoverRef.current = node; + refs.setFloating(node); + }} + style={{ + ...floatingStyles, + zIndex: zIndex ?? parentZIndex, + }} + {...getFloatingProps()} + > + {renderPopover()} +
    +
    +
    + )} ); }; diff --git a/stories/popover-v2/popover.mdx b/stories/popover-v2/popover.mdx index a3145f4b9..51b9a7127 100644 --- a/stories/popover-v2/popover.mdx +++ b/stories/popover-v2/popover.mdx @@ -25,12 +25,20 @@ import { PopoverTrigger } from "@lifesg/react-design-system/popover-v2"; -Appearance information +Behaviour + +**Appearance** - The `Popover` component automatically positions itself based on the amount of space available. It will always attempt to display itself at the preferred position by default - The `Popover` appears as a modal in mobile viewports -The example below illustrates the default behaviour. +**Keyboard support** + +The trigger should be included in the page's tab sequence. This way, users who +navigate via keyboard can open the popover with `Space`/`Enter`. On open, focus +will move to the popover. Press `Escape` to dismiss the popover. + +The example below illustrates the positioning behaviour when viewed on desktop. From dc7f49ec123ad055c229ee86a50cf1e3ea39dfe5 Mon Sep 17 00:00:00 2001 From: qroll Date: Tue, 24 Sep 2024 20:07:44 +0800 Subject: [PATCH 0472/1949] [BOOKINGSG-6120][RL] Update docs --- src/time-range-picker/types.ts | 4 +-- .../form-time-range-picker.mdx | 8 ++++- .../form-time-range-picker.stories.tsx | 10 ++++++ .../form-time-range-picker/props-table.tsx | 36 ++++++++++++++----- 4 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/time-range-picker/types.ts b/src/time-range-picker/types.ts index 37b003837..0e7fd9b88 100644 --- a/src/time-range-picker/types.ts +++ b/src/time-range-picker/types.ts @@ -34,12 +34,12 @@ export interface TimeRangePickerProps { disabled?: boolean | undefined; readOnly?: boolean | undefined; error?: boolean | undefined; + /** Specifies the variant for the time range picker */ + variant?: TimeRangePickerVariant | undefined; /** * Combobox variant specific attributes */ - /** Specifies the variant for the time range picker */ - variant?: TimeRangePickerVariant | undefined; /** Specifies the interval (minutes) between each dropdown option */ interval?: number | undefined; /** Specifies the starting time for the dropdown options */ diff --git a/stories/form/form-time-range-picker/form-time-range-picker.mdx b/stories/form/form-time-range-picker/form-time-range-picker.mdx index d47b62343..5b1ed465c 100644 --- a/stories/form/form-time-range-picker/form-time-range-picker.mdx +++ b/stories/form/form-time-range-picker/form-time-range-picker.mdx @@ -40,7 +40,13 @@ import { TimeRangePicker } from "@lifesg/react-design-system/TimeRangePicker"; Combobox variant -You can also use an `combobox` variant that allows users to either select a time from a dropdown list of options, or manually type in a time which is automatically parsed and converted into a valid time format (h:mma for `12hr`, hh:mm for `24hr`). +You can also use a `combobox` variant that allows users to either select a time +from a dropdown list of options, or manually type in a time which is +automatically parsed and converted into a valid time format (h:mma for `12hr`, +hh:mm for `24hr`). + +This variant comes in built-in validation for unrecognised time format or +invalid time range (start is greater than end). diff --git a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx index 4a77678f5..08c62e46d 100644 --- a/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx +++ b/stories/form/form-time-range-picker/form-time-range-picker.stories.tsx @@ -162,6 +162,16 @@ export const ComboboxVariant: StoryObj = { onChange={(value) => setTime5(value)} variant="combobox" /> + +
    ); diff --git a/stories/form/form-time-range-picker/props-table.tsx b/stories/form/form-time-range-picker/props-table.tsx index de95e60ce..da4760540 100644 --- a/stories/form/form-time-range-picker/props-table.tsx +++ b/stories/form/form-time-range-picker/props-table.tsx @@ -4,11 +4,27 @@ import { SHARED_FORM_PROPS_DATA } from "../shared-props-data"; const TIME_FORMAT = ( <> - 24 hour uses {quote("hh:mm")} e.g. {code(quote("13:00"))} + Dial variant:
    - 12 hour uses {quote("hh:mmA")} e.g. {code(quote("01:00PM"))} +
      +
    • + 24 hour uses {quote("hh:mm")} e.g. {code(quote("13:00"))} +
    • +
    • + 12 hour uses {quote("hh:mmA")} e.g. {code(quote("01:00PM"))} +
    • +

    - Note: combobox variant uses {quote("h:mma")} instead + Combobox variant: +
    +
      +
    • + 24 hour uses {quote("hh:mm")} e.g. {code(quote("13:00"))} +
    • +
    • + 12 hours uses {quote("h:mma")} e.g. {code(quote("1:00pm"))} +
    • +
    ); @@ -69,6 +85,12 @@ const DATA: ApiTableSectionProps[] = [ description: "The test identifier of the component", propTypes: ["string"], }, + { + name: "variant", + description: "Specifies the variant for the component", + propTypes: [`"dial"`, `"combobox"`], + defaultValue: `"dial"`, + }, { name: "onChange", description: @@ -90,12 +112,6 @@ const DATA: ApiTableSectionProps[] = [ { name: "Combobox variant specific props", attributes: [ - { - name: "variant", - description: "Specifies the variant for the component", - propTypes: [`"dial"`, `"combobox"`], - defaultValue: `"dial"`, - }, { name: "interval", description: @@ -139,6 +155,7 @@ const DATA: ApiTableSectionProps[] = [ The selected start time value as an empty string or a string-based format.
    +
    {TIME_FORMAT} ), @@ -151,6 +168,7 @@ const DATA: ApiTableSectionProps[] = [ The selected start time value as an empty string or a string-based format.
    +
    {TIME_FORMAT} ), From 25de66e636e532dcb6ad07d9447e7097f8b57e69 Mon Sep 17 00:00:00 2001 From: Wei Li Date: Wed, 25 Sep 2024 12:27:06 +0800 Subject: [PATCH 0473/1949] [MISC][WL] ensure dropdown width stays at 100% throughout animation - component / dropdown is shrinking on mount / collapse due to animation changes in chrome 129 (https://developer.chrome.com/blog/new-in-chrome-129#animate) --- src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx index 000bbece8..fd71c861b 100644 --- a/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx +++ b/src/shared/dropdown-wrapper/dropdown-wrapper.styles.tsx @@ -91,6 +91,7 @@ const zindexPositionHide = keyframes` to { position: relative; + width: 100%; } `; From 8d483179968149a34b153c9791e855bbf15a08fb Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 25 Sep 2024 13:46:59 +0800 Subject: [PATCH 0474/1949] [CCUBE-1524][MAHI]Update semantic tokens with latest changes and update storybook as well --- .../specs/bookingsg-semantic-tokens.ts | 93 -------------- .../specs/lifesg-semantic-tokens.ts | 68 ++++++----- src/theme/colour-semantic/theme-helper.ts | 78 ++++++------ src/theme/colour-semantic/types.ts | 66 ++++++---- .../doc-semantic-colour-display.tsx | 113 ++++++++---------- 5 files changed, 174 insertions(+), 244 deletions(-) delete mode 100644 src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts diff --git a/src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts b/src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts deleted file mode 100644 index 958e7ff70..000000000 --- a/src/theme/colour-semantic/specs/bookingsg-semantic-tokens.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { getPrimitiveColour } from "../../colour-primitive/theme-helper"; -import { SemanticColourSet } from "../../types"; - -export const BookingSGColourSet: SemanticColourSet = { - text: getPrimitiveColour("neutral-20"), - "text-hover": getPrimitiveColour("primary-40"), - "text-selected": getPrimitiveColour("primary-50"), - "text-disabled": getPrimitiveColour("neutral-50"), - "text-success": getPrimitiveColour("success-40"), - "text-inverse": getPrimitiveColour("white"), - "text-subtle": getPrimitiveColour("neutral-30"), - "text-subtler": getPrimitiveColour("neutral-50"), - "text-subtlest": getPrimitiveColour("neutral-60"), - "text-disabled-subtle": getPrimitiveColour("neutral-60"), - "text-disabled-subtlest": getPrimitiveColour("neutral-80"), - "text-selected-disabled": getPrimitiveColour("primary-60"), - "text-warning": getPrimitiveColour("warning-40"), - "text-error": getPrimitiveColour("error-40"), - "text-info": getPrimitiveColour("info-40"), - - icon: getPrimitiveColour("neutral-50"), - "icon-hover": getPrimitiveColour("primary-40"), - "icon-selected": getPrimitiveColour("primary-50"), - "icon-disabled": getPrimitiveColour("neutral-50"), - "icon-success": getPrimitiveColour("success-50"), - "icon-inverse": getPrimitiveColour("white"), - "icon-subtle": getPrimitiveColour("neutral-60"), - "icon-strongest": getPrimitiveColour("neutral-20"), - "icon-primary": getPrimitiveColour("primary-50"), - "icon-primary-subtle": getPrimitiveColour("primary-60"), - "icon-primary-subtlest": getPrimitiveColour("primary-70"), - "icon-disabled-subtle": getPrimitiveColour("neutral-60"), - "icon-selected-disabled": getPrimitiveColour("primary-60"), - "icon-warning": getPrimitiveColour("warning-60"), - "icon-error": getPrimitiveColour("error-50"), - "icon-error-strong": getPrimitiveColour("error-40"), - "icon-info": getPrimitiveColour("info-50"), - - border: getPrimitiveColour("neutral-90"), - "border-hover": getPrimitiveColour("primary-90"), - "border-selected": getPrimitiveColour("primary-50"), - "border-disabled": getPrimitiveColour("neutral-90"), - "border-success": getPrimitiveColour("success-60"), - "border-inverse": getPrimitiveColour("neutral-90"), - "border-strong": getPrimitiveColour("neutral-70"), - "border-primary": getPrimitiveColour("primary-50"), - "border-primary-subtle": getPrimitiveColour("primary-60"), - "border-hover-strong": getPrimitiveColour("primary-60"), - "border-selected-subtle": getPrimitiveColour("primary-70"), - "border-selected-subtlest": getPrimitiveColour("primary-90"), - "border-focus": getPrimitiveColour("primary-60"), - "border-focus-strong": getPrimitiveColour("primary-50"), - "border-selected-disabled": getPrimitiveColour("neutral-70"), - "border-warning": getPrimitiveColour("warning-60"), - "border-error": getPrimitiveColour("error-60"), - "border-error-focus": getPrimitiveColour("error-60"), - "border-info": getPrimitiveColour("info-60"), - - background: getPrimitiveColour("white"), - "background-hover": getPrimitiveColour("primary-95"), - "background-selected": getPrimitiveColour("primary-95"), - "background-disabled": getPrimitiveColour("neutral-95"), - "background-success": getPrimitiveColour("success-100"), - "background-inverse": getPrimitiveColour("neutral-40"), - "background-strong": getPrimitiveColour("neutral-100"), - "background-stronger": getPrimitiveColour("neutral-95"), - "background-hover-strong": getPrimitiveColour("primary-90"), - "background-hover-subtle": getPrimitiveColour("primary-95"), - "background-hover-neutral": getPrimitiveColour("neutral-95"), - "background-primary": getPrimitiveColour("primary-50"), - "background-primary-hover": getPrimitiveColour("primary-40"), - "background-primary-subtle": getPrimitiveColour("primary-60"), - "background-primary-subtlest": getPrimitiveColour("primary-100"), - "background-primary-subtlest-hover": getPrimitiveColour("primary-90"), - "background-primary-subtlest-selected": getPrimitiveColour("primary-90"), - "background-selected-strong": getPrimitiveColour("primary-90"), - "background-selected-hover": getPrimitiveColour("primary-90"), - "background-selected-disabled": getPrimitiveColour("primary-90"), - "background-warning": getPrimitiveColour("warning-100"), - "background-error": getPrimitiveColour("error-100"), - "background-info": getPrimitiveColour("info-100"), - "background-error-strong": getPrimitiveColour("error-50"), - "background-error-strong-hover": getPrimitiveColour("error-30"), - - "overlay-strong": "rgba(40, 40, 40, 0.95)", - "overlay-subtle": "rgba(40, 40, 40, 0.20)", - "overlay-inverse-gradient": "rgba(255, 255, 255, 1)", - - hyperlink: getPrimitiveColour("primary-50"), - "hyperlink-inverse": "#FFCB6A", - "focus-ring": getPrimitiveColour("black"), - "focus-ring-inverse": getPrimitiveColour("white"), -}; diff --git a/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts b/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts index e02ee8e14..9a203eba9 100644 --- a/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts +++ b/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts @@ -5,15 +5,17 @@ export const LifeSGColourSet: SemanticColourSet = { text: getPrimitiveColour("neutral-20"), "text-hover": getPrimitiveColour("primary-40"), "text-selected": getPrimitiveColour("primary-50"), + "text-selected-hover": getPrimitiveColour("primary-40"), // "text-disabled": getPrimitiveColour("neutral-50"), "text-success": getPrimitiveColour("success-40"), "text-inverse": getPrimitiveColour("white"), "text-subtle": getPrimitiveColour("neutral-30"), "text-subtler": getPrimitiveColour("neutral-50"), "text-subtlest": getPrimitiveColour("neutral-60"), + "text-primary": getPrimitiveColour("primary-50"), "text-disabled-subtle": getPrimitiveColour("neutral-60"), "text-disabled-subtlest": getPrimitiveColour("neutral-80"), - "text-selected-disabled": getPrimitiveColour("primary-60"), + "text-selected-disabled": getPrimitiveColour("neutral-50"), "text-warning": getPrimitiveColour("warning-40"), "text-error": getPrimitiveColour("error-40"), "text-info": getPrimitiveColour("info-40"), @@ -26,11 +28,12 @@ export const LifeSGColourSet: SemanticColourSet = { "icon-inverse": getPrimitiveColour("white"), "icon-subtle": getPrimitiveColour("neutral-60"), "icon-strongest": getPrimitiveColour("neutral-20"), + "icon-selected-hover": getPrimitiveColour("primary-40"), // "icon-primary": getPrimitiveColour("primary-50"), "icon-primary-subtle": getPrimitiveColour("primary-60"), "icon-primary-subtlest": getPrimitiveColour("primary-70"), "icon-disabled-subtle": getPrimitiveColour("neutral-60"), - "icon-selected-disabled": getPrimitiveColour("primary-60"), + "icon-selected-disabled": getPrimitiveColour("neutral-60"), "icon-warning": getPrimitiveColour("warning-60"), "icon-error": getPrimitiveColour("error-50"), "icon-error-strong": getPrimitiveColour("error-40"), @@ -39,6 +42,7 @@ export const LifeSGColourSet: SemanticColourSet = { border: getPrimitiveColour("neutral-90"), "border-hover": getPrimitiveColour("primary-90"), "border-selected": getPrimitiveColour("primary-50"), + "border-selected-hover": getPrimitiveColour("primary-90"), // "border-disabled": getPrimitiveColour("neutral-90"), "border-success": getPrimitiveColour("success-60"), "border-inverse": getPrimitiveColour("neutral-90"), @@ -54,33 +58,43 @@ export const LifeSGColourSet: SemanticColourSet = { "border-warning": getPrimitiveColour("warning-60"), "border-error": getPrimitiveColour("error-60"), "border-error-focus": getPrimitiveColour("error-60"), + "border-error-strong": getPrimitiveColour("error-40"), "border-info": getPrimitiveColour("info-60"), - background: getPrimitiveColour("white"), - "background-hover": getPrimitiveColour("primary-95"), - "background-selected": getPrimitiveColour("primary-95"), - "background-disabled": getPrimitiveColour("neutral-95"), - "background-success": getPrimitiveColour("success-100"), - "background-inverse": getPrimitiveColour("neutral-40"), - "background-strong": getPrimitiveColour("neutral-100"), - "background-stronger": getPrimitiveColour("neutral-95"), - "background-hover-strong": getPrimitiveColour("primary-90"), - "background-hover-subtle": getPrimitiveColour("primary-95"), - "background-hover-neutral": getPrimitiveColour("neutral-95"), - "background-primary": getPrimitiveColour("primary-50"), - "background-primary-hover": getPrimitiveColour("primary-40"), - "background-primary-subtle": getPrimitiveColour("primary-60"), - "background-primary-subtlest": getPrimitiveColour("primary-100"), - "background-primary-subtlest-hover": getPrimitiveColour("primary-90"), - "background-primary-subtlest-selected": getPrimitiveColour("primary-90"), - "background-selected-strong": getPrimitiveColour("primary-90"), - "background-selected-hover": getPrimitiveColour("primary-90"), - "background-selected-disabled": getPrimitiveColour("primary-90"), - "background-warning": getPrimitiveColour("warning-100"), - "background-error": getPrimitiveColour("error-100"), - "background-info": getPrimitiveColour("info-100"), - "background-error-strong": getPrimitiveColour("error-50"), - "background-error-strong-hover": getPrimitiveColour("error-30"), + bg: getPrimitiveColour("white"), // + "bg-hover": getPrimitiveColour("primary-95"), + "bg-selected": getPrimitiveColour("primary-95"), + "bg-disabled": getPrimitiveColour("neutral-95"), + "bg-success-strong": getPrimitiveColour("success-50"), // + "bg-success": getPrimitiveColour("success-100"), + "bg-inverse": getPrimitiveColour("neutral-20"), + "bg-inverse-subtle": getPrimitiveColour("neutral-30"), // + "bg-inverse-subtler": getPrimitiveColour("neutral-50"), // + "bg-inverse-subtlest": getPrimitiveColour("neutral-60"), // + "bg-strong": getPrimitiveColour("neutral-100"), // + "bg-stronger": getPrimitiveColour("neutral-95"), + "bg-strongest": getPrimitiveColour("neutral-90"), // + "bg-hover-strong": getPrimitiveColour("primary-90"), + "bg-hover-subtle": getPrimitiveColour("primary-100"), + "bg-hover-neutral": getPrimitiveColour("neutral-95"), + "bg-primary": getPrimitiveColour("primary-50"), + "bg-primary-hover": getPrimitiveColour("primary-40"), + "bg-primary-subtle": getPrimitiveColour("primary-60"), + "bg-primary-subtler": getPrimitiveColour("primary-80"), + "bg-primary-subtlest": getPrimitiveColour("primary-100"), + "bg-primary-subtlest-hover": getPrimitiveColour("primary-90"), + "bg-primary-subtlest-selected": getPrimitiveColour("primary-90"), + "bg-selected-strong": getPrimitiveColour("primary-90"), + "bg-selected-hover": getPrimitiveColour("primary-90"), + "bg-selected-disabled": getPrimitiveColour("neutral-95"), + "bg-selected-strongest": getPrimitiveColour("primary-90"), // + "bg-warning": getPrimitiveColour("warning-100"), + "bg-warning-strong": getPrimitiveColour("warning-50"), // + "bg-error": getPrimitiveColour("error-100"), + "bg-info": getPrimitiveColour("info-100"), + "bg-info-strong": getPrimitiveColour("info-50"), // + "bg-error-strong": getPrimitiveColour("error-50"), + "bg-error-strong-hover": getPrimitiveColour("error-30"), "overlay-strong": "rgba(40, 40, 40, 0.95)", "overlay-subtle": "rgba(40, 40, 40, 0.20)", diff --git a/src/theme/colour-semantic/theme-helper.ts b/src/theme/colour-semantic/theme-helper.ts index df89ed637..168d2d4c9 100644 --- a/src/theme/colour-semantic/theme-helper.ts +++ b/src/theme/colour-semantic/theme-helper.ts @@ -95,43 +95,31 @@ export const ColourSemantic = { "border-error-focus": getSemanticColour("border-error-focus"), "border-info": getSemanticColour("border-info"), - background: getSemanticColour("background"), - "background-hover": getSemanticColour("background-hover"), - "background-selected": getSemanticColour("background-selected"), - "background-disabled": getSemanticColour("background-disabled"), - "background-success": getSemanticColour("background-success"), - "background-inverse": getSemanticColour("background-inverse"), - "background-strong": getSemanticColour("background-strong"), - "background-stronger": getSemanticColour("background-stronger"), - "background-hover-strong": getSemanticColour("background-hover-strong"), - "background-hover-subtle": getSemanticColour("background-hover-subtle"), - "background-hover-neutral": getSemanticColour("background-hover-neutral"), - "background-primary": getSemanticColour("background-primary"), - "background-primary-hover": getSemanticColour("background-primary-hover"), - "background-primary-subtle": getSemanticColour("background-primary-subtle"), - "background-primary-subtlest": getSemanticColour( - "background-primary-subtlest" - ), - "background-primary-subtlest-hover": getSemanticColour( - "background-primary-subtlest-hover" - ), - "background-primary-subtlest-selected": getSemanticColour( - "background-primary-subtlest-selected" - ), - "background-selected-strong": getSemanticColour( - "background-selected-strong" - ), - "background-selected-hover": getSemanticColour("background-selected-hover"), - "background-selected-disabled": getSemanticColour( - "background-selected-disabled" - ), - "background-warning": getSemanticColour("background-warning"), - "background-error": getSemanticColour("background-error"), - "background-info": getSemanticColour("background-info"), - "background-error-strong": getSemanticColour("background-error-strong"), - "background-error-strong-hover": getSemanticColour( - "background-error-strong-hover" + "bg-hover": getSemanticColour("bg-hover"), + "bg-selected": getSemanticColour("bg-selected"), + "bg-disabled": getSemanticColour("bg-disabled"), + "bg-success": getSemanticColour("bg-success"), + "bg-inverse": getSemanticColour("bg-inverse"), + "bg-stronger": getSemanticColour("bg-stronger"), + "bg-hover-strong": getSemanticColour("bg-hover-strong"), + "bg-hover-subtle": getSemanticColour("bg-hover-subtle"), + "bg-hover-neutral": getSemanticColour("bg-hover-neutral"), + "bg-primary": getSemanticColour("bg-primary"), + "bg-primary-hover": getSemanticColour("bg-primary-hover"), + "bg-primary-subtle": getSemanticColour("bg-primary-subtle"), + "bg-primary-subtlest": getSemanticColour("bg-primary-subtlest"), + "bg-primary-subtlest-hover": getSemanticColour("bg-primary-subtlest-hover"), + "bg-primary-subtlest-selected": getSemanticColour( + "bg-primary-subtlest-selected" ), + "bg-selected-strong": getSemanticColour("bg-selected-strong"), + "bg-selected-hover": getSemanticColour("bg-selected-hover"), + "bg-selected-disabled": getSemanticColour("bg-selected-disabled"), + "bg-warning": getSemanticColour("bg-warning"), + "bg-error": getSemanticColour("bg-error"), + "bg-info": getSemanticColour("bg-info"), + "bg-error-strong": getSemanticColour("bg-error-strong"), + "bg-error-strong-hover": getSemanticColour("bg-error-strong-hover"), "overlay-strong": getSemanticColour("overlay-strong"), "overlay-subtle": getSemanticColour("overlay-subtle"), @@ -141,4 +129,22 @@ export const ColourSemantic = { "hyperlink-inverse": getSemanticColour("hyperlink-inverse"), "focus-ring": getSemanticColour("focus-ring"), "focus-ring-inverse": getSemanticColour("focus-ring-inverse"), + + // new changes: + "text-primary": getSemanticColour("text-primary"), + "text-selected-hover": getSemanticColour("text-selected-hover"), + "icon-selected-hover": getSemanticColour("icon-selected-hover"), + "border-selected-hover": getSemanticColour("border-selected-hover"), + bg: getSemanticColour("bg"), + "bg-primary-subtler": getSemanticColour("bg-primary-subtler"), + "bg-success-strong": getSemanticColour("bg-success-strong"), + "bg-inverse-subtle": getSemanticColour("bg-inverse-subtle"), + "bg-inverse-subtler": getSemanticColour("bg-inverse-subtler"), + "bg-inverse-subtlest": getSemanticColour("bg-inverse-subtlest"), + "bg-strong": getSemanticColour("bg-strong"), + "bg-strongest": getSemanticColour("bg-strongest"), + "bg-selected-strongest": getSemanticColour("bg-selected-strongest"), + "bg-warning-strong": getSemanticColour("bg-warning-strong"), + "bg-info-strong": getSemanticColour("bg-info-strong"), + "border-error-strong": getSemanticColour("border-error-strong"), }; diff --git a/src/theme/colour-semantic/types.ts b/src/theme/colour-semantic/types.ts index 31cf7500d..3575bea88 100644 --- a/src/theme/colour-semantic/types.ts +++ b/src/theme/colour-semantic/types.ts @@ -62,31 +62,29 @@ export type SemanticColourSet = { "border-error-focus": SemanticColourValue; "border-info": SemanticColourValue; - background: SemanticColourValue; - "background-hover": SemanticColourValue; - "background-selected": SemanticColourValue; - "background-disabled": SemanticColourValue; - "background-success": SemanticColourValue; - "background-inverse": SemanticColourValue; - "background-strong": SemanticColourValue; - "background-stronger": SemanticColourValue; - "background-hover-strong": SemanticColourValue; - "background-hover-subtle": SemanticColourValue; - "background-hover-neutral": SemanticColourValue; - "background-primary": SemanticColourValue; - "background-primary-hover": SemanticColourValue; - "background-primary-subtle": SemanticColourValue; - "background-primary-subtlest": SemanticColourValue; - "background-primary-subtlest-hover": SemanticColourValue; - "background-primary-subtlest-selected": SemanticColourValue; - "background-selected-strong": SemanticColourValue; - "background-selected-hover": SemanticColourValue; - "background-selected-disabled": SemanticColourValue; - "background-warning": SemanticColourValue; - "background-error": SemanticColourValue; - "background-info": SemanticColourValue; - "background-error-strong": SemanticColourValue; - "background-error-strong-hover": SemanticColourValue; + "bg-hover": SemanticColourValue; + "bg-selected": SemanticColourValue; + "bg-disabled": SemanticColourValue; + "bg-success": SemanticColourValue; + "bg-inverse": SemanticColourValue; + "bg-stronger": SemanticColourValue; + "bg-hover-strong": SemanticColourValue; + "bg-hover-subtle": SemanticColourValue; + "bg-hover-neutral": SemanticColourValue; + "bg-primary": SemanticColourValue; + "bg-primary-hover": SemanticColourValue; + "bg-primary-subtle": SemanticColourValue; + "bg-primary-subtlest": SemanticColourValue; + "bg-primary-subtlest-hover": SemanticColourValue; + "bg-primary-subtlest-selected": SemanticColourValue; + "bg-selected-strong": SemanticColourValue; + "bg-selected-hover": SemanticColourValue; + "bg-selected-disabled": SemanticColourValue; + "bg-warning": SemanticColourValue; + "bg-error": SemanticColourValue; + "bg-info": SemanticColourValue; + "bg-error-strong": SemanticColourValue; + "bg-error-strong-hover": SemanticColourValue; "overlay-strong": SemanticColourValue; "overlay-subtle": SemanticColourValue; @@ -96,4 +94,22 @@ export type SemanticColourSet = { "hyperlink-inverse": SemanticColourValue; "focus-ring": SemanticColourValue; "focus-ring-inverse": SemanticColourValue; + + // new + "text-primary": SemanticColourValue; + "text-selected-hover": SemanticColourValue; + "icon-selected-hover": SemanticColourValue; + "border-selected-hover": SemanticColourValue; + bg: SemanticColourValue; + "bg-primary-subtler": SemanticColourValue; + "bg-success-strong": SemanticColourValue; + "bg-inverse-subtle": SemanticColourValue; + "bg-inverse-subtler": SemanticColourValue; + "bg-inverse-subtlest": SemanticColourValue; + "bg-strong": SemanticColourValue; + "bg-strongest": SemanticColourValue; + "bg-selected-strongest": SemanticColourValue; + "bg-warning-strong": SemanticColourValue; + "bg-info-strong": SemanticColourValue; + "border-error-strong": SemanticColourValue; }; diff --git a/stories/theme/doc-elements/doc-semantic-colour-display.tsx b/stories/theme/doc-elements/doc-semantic-colour-display.tsx index a67785f40..4ab7ada41 100644 --- a/stories/theme/doc-elements/doc-semantic-colour-display.tsx +++ b/stories/theme/doc-elements/doc-semantic-colour-display.tsx @@ -1,4 +1,3 @@ -import { ColourSpec } from "src/theme/colour-primitive/theme-helper"; import { getSemanticColour } from "src/theme/colour-semantic/theme-helper"; import { SemanticColourSet, ThemeSpec } from "src/theme/types"; import styled, { ThemeProvider, useTheme } from "styled-components"; @@ -10,44 +9,21 @@ interface SemanticColourPalette { const SemanticColourPalette = ({ tokens }: SemanticColourPalette) => { const theme = useTheme(); - // apply proxy to spy on the primitive token being accessed - let colourToken: string; - const proxy = { - get(target, prop) { - colourToken = prop; - return target[prop]; - }, - }; - const scheme = theme.colourScheme; - const original = ColourSpec.collections[scheme]; - ColourSpec.collections[scheme] = new Proxy(original, proxy); - - const component = ( + return ( {tokens.map((token) => { - colourToken = undefined; const colour = getSemanticColour(token)({ theme }); - const reference = colourToken || colour; - colourToken = undefined; return ( -
    - {token} - {reference} -
    + {token}
    ); })}
    ); - - // clean up proxy - ColourSpec.collections[scheme] = original; - - return component; }; interface SemanticColourDisplayProps { @@ -67,6 +43,7 @@ export const SemanticColourDisplay = ({ "text-subtle", "text-subtler", "text-subtlest", + "text-primary", ]} /> + @@ -101,13 +79,14 @@ export const SemanticColourDisplay = ({ ]} /> @@ -130,47 +110,62 @@ export const SemanticColourDisplay = ({ Background + + @@ -220,7 +215,7 @@ const Display = styled.div` margin-bottom: 2.5rem; &:last-child { - margin-bottom: 3rem; + margin-bottom: 1rem; } `; @@ -229,7 +224,7 @@ const Palette = styled.div``; const PaletteLabel = styled.div` font-size: 1.25rem; font-weight: bolder; - margin-bottom: 1.5rem; + margin-bottom: 1rem; `; const Swatch = styled.ul` @@ -237,13 +232,13 @@ const Swatch = styled.ul` flex-direction: column; margin: 0; padding: 0; - gap: 0.25rem; + gap: 0.5rem; `; const SwatchItem = styled.li` display: flex; justify-items: flex-start; - align-items: flex-start; + align-items: center; gap: 0.5rem; `; @@ -264,17 +259,9 @@ const SwatchColour = styled.div` background: ${(props) => props.$colour}; `; -const SwatchLabel = styled.div` +const SwatchLabel = styled.span` font-family: monospace; font-size: 1rem; border-radius: 4px; padding: 0 0.5rem; `; - -const SwatchReference = styled.div` - font-family: monospace; - font-size: 0.875rem; - border-radius: 4px; - padding: 0 0.5rem; - color: #787878; -`; From e7931cd25dfb69301a5c0103594da036093dbe49 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Wed, 25 Sep 2024 14:05:25 +0800 Subject: [PATCH 0475/1949] [BOOKINGSG-6120][JH] increase jest timeout --- tests/time-range-picker/time-range-picker.spec.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/time-range-picker/time-range-picker.spec.tsx b/tests/time-range-picker/time-range-picker.spec.tsx index 80dcd8261..925df5315 100644 --- a/tests/time-range-picker/time-range-picker.spec.tsx +++ b/tests/time-range-picker/time-range-picker.spec.tsx @@ -18,6 +18,7 @@ describe("TimeRangePicker", () => { unobserve: jest.fn(), disconnect: jest.fn(), })); + jest.setTimeout(10000); }); describe("Combobox variant", () => { From 308fab4f6f02d994345aa71d8f8e26065620d60e Mon Sep 17 00:00:00 2001 From: qroll Date: Wed, 25 Sep 2024 14:39:21 +0800 Subject: [PATCH 0476/1949] MOL-16654][RL] Fix incorrect prop documentation --- stories/popover-v2/popover-inline/props-table.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stories/popover-v2/popover-inline/props-table.tsx b/stories/popover-v2/popover-inline/props-table.tsx index 48173fb65..cb08de9d9 100644 --- a/stories/popover-v2/popover-inline/props-table.tsx +++ b/stories/popover-v2/popover-inline/props-table.tsx @@ -33,13 +33,13 @@ const DATA: ApiTableSectionProps[] = [ { name: "underlineStyle", description: "The underline style of the text", - propTypes: ["React.ReactNode"], + propTypes: [`"default"`, `"underline"`, `"underline-dashed"`], defaultValue: `"default"`, }, { name: "underlineHoverStyle", description: "The underline style of the text when hovered", - propTypes: ["React.ReactNode"], + propTypes: [`"default"`, `"underline"`, `"underline-dashed"`], defaultValue: `"default"`, }, ...COMMON_POPOVER_ATTRIBUTES, From d2c62d9cfa2f9c4e2c39648629f23f698c4801b7 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Wed, 25 Sep 2024 14:56:54 +0800 Subject: [PATCH 0477/1949] [CCUBE-1545][MAHI]Combine test cases and using typography token directly and adjust typings --- src/typography/helper.ts | 27 ++-- src/typography/types.ts | 35 ++---- src/typography/typography-style.ts | 75 ----------- src/typography/typography.tsx | 103 +++++++-------- .../Typography-Body.stories.tsx | 10 +- .../Typography-Header.stories.tsx | 10 +- .../Typography-Link.stories.tsx | 14 +-- stories/typography-test/mock-theme.ts | 26 ---- .../typography-component-body.spec.tsx | 78 ------------ .../typography-component-link.spec.tsx | 92 -------------- .../typography/typography-component.spec.tsx | 47 ------- tests/typography/typography.spec.tsx | 117 ++++++++++++++++++ 12 files changed, 207 insertions(+), 427 deletions(-) delete mode 100644 src/typography/typography-style.ts delete mode 100644 stories/typography-test/mock-theme.ts delete mode 100644 tests/typography/typography-component-body.spec.tsx delete mode 100644 tests/typography/typography-component-link.spec.tsx delete mode 100644 tests/typography/typography-component.spec.tsx create mode 100644 tests/typography/typography.spec.tsx diff --git a/src/typography/helper.ts b/src/typography/helper.ts index 0a8f6fe56..f59eb0edb 100644 --- a/src/typography/helper.ts +++ b/src/typography/helper.ts @@ -1,7 +1,6 @@ import { css } from "styled-components"; import { TypographyProps, TypographySizeType, TypographyWeight } from "./types"; -import { TypographyStyle } from "./typography-style"; -import { Colour, Font } from "../theme"; +import { Colour, Font, Typography } from "../theme"; import { StyledComponentProps } from "../theme/helpers"; const getResolvedTypographyWeight = ( @@ -35,15 +34,22 @@ export const getTypographyStyle = ( paragraph = false ) => { return (props: any) => { - const attrs = TypographyStyle[type]; - const resolvedWeight = getResolvedTypographyWeight(weight, props); + // to make it eg: header-xxl-light + const typographyKey = `${type}-${resolvedWeight.toLowerCase()}`; + + // to get the font size from Font token eg header-size-lg + const retrieveSize = (type: string) => { + const [firstPart, secondPart] = type.split("-"); + return `${firstPart}-size-${secondPart}`; + }; + + const fontValue = Font[retrieveSize(type)]; + // Check if function if so resolve with props const fontSize = - typeof attrs.fontSize === "function" - ? attrs.fontSize(props) - : attrs.fontSize; + typeof fontValue === "function" ? fontValue(props) : fontValue; // Make it a int for calc const fontSizeValue = parseFloat(fontSize); @@ -58,10 +64,7 @@ export const getTypographyStyle = ( }; return css` - font-size: ${fontSize}; - line-height: ${attrs.lineHeight}; - letter-spacing: ${attrs.letterSpacing || 0}; - font-weight: ${resolvedWeight}; + ${Typography[typographyKey]} ${getMarginBottomStyle()} `; }; @@ -93,6 +96,6 @@ export const createTypographyStyles = ( props.weight || "regular", props.paragraph )(props)} - color: ${Colour.Primitive["neutral-20"]}; + color: ${Colour.text}; ${getDisplayStyle(props.inline, props.paragraph)} `; diff --git a/src/typography/types.ts b/src/typography/types.ts index 9046f5b90..22282a3d7 100644 --- a/src/typography/types.ts +++ b/src/typography/types.ts @@ -1,18 +1,14 @@ export type TypographySizeType = - | "HeaderXXL" - | "HeaderXL" - | "HeaderLG" - | "HeaderMD" - | "HeaderSM" - | "HeaderXS" - | "BodyBL" - | "BodyLG" - | "BodyMD" - | "BodySM" - | "LinkBL" - | "LinkMD" - | "LinkLG" - | "LinkSM"; + | "header-xxl" + | "header-xl" + | "header-lg" + | "header-md" + | "header-sm" + | "header-xs" + | "body-baseline" + | "body-lg" + | "body-md" + | "body-sm"; export interface TypographyStyleSpec { fontSize?: number | undefined; @@ -31,21 +27,16 @@ export type TypographyWeight = | 700 | 300; -export type TextStyleSetType = { - [key in TypographySizeType]: TypographyStyleSpec; -}; - export interface TypographyProps extends React.HTMLAttributes { // Can be any weight such as regular or 400 - weight?: TypographyWeight; + weight?: TypographyWeight | undefined; // For consumer to choose if they want the text to be inline for example - inline?: boolean; + inline?: boolean | undefined; // For consumer to choose for block level style - paragraph?: boolean; + paragraph?: boolean | undefined; } export interface LinkProps extends TypographyProps { // If the link is external external?: boolean; - textStyle?: TypographySizeType; } diff --git a/src/typography/typography-style.ts b/src/typography/typography-style.ts deleted file mode 100644 index 14959b256..000000000 --- a/src/typography/typography-style.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Font } from "../theme"; - -export const TypographyStyle = { - HeaderXXL: { - fontSize: Font["header-size-xxl"], - lineHeight: Font["header-lh-xxl"], - letterSpacing: Font["header-ls-xxl"], - }, - HeaderXL: { - fontSize: Font["header-size-xl"], - lineHeight: Font["header-lh-xl"], - letterSpacing: Font["header-ls-xl"], - }, - HeaderLG: { - fontSize: Font["header-size-lg"], - lineHeight: Font["header-lh-lg"], - letterSpacing: Font["header-ls-lg"], - }, - HeaderMD: { - fontSize: Font["header-size-md"], - lineHeight: Font["header-lh-md"], - letterSpacing: Font["header-ls-md"], - }, - HeaderSM: { - fontSize: Font["header-size-sm"], - lineHeight: Font["header-lh-sm"], - letterSpacing: Font["header-ls-sm"], - }, - HeaderXS: { - fontSize: Font["header-size-xs"], - lineHeight: Font["header-lh-xs"], - letterSpacing: Font["header-ls-xs"], - }, - - BodyBL: { - fontSize: Font["body-size-baseline"], - lineHeight: Font["body-lh-baseline"], - letterSpacing: Font["body-ls-baseline"], - }, - BodyLG: { - fontSize: Font["body-size-lg"], - lineHeight: Font["body-lh-lg"], - letterSpacing: Font["body-ls-lg"], - }, - BodyMD: { - fontSize: Font["body-size-md"], - lineHeight: Font["body-lh-md"], - letterSpacing: Font["body-ls-md"], - }, - BodySM: { - fontSize: Font["body-size-sm"], - lineHeight: Font["body-lh-sm"], - letterSpacing: Font["body-ls-sm"], - }, - LinkBL: { - fontSize: Font["body-size-baseline"], - lineHeight: Font["body-lh-baseline"], - letterSpacing: Font["body-ls-baseline"], - }, - LinkLG: { - fontSize: Font["body-size-lg"], - lineHeight: Font["body-lh-lg"], - letterSpacing: Font["body-ls-lg"], - }, - LinkMD: { - fontSize: Font["body-size-md"], - lineHeight: Font["body-lh-md"], - letterSpacing: Font["body-ls-md"], - }, - LinkSM: { - fontSize: Font["body-size-sm"], - lineHeight: Font["body-lh-sm"], - letterSpacing: Font["body-ls-sm"], - }, -}; diff --git a/src/typography/typography.tsx b/src/typography/typography.tsx index be7982f8b..20993733c 100644 --- a/src/typography/typography.tsx +++ b/src/typography/typography.tsx @@ -21,12 +21,12 @@ export namespace Typography { return Header; }; - export const HeaderXXL = createHeader("h1", "HeaderXXL"); - export const HeaderXL = createHeader("h2", "HeaderXL"); - export const HeaderLG = createHeader("h3", "HeaderLG"); - export const HeaderMD = createHeader("h4", "HeaderMD"); - export const HeaderSM = createHeader("h5", "HeaderSM"); - export const HeaderXS = createHeader("h6", "HeaderXS"); + export const HeaderXXL = createHeader("h1", "header-xxl"); + export const HeaderXL = createHeader("h2", "header-xl"); + export const HeaderLG = createHeader("h3", "header-lg"); + export const HeaderMD = createHeader("h4", "header-md"); + export const HeaderSM = createHeader("h5", "header-sm"); + export const HeaderXS = createHeader("h6", "header-xs"); const createBody = (textStyle: TypographySizeType) => { const Body = styled.p` @@ -37,23 +37,55 @@ export namespace Typography { return Body; }; - export const BodyBL = createBody("BodyBL"); - export const BodyLG = createBody("BodyLG"); - export const BodyMD = createBody("BodyMD"); - export const BodySM = createBody("BodySM"); + export const BodyBL = createBody("body-baseline"); + export const BodyLG = createBody("body-lg"); + export const BodyMD = createBody("body-md"); + export const BodySM = createBody("body-sm"); const createLinkComponent = (textStyle: TypographySizeType) => { - const Component = (props: LinkProps) => ( - + const HyperlinkBase = styled.a` + ${(props) => css` + ${getTypographyStyle( + textStyle, + props.weight || "regular" + )(props)} + color: ${Colour.hyperlink}; + text-decoration: none; + + :hover, + :active, + :focus { + color: ${Colour["text-hover"]}; + + svg { + color: ${Colour["text-hover"]}; + } + } + + ${getDisplayStyle(props.inline, props.paragraph)} + `} + `; + + // Define the component that uses HyperlinkBase + const Component = ({ + external = false, + children, + ...rest + }: LinkProps) => ( + + {children} + {external && } + ); + Component.displayName = `Link-${textStyle}`; return Component; }; - export const LinkBL = createLinkComponent("LinkBL"); - export const LinkMD = createLinkComponent("LinkMD"); - export const LinkLG = createLinkComponent("LinkLG"); - export const LinkSM = createLinkComponent("LinkSM"); + export const LinkBL = createLinkComponent("body-baseline"); + export const LinkMD = createLinkComponent("body-md"); + export const LinkLG = createLinkComponent("body-lg"); + export const LinkSM = createLinkComponent("body-sm"); } console.log("Hello"); @@ -65,42 +97,3 @@ export const StyledExternalIcon = styled(ExternalIcon)` margin-left: 0.4em; vertical-align: middle; `; - -const HyperlinkBase = styled.a` - ${(props) => { - return css` - ${getTypographyStyle( - props.textStyle, - props.weight || "regular" - )(props)} - color: ${Colour.hyperlink}; - text-decoration: none; - - :hover, - :active, - :focus { - color: ${Colour["text-hover"]}; - - svg { - color: ${Colour["text-hover"]}; - } - } - - ${getDisplayStyle(props.inline, props.paragraph)} - `; - }} -`; - -const HyperlinkComponent = ({ - external = false, - children, - ...rest -}: LinkProps) => { - return ( - - {children} - {external && } - - ); -}; -HyperlinkComponent.displayName = "HyperlinkComponent"; diff --git a/stories/typography-test/Typography-Body.stories.tsx b/stories/typography-test/Typography-Body.stories.tsx index a67257da1..b6d3a2e0d 100644 --- a/stories/typography-test/Typography-Body.stories.tsx +++ b/stories/typography-test/Typography-Body.stories.tsx @@ -1,6 +1,4 @@ -import { ThemeProvider } from "styled-components"; import { Typography } from "../../src/typography/typography"; -import { mockOverrideTheme, mockTheme } from "./mock-theme"; export default { title: "Typography-Test/Body", @@ -8,7 +6,7 @@ export default { }; export const Body_Inline = () => ( - + <> Testing for BodyBL and Bold with inline @@ -20,11 +18,11 @@ export const Body_Inline = () => ( Testing for BodyMD and light with inline - + ); export const Body_Paragraph = () => ( - + <> Testing for BodyBL and Bold with paragraph @@ -34,5 +32,5 @@ export const Body_Paragraph = () => ( Testing for BodyMD and Light with paragraph - + ); diff --git a/stories/typography-test/Typography-Header.stories.tsx b/stories/typography-test/Typography-Header.stories.tsx index 3616c4a84..6772e97fd 100644 --- a/stories/typography-test/Typography-Header.stories.tsx +++ b/stories/typography-test/Typography-Header.stories.tsx @@ -1,6 +1,4 @@ -import { ThemeProvider } from "styled-components"; import { Typography } from "../../src/typography/typography"; -import { mockTheme } from "./mock-theme"; export default { title: "Typography-Test/Header", @@ -9,7 +7,7 @@ export default { // HeaderXXL with bold weight and inline display export const Header_Inline = () => ( - + <> Testing for HeaderXXL and Bold with inline @@ -19,11 +17,11 @@ export const Header_Inline = () => ( Testing for HeaderSM and Bold with inline - + ); export const Header_Paragraph = () => ( - + <> Testing for HeaderXXL and Bold with paragraph @@ -33,5 +31,5 @@ export const Header_Paragraph = () => ( Testing for HeaderSM and Light with paragraph - + ); diff --git a/stories/typography-test/Typography-Link.stories.tsx b/stories/typography-test/Typography-Link.stories.tsx index 2d076a67b..1f067864d 100644 --- a/stories/typography-test/Typography-Link.stories.tsx +++ b/stories/typography-test/Typography-Link.stories.tsx @@ -1,6 +1,4 @@ -import { ThemeProvider } from "styled-components"; import { Typography } from "../../src/typography/typography"; -import { mockTheme } from "./mock-theme"; export default { title: "Typography-Test/Link", @@ -8,23 +6,23 @@ export default { }; export const LinkBL_Regular = () => ( - + <> This is a baseline link - + ); export const LinkLG_Bold_Inline = () => ( - + <> This is a bold link with inline display - + ); export const LinkSM_External = () => ( - + <> External Small Link - + ); diff --git a/stories/typography-test/mock-theme.ts b/stories/typography-test/mock-theme.ts deleted file mode 100644 index f9160551a..000000000 --- a/stories/typography-test/mock-theme.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { ThemeSpec } from "../../src/theme/types"; - -export const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", -}; - -export const mockOverrideTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", - overrides: { - primitiveColour: { - "neutral-20": "#9D00FF", - }, - }, -}; diff --git a/tests/typography/typography-component-body.spec.tsx b/tests/typography/typography-component-body.spec.tsx deleted file mode 100644 index fcaeb9e7d..000000000 --- a/tests/typography/typography-component-body.spec.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { render } from "@testing-library/react"; -import "jest-styled-components"; -import { Typography } from "../../src/typography/typography"; -import { ThemeSpec } from "../../src/theme/types"; -import { ThemeProvider } from "styled-components"; - -describe("Typography Components", () => { - it("renders BodyBL with correct styles", () => { - const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", - }; - - const { container } = render( - - - This is body text - - - ); - - const p = container.firstChild; - expect(p).toHaveStyleRule("font-size", "1.125rem"); - expect(p).toHaveStyleRule("line-height", "1.625rem"); - expect(p).toHaveStyleRule("letter-spacing", "0rem"); - expect(p).toHaveStyleRule("font-weight", "400"); - expect(p).toHaveStyleRule("color", "#282828"); - }); - - it("renders BodyLG with correct styles", () => { - const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", - }; - - const { container } = render( - - - This is large body text - - - ); - - const p = container.firstChild; - expect(p).toHaveStyleRule("font-size", "1rem"); - expect(p).toHaveStyleRule("line-height", "1.5rem"); - expect(p).toHaveStyleRule("letter-spacing", "0.014rem"); - expect(p).toHaveStyleRule("font-weight", "600"); - expect(p).toHaveStyleRule("display", "inline"); - expect(p).toHaveStyleRule("color", "#282828"); - }); - - it("renders BodyMD with paragraph styling", () => { - const { container } = render( - - This is medium body text - - ); - - const p = container.firstChild; - expect(p).toHaveStyleRule("font-size", "0.875rem"); - expect(p).toHaveStyleRule("line-height", "1.6rem"); - expect(p).toHaveStyleRule("letter-spacing", "0.012rem"); - expect(p).toHaveStyleRule("margin-bottom", "0.9187500000000001rem"); - expect(p).toHaveStyleRule("display", "block"); - expect(p).toHaveStyleRule("color", "#282828"); - }); -}); diff --git a/tests/typography/typography-component-link.spec.tsx b/tests/typography/typography-component-link.spec.tsx deleted file mode 100644 index 765909818..000000000 --- a/tests/typography/typography-component-link.spec.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React from "react"; -import { render } from "@testing-library/react"; -import "jest-styled-components"; -import { Typography } from "../../src/typography/typography"; -import { ThemeSpec } from "../../src/theme/types"; -import { ThemeProvider } from "styled-components"; - -describe("Typography Link Components", () => { - it("renders LinkBL with correct styles", () => { - const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", - }; - - const { container } = render( - - - This is a baseline link - - - ); - - const link = container.firstChild; - expect(link).toHaveStyleRule("font-size", "1.125rem"); - expect(link).toHaveStyleRule("line-height", "1.625rem"); - expect(link).toHaveStyleRule("letter-spacing", "0rem"); - expect(link).toHaveStyleRule("font-weight", "400"); - expect(link).toHaveStyleRule("color", "#1768BE"); - }); - - it("renders LinkLG with correct styles", () => { - const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", - }; - - const { container } = render( - - - This is a large link - - - ); - - const link = container.firstChild; - expect(link).toHaveStyleRule("font-size", "1rem"); - expect(link).toHaveStyleRule("line-height", "1.5rem"); - expect(link).toHaveStyleRule("letter-spacing", "0.014rem"); - expect(link).toHaveStyleRule("font-weight", "600"); - expect(link).toHaveStyleRule("display", "inline"); - expect(link).toHaveStyleRule("color", "#1768BE"); - }); - - it("renders external LinkSM with external icon", () => { - const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", - }; - - const { container } = render( - - - External Small Link - - - ); - - const link = container.firstChild; - expect(link).toHaveStyleRule("font-size", "0.75rem"); - expect(link).toHaveStyleRule("line-height", "1.2rem"); - expect(link).toHaveStyleRule("letter-spacing", "0.012rem"); - expect(link).toHaveStyleRule("color", "#1768BE"); - - const icon = container.querySelector("svg"); - expect(icon).not.toBeNull(); - }); -}); diff --git a/tests/typography/typography-component.spec.tsx b/tests/typography/typography-component.spec.tsx deleted file mode 100644 index 7878a6455..000000000 --- a/tests/typography/typography-component.spec.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from "react"; -import { render } from "@testing-library/react"; -import "jest-styled-components"; -import { Typography } from "../../src/typography/typography"; -import { ThemeSpec } from "../../src/theme/types"; -import { ThemeProvider } from "styled-components"; - -describe("Typography Components", () => { - it("renders H1 with correct styles", () => { - const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", - }; - - const { container } = render( - - - Hello World - - - ); - - const h1 = container.firstChild; - expect(h1).toHaveStyleRule("font-size", "3rem"); - expect(h1).toHaveStyleRule("display", "inline"); - expect(h1).toHaveStyleRule("color", "#282828"); - expect(h1).toHaveStyleRule("font-weight", "700"); - }); - - it("renders H2 as block with paragraph styling", () => { - const { container } = render( - Hello World - ); - - const h2 = container.firstChild; - expect(h2).toHaveStyleRule("font-size", "2.5rem"); - expect(h2).toHaveStyleRule("display", "block"); - expect(h2).toHaveStyleRule("margin-bottom", "2.625rem"); - expect(h2).toHaveStyleRule("color", "#282828"); - expect(h2).toHaveStyleRule("font-weight", "400"); - }); -}); diff --git a/tests/typography/typography.spec.tsx b/tests/typography/typography.spec.tsx new file mode 100644 index 000000000..9fe929b00 --- /dev/null +++ b/tests/typography/typography.spec.tsx @@ -0,0 +1,117 @@ +import React from "react"; +import { render } from "@testing-library/react"; +import "jest-styled-components"; +import { Typography } from "../../src/typography/typography"; +import { ThemeSpec } from "../../src/theme/types"; +import { ThemeProvider } from "styled-components"; + +describe("Typography Components", () => { + const mockTheme: ThemeSpec = { + colourScheme: "lifesg", + fontScheme: "lifesg", + animationScheme: "lifesg", + borderScheme: "lifesg", + spacingScheme: "lifesg", + radiusScheme: "lifesg", + breakpointScheme: "lifesg", + }; + + describe("Body Text", () => { + it("renders BodyBL with correct text", () => { + const { getByText } = render( + + + This is body text + + + ); + + expect(getByText("This is body text")).toBeInTheDocument(); + }); + + it("renders BodyLG with correct text", () => { + const { getByText } = render( + + + This is large body text + + + ); + + expect(getByText("This is large body text")).toBeInTheDocument(); + }); + + it("renders BodyMD with correct text", () => { + const { getByText } = render( + + This is medium body text + + ); + + expect(getByText("This is medium body text")).toBeInTheDocument(); + }); + }); + + describe("Link Components", () => { + it("renders LinkBL with correct text", () => { + const { getByText } = render( + + + This is a baseline link + + + ); + + expect(getByText("This is a baseline link")).toBeInTheDocument(); + }); + + it("renders LinkLG with correct text", () => { + const { getByText } = render( + + + This is a large link + + + ); + + expect(getByText("This is a large link")).toBeInTheDocument(); + }); + + it("renders external LinkSM with external icon", () => { + const { getByText, container } = render( + + + External Small Link + + + ); + + expect(getByText("External Small Link")).toBeInTheDocument(); + + const icon = container.querySelector("svg"); + expect(icon).not.toBeNull(); + }); + }); + + describe("Header Components", () => { + it("renders HeaderXXL with correct text", () => { + const { getByText } = render( + + + Hello World + + + ); + + expect(getByText("Hello World")).toBeInTheDocument(); + }); + + it("renders HeaderXL with correct text", () => { + const { getByText } = render( + Hello World + ); + + expect(getByText("Hello World")).toBeInTheDocument(); + }); + }); +}); From 45b29cc3c55bc239ac743dce1b25ad9537f0ddb6 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Thu, 26 Sep 2024 12:15:09 +0800 Subject: [PATCH 0478/1949] [CCUBE-1524][MAHI]Reorder specs to follow figma and remove unnessary comments --- .../specs/lifesg-semantic-tokens.ts | 102 +++++++++------- src/theme/colour-semantic/theme-helper.ts | 110 ++++++++++-------- src/theme/colour-semantic/types.ts | 109 +++++++++-------- .../doc-semantic-colour-display.tsx | 55 +++++++-- 4 files changed, 233 insertions(+), 143 deletions(-) diff --git a/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts b/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts index 9a203eba9..1ee41851c 100644 --- a/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts +++ b/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts @@ -2,104 +2,122 @@ import { getPrimitiveColour } from "../../colour-primitive/theme-helper"; import { SemanticColourSet } from "../../types"; export const LifeSGColourSet: SemanticColourSet = { + // text text: getPrimitiveColour("neutral-20"), - "text-hover": getPrimitiveColour("primary-40"), - "text-selected": getPrimitiveColour("primary-50"), - "text-selected-hover": getPrimitiveColour("primary-40"), // - "text-disabled": getPrimitiveColour("neutral-50"), - "text-success": getPrimitiveColour("success-40"), - "text-inverse": getPrimitiveColour("white"), "text-subtle": getPrimitiveColour("neutral-30"), "text-subtler": getPrimitiveColour("neutral-50"), "text-subtlest": getPrimitiveColour("neutral-60"), "text-primary": getPrimitiveColour("primary-50"), + + "text-hover": getPrimitiveColour("primary-40"), + "text-selected": getPrimitiveColour("primary-50"), + "text-selected-hover": getPrimitiveColour("primary-40"), + + "text-disabled": getPrimitiveColour("neutral-50"), "text-disabled-subtle": getPrimitiveColour("neutral-60"), "text-disabled-subtlest": getPrimitiveColour("neutral-80"), "text-selected-disabled": getPrimitiveColour("neutral-50"), + + "text-success": getPrimitiveColour("success-40"), "text-warning": getPrimitiveColour("warning-40"), "text-error": getPrimitiveColour("error-40"), "text-info": getPrimitiveColour("info-40"), + "text-inverse": getPrimitiveColour("white"), + // icon icon: getPrimitiveColour("neutral-50"), - "icon-hover": getPrimitiveColour("primary-40"), - "icon-selected": getPrimitiveColour("primary-50"), - "icon-disabled": getPrimitiveColour("neutral-50"), - "icon-success": getPrimitiveColour("success-50"), - "icon-inverse": getPrimitiveColour("white"), "icon-subtle": getPrimitiveColour("neutral-60"), "icon-strongest": getPrimitiveColour("neutral-20"), - "icon-selected-hover": getPrimitiveColour("primary-40"), // "icon-primary": getPrimitiveColour("primary-50"), "icon-primary-subtle": getPrimitiveColour("primary-60"), "icon-primary-subtlest": getPrimitiveColour("primary-70"), + + "icon-hover": getPrimitiveColour("primary-40"), + "icon-selected": getPrimitiveColour("primary-50"), + "icon-selected-hover": getPrimitiveColour("primary-40"), + + "icon-disabled": getPrimitiveColour("neutral-50"), "icon-disabled-subtle": getPrimitiveColour("neutral-60"), "icon-selected-disabled": getPrimitiveColour("neutral-60"), + + "icon-success": getPrimitiveColour("success-50"), "icon-warning": getPrimitiveColour("warning-60"), "icon-error": getPrimitiveColour("error-50"), "icon-error-strong": getPrimitiveColour("error-40"), "icon-info": getPrimitiveColour("info-50"), + "icon-inverse": getPrimitiveColour("white"), + // border border: getPrimitiveColour("neutral-90"), - "border-hover": getPrimitiveColour("primary-90"), - "border-selected": getPrimitiveColour("primary-50"), - "border-selected-hover": getPrimitiveColour("primary-90"), // - "border-disabled": getPrimitiveColour("neutral-90"), - "border-success": getPrimitiveColour("success-60"), - "border-inverse": getPrimitiveColour("neutral-90"), "border-strong": getPrimitiveColour("neutral-70"), "border-primary": getPrimitiveColour("primary-50"), "border-primary-subtle": getPrimitiveColour("primary-60"), - "border-hover-strong": getPrimitiveColour("primary-60"), + "border-hover": getPrimitiveColour("primary-90"), + + "border-selected": getPrimitiveColour("primary-50"), "border-selected-subtle": getPrimitiveColour("primary-70"), "border-selected-subtlest": getPrimitiveColour("primary-90"), + "border-selected-hover": getPrimitiveColour("primary-90"), + "border-focus": getPrimitiveColour("primary-60"), "border-focus-strong": getPrimitiveColour("primary-50"), + "border-disabled": getPrimitiveColour("neutral-90"), "border-selected-disabled": getPrimitiveColour("neutral-70"), + + "border-success": getPrimitiveColour("success-60"), "border-warning": getPrimitiveColour("warning-60"), "border-error": getPrimitiveColour("error-60"), "border-error-focus": getPrimitiveColour("error-60"), "border-error-strong": getPrimitiveColour("error-40"), "border-info": getPrimitiveColour("info-60"), - bg: getPrimitiveColour("white"), // - "bg-hover": getPrimitiveColour("primary-95"), - "bg-selected": getPrimitiveColour("primary-95"), - "bg-disabled": getPrimitiveColour("neutral-95"), - "bg-success-strong": getPrimitiveColour("success-50"), // - "bg-success": getPrimitiveColour("success-100"), - "bg-inverse": getPrimitiveColour("neutral-20"), - "bg-inverse-subtle": getPrimitiveColour("neutral-30"), // - "bg-inverse-subtler": getPrimitiveColour("neutral-50"), // - "bg-inverse-subtlest": getPrimitiveColour("neutral-60"), // - "bg-strong": getPrimitiveColour("neutral-100"), // + // background + bg: getPrimitiveColour("white"), + "bg-strong": getPrimitiveColour("neutral-100"), "bg-stronger": getPrimitiveColour("neutral-95"), - "bg-strongest": getPrimitiveColour("neutral-90"), // + "bg-strongest": getPrimitiveColour("neutral-90"), + + "bg-hover": getPrimitiveColour("primary-95"), "bg-hover-strong": getPrimitiveColour("primary-90"), "bg-hover-subtle": getPrimitiveColour("primary-100"), "bg-hover-neutral": getPrimitiveColour("neutral-95"), - "bg-primary": getPrimitiveColour("primary-50"), - "bg-primary-hover": getPrimitiveColour("primary-40"), - "bg-primary-subtle": getPrimitiveColour("primary-60"), - "bg-primary-subtler": getPrimitiveColour("primary-80"), - "bg-primary-subtlest": getPrimitiveColour("primary-100"), - "bg-primary-subtlest-hover": getPrimitiveColour("primary-90"), - "bg-primary-subtlest-selected": getPrimitiveColour("primary-90"), + + "bg-selected": getPrimitiveColour("primary-95"), "bg-selected-strong": getPrimitiveColour("primary-90"), "bg-selected-hover": getPrimitiveColour("primary-90"), "bg-selected-disabled": getPrimitiveColour("neutral-95"), - "bg-selected-strongest": getPrimitiveColour("primary-90"), // + "bg-disabled": getPrimitiveColour("neutral-95"), + "bg-selected-strongest": getPrimitiveColour("primary-90"), + + "bg-success": getPrimitiveColour("success-100"), + "bg-success-strong": getPrimitiveColour("success-50"), "bg-warning": getPrimitiveColour("warning-100"), - "bg-warning-strong": getPrimitiveColour("warning-50"), // - "bg-error": getPrimitiveColour("error-100"), + "bg-warning-strong": getPrimitiveColour("warning-50"), "bg-info": getPrimitiveColour("info-100"), - "bg-info-strong": getPrimitiveColour("info-50"), // + "bg-info-strong": getPrimitiveColour("info-50"), + "bg-error": getPrimitiveColour("error-100"), "bg-error-strong": getPrimitiveColour("error-50"), "bg-error-strong-hover": getPrimitiveColour("error-30"), + "bg-inverse": getPrimitiveColour("neutral-20"), + "bg-inverse-subtle": getPrimitiveColour("neutral-30"), + "bg-inverse-subtler": getPrimitiveColour("neutral-50"), + "bg-inverse-subtlest": getPrimitiveColour("neutral-60"), + + "bg-primary": getPrimitiveColour("primary-50"), + "bg-primary-subtle": getPrimitiveColour("primary-60"), + "bg-primary-subtler": getPrimitiveColour("primary-80"), + "bg-primary-subtlest": getPrimitiveColour("primary-100"), + "bg-primary-hover": getPrimitiveColour("primary-40"), + "bg-primary-subtlest-hover": getPrimitiveColour("primary-90"), + "bg-primary-subtlest-selected": getPrimitiveColour("primary-90"), + + // overlay "overlay-strong": "rgba(40, 40, 40, 0.95)", "overlay-subtle": "rgba(40, 40, 40, 0.20)", "overlay-inverse-gradient": "rgba(255, 255, 255, 1)", + // hyperlink, focus ring hyperlink: getPrimitiveColour("primary-50"), "hyperlink-inverse": "#FFCB6A", "focus-ring": getPrimitiveColour("black"), diff --git a/src/theme/colour-semantic/theme-helper.ts b/src/theme/colour-semantic/theme-helper.ts index 168d2d4c9..78c2e365d 100644 --- a/src/theme/colour-semantic/theme-helper.ts +++ b/src/theme/colour-semantic/theme-helper.ts @@ -41,110 +41,126 @@ export const getSemanticColour = (key: keyof SemanticColourSet) => { }; export const ColourSemantic = { + // text text: getSemanticColour("text"), - "text-hover": getSemanticColour("text-hover"), - "text-selected": getSemanticColour("text-selected"), - "text-disabled": getSemanticColour("text-disabled"), - "text-success": getSemanticColour("text-success"), - "text-inverse": getSemanticColour("text-inverse"), "text-subtle": getSemanticColour("text-subtle"), "text-subtler": getSemanticColour("text-subtler"), "text-subtlest": getSemanticColour("text-subtlest"), + "text-primary": getSemanticColour("text-primary"), + + "text-hover": getSemanticColour("text-hover"), + "text-selected": getSemanticColour("text-selected"), + "text-selected-hover": getSemanticColour("text-selected-hover"), + + "text-disabled": getSemanticColour("text-disabled"), "text-disabled-subtle": getSemanticColour("text-disabled-subtle"), "text-disabled-subtlest": getSemanticColour("text-disabled-subtlest"), "text-selected-disabled": getSemanticColour("text-selected-disabled"), + + "text-success": getSemanticColour("text-success"), "text-warning": getSemanticColour("text-warning"), "text-error": getSemanticColour("text-error"), "text-info": getSemanticColour("text-info"), + "text-inverse": getSemanticColour("text-inverse"), + // icon icon: getSemanticColour("icon"), - "icon-hover": getSemanticColour("icon-hover"), - "icon-selected": getSemanticColour("icon-selected"), - "icon-disabled": getSemanticColour("icon-disabled"), - "icon-success": getSemanticColour("icon-success"), - "icon-inverse": getSemanticColour("icon-inverse"), "icon-subtle": getSemanticColour("icon-subtle"), "icon-strongest": getSemanticColour("icon-strongest"), "icon-primary": getSemanticColour("icon-primary"), "icon-primary-subtle": getSemanticColour("icon-primary-subtle"), "icon-primary-subtlest": getSemanticColour("icon-primary-subtlest"), + + "icon-hover": getSemanticColour("icon-hover"), + "icon-selected": getSemanticColour("icon-selected"), + "icon-selected-hover": getSemanticColour("icon-selected-hover"), + + "icon-disabled": getSemanticColour("icon-disabled"), "icon-disabled-subtle": getSemanticColour("icon-disabled-subtle"), "icon-selected-disabled": getSemanticColour("icon-selected-disabled"), + + "icon-success": getSemanticColour("icon-success"), "icon-warning": getSemanticColour("icon-warning"), "icon-error": getSemanticColour("icon-error"), "icon-error-strong": getSemanticColour("icon-error-strong"), "icon-info": getSemanticColour("icon-info"), + "icon-inverse": getSemanticColour("icon-inverse"), + // border border: getSemanticColour("border"), - "border-hover": getSemanticColour("border-hover"), - "border-selected": getSemanticColour("border-selected"), - "border-disabled": getSemanticColour("border-disabled"), - "border-success": getSemanticColour("border-success"), - "border-inverse": getSemanticColour("border-inverse"), "border-strong": getSemanticColour("border-strong"), "border-primary": getSemanticColour("border-primary"), "border-primary-subtle": getSemanticColour("border-primary-subtle"), - "border-hover-strong": getSemanticColour("border-hover-strong"), + + "border-hover": getSemanticColour("border-hover"), + "border-selected": getSemanticColour("border-selected"), "border-selected-subtle": getSemanticColour("border-selected-subtle"), "border-selected-subtlest": getSemanticColour("border-selected-subtlest"), + "border-selected-hover": getSemanticColour("border-selected-hover"), + "border-focus": getSemanticColour("border-focus"), "border-focus-strong": getSemanticColour("border-focus-strong"), + "border-disabled": getSemanticColour("border-disabled"), "border-selected-disabled": getSemanticColour("border-selected-disabled"), + + "border-success": getSemanticColour("border-success"), "border-warning": getSemanticColour("border-warning"), "border-error": getSemanticColour("border-error"), "border-error-focus": getSemanticColour("border-error-focus"), + "border-error-strong": getSemanticColour("border-error-strong"), "border-info": getSemanticColour("border-info"), + // background + bg: getSemanticColour("bg"), + "bg-strong": getSemanticColour("bg-strong"), + "bg-stronger": getSemanticColour("bg-stronger"), + "bg-strongest": getSemanticColour("bg-strongest"), + "bg-hover": getSemanticColour("bg-hover"), + "bg-hover-strong": getSemanticColour("bg-hover-strong"), + "bg-hover-subtle": getSemanticColour("bg-hover-subtle"), + "bg-hover-neutral": getSemanticColour("bg-hover-neutral"), + "bg-selected": getSemanticColour("bg-selected"), + "bg-selected-strong": getSemanticColour("bg-selected-strong"), + "bg-selected-hover": getSemanticColour("bg-selected-hover"), + "bg-selected-disabled": getSemanticColour("bg-selected-disabled"), + "bg-selected-strongest": getSemanticColour("bg-selected-strongest"), "bg-disabled": getSemanticColour("bg-disabled"), + "bg-success": getSemanticColour("bg-success"), + "bg-success-strong": getSemanticColour("bg-success-strong"), + "bg-warning": getSemanticColour("bg-warning"), + "bg-warning-strong": getSemanticColour("bg-warning-strong"), + "bg-info": getSemanticColour("bg-info"), + "bg-info-strong": getSemanticColour("bg-info-strong"), + "bg-error": getSemanticColour("bg-error"), + "bg-error-strong": getSemanticColour("bg-error-strong"), + "bg-error-strong-hover": getSemanticColour("bg-error-strong-hover"), + "bg-inverse": getSemanticColour("bg-inverse"), - "bg-stronger": getSemanticColour("bg-stronger"), - "bg-hover-strong": getSemanticColour("bg-hover-strong"), - "bg-hover-subtle": getSemanticColour("bg-hover-subtle"), - "bg-hover-neutral": getSemanticColour("bg-hover-neutral"), + "bg-inverse-subtle": getSemanticColour("bg-inverse-subtle"), + "bg-inverse-subtler": getSemanticColour("bg-inverse-subtler"), + "bg-inverse-subtlest": getSemanticColour("bg-inverse-subtlest"), + "bg-primary": getSemanticColour("bg-primary"), - "bg-primary-hover": getSemanticColour("bg-primary-hover"), "bg-primary-subtle": getSemanticColour("bg-primary-subtle"), + "bg-primary-subtler": getSemanticColour("bg-primary-subtler"), "bg-primary-subtlest": getSemanticColour("bg-primary-subtlest"), + "bg-primary-hover": getSemanticColour("bg-primary-hover"), "bg-primary-subtlest-hover": getSemanticColour("bg-primary-subtlest-hover"), "bg-primary-subtlest-selected": getSemanticColour( "bg-primary-subtlest-selected" ), - "bg-selected-strong": getSemanticColour("bg-selected-strong"), - "bg-selected-hover": getSemanticColour("bg-selected-hover"), - "bg-selected-disabled": getSemanticColour("bg-selected-disabled"), - "bg-warning": getSemanticColour("bg-warning"), - "bg-error": getSemanticColour("bg-error"), - "bg-info": getSemanticColour("bg-info"), - "bg-error-strong": getSemanticColour("bg-error-strong"), - "bg-error-strong-hover": getSemanticColour("bg-error-strong-hover"), + // overlay "overlay-strong": getSemanticColour("overlay-strong"), "overlay-subtle": getSemanticColour("overlay-subtle"), "overlay-inverse-gradient": getSemanticColour("overlay-inverse-gradient"), + // hyperlink, focus ring hyperlink: getSemanticColour("hyperlink"), "hyperlink-inverse": getSemanticColour("hyperlink-inverse"), "focus-ring": getSemanticColour("focus-ring"), "focus-ring-inverse": getSemanticColour("focus-ring-inverse"), - - // new changes: - "text-primary": getSemanticColour("text-primary"), - "text-selected-hover": getSemanticColour("text-selected-hover"), - "icon-selected-hover": getSemanticColour("icon-selected-hover"), - "border-selected-hover": getSemanticColour("border-selected-hover"), - bg: getSemanticColour("bg"), - "bg-primary-subtler": getSemanticColour("bg-primary-subtler"), - "bg-success-strong": getSemanticColour("bg-success-strong"), - "bg-inverse-subtle": getSemanticColour("bg-inverse-subtle"), - "bg-inverse-subtler": getSemanticColour("bg-inverse-subtler"), - "bg-inverse-subtlest": getSemanticColour("bg-inverse-subtlest"), - "bg-strong": getSemanticColour("bg-strong"), - "bg-strongest": getSemanticColour("bg-strongest"), - "bg-selected-strongest": getSemanticColour("bg-selected-strongest"), - "bg-warning-strong": getSemanticColour("bg-warning-strong"), - "bg-info-strong": getSemanticColour("bg-info-strong"), - "border-error-strong": getSemanticColour("border-error-strong"), }; diff --git a/src/theme/colour-semantic/types.ts b/src/theme/colour-semantic/types.ts index 3575bea88..66acbd670 100644 --- a/src/theme/colour-semantic/types.ts +++ b/src/theme/colour-semantic/types.ts @@ -7,109 +7,126 @@ export type SemanticColourCollectionMap = { export type SemanticColourSetOptions = Partial; type SemanticColourValue = string | ((props: any) => string); + export type SemanticColourSet = { + // text text: SemanticColourValue; - "text-hover": SemanticColourValue; - "text-selected": SemanticColourValue; - "text-disabled": SemanticColourValue; - "text-success": SemanticColourValue; - "text-inverse": SemanticColourValue; "text-subtle": SemanticColourValue; "text-subtler": SemanticColourValue; "text-subtlest": SemanticColourValue; + "text-primary": SemanticColourValue; + + "text-hover": SemanticColourValue; + "text-selected": SemanticColourValue; + "text-selected-hover": SemanticColourValue; + + "text-disabled": SemanticColourValue; "text-disabled-subtle": SemanticColourValue; "text-disabled-subtlest": SemanticColourValue; "text-selected-disabled": SemanticColourValue; + + "text-success": SemanticColourValue; "text-warning": SemanticColourValue; "text-error": SemanticColourValue; "text-info": SemanticColourValue; + "text-inverse": SemanticColourValue; + // icon icon: SemanticColourValue; - "icon-hover": SemanticColourValue; - "icon-selected": SemanticColourValue; - "icon-disabled": SemanticColourValue; - "icon-success": SemanticColourValue; - "icon-inverse": SemanticColourValue; "icon-subtle": SemanticColourValue; "icon-strongest": SemanticColourValue; "icon-primary": SemanticColourValue; "icon-primary-subtle": SemanticColourValue; "icon-primary-subtlest": SemanticColourValue; + + "icon-hover": SemanticColourValue; + "icon-selected": SemanticColourValue; + "icon-selected-hover": SemanticColourValue; + + "icon-disabled": SemanticColourValue; "icon-disabled-subtle": SemanticColourValue; "icon-selected-disabled": SemanticColourValue; + + "icon-success": SemanticColourValue; "icon-warning": SemanticColourValue; "icon-error": SemanticColourValue; "icon-error-strong": SemanticColourValue; "icon-info": SemanticColourValue; + "icon-inverse": SemanticColourValue; + // border border: SemanticColourValue; - "border-hover": SemanticColourValue; - "border-selected": SemanticColourValue; - "border-disabled": SemanticColourValue; - "border-success": SemanticColourValue; - "border-inverse": SemanticColourValue; "border-strong": SemanticColourValue; "border-primary": SemanticColourValue; "border-primary-subtle": SemanticColourValue; - "border-hover-strong": SemanticColourValue; + + "border-hover": SemanticColourValue; + "border-selected": SemanticColourValue; "border-selected-subtle": SemanticColourValue; "border-selected-subtlest": SemanticColourValue; + "border-selected-hover": SemanticColourValue; + "border-focus": SemanticColourValue; "border-focus-strong": SemanticColourValue; + "border-disabled": SemanticColourValue; "border-selected-disabled": SemanticColourValue; + + "border-success": SemanticColourValue; "border-warning": SemanticColourValue; "border-error": SemanticColourValue; "border-error-focus": SemanticColourValue; + "border-error-strong": SemanticColourValue; "border-info": SemanticColourValue; - "bg-hover": SemanticColourValue; - "bg-selected": SemanticColourValue; - "bg-disabled": SemanticColourValue; - "bg-success": SemanticColourValue; - "bg-inverse": SemanticColourValue; + // background + bg: SemanticColourValue; + "bg-strong": SemanticColourValue; "bg-stronger": SemanticColourValue; + "bg-strongest": SemanticColourValue; + + "bg-hover": SemanticColourValue; "bg-hover-strong": SemanticColourValue; "bg-hover-subtle": SemanticColourValue; "bg-hover-neutral": SemanticColourValue; - "bg-primary": SemanticColourValue; - "bg-primary-hover": SemanticColourValue; - "bg-primary-subtle": SemanticColourValue; - "bg-primary-subtlest": SemanticColourValue; - "bg-primary-subtlest-hover": SemanticColourValue; - "bg-primary-subtlest-selected": SemanticColourValue; + + "bg-selected": SemanticColourValue; "bg-selected-strong": SemanticColourValue; "bg-selected-hover": SemanticColourValue; "bg-selected-disabled": SemanticColourValue; + "bg-selected-strongest": SemanticColourValue; + "bg-disabled": SemanticColourValue; + + "bg-success": SemanticColourValue; + "bg-success-strong": SemanticColourValue; "bg-warning": SemanticColourValue; - "bg-error": SemanticColourValue; + "bg-warning-strong": SemanticColourValue; "bg-info": SemanticColourValue; + "bg-info-strong": SemanticColourValue; + "bg-error": SemanticColourValue; "bg-error-strong": SemanticColourValue; "bg-error-strong-hover": SemanticColourValue; + "bg-inverse": SemanticColourValue; + "bg-inverse-subtle": SemanticColourValue; + "bg-inverse-subtler": SemanticColourValue; + "bg-inverse-subtlest": SemanticColourValue; + + "bg-primary": SemanticColourValue; + "bg-primary-subtle": SemanticColourValue; + "bg-primary-subtler": SemanticColourValue; + "bg-primary-subtlest": SemanticColourValue; + "bg-primary-hover": SemanticColourValue; + "bg-primary-subtlest-hover": SemanticColourValue; + "bg-primary-subtlest-selected": SemanticColourValue; + + // overlay "overlay-strong": SemanticColourValue; "overlay-subtle": SemanticColourValue; "overlay-inverse-gradient": SemanticColourValue; + // hyperlink, focus ring hyperlink: SemanticColourValue; "hyperlink-inverse": SemanticColourValue; "focus-ring": SemanticColourValue; "focus-ring-inverse": SemanticColourValue; - - // new - "text-primary": SemanticColourValue; - "text-selected-hover": SemanticColourValue; - "icon-selected-hover": SemanticColourValue; - "border-selected-hover": SemanticColourValue; - bg: SemanticColourValue; - "bg-primary-subtler": SemanticColourValue; - "bg-success-strong": SemanticColourValue; - "bg-inverse-subtle": SemanticColourValue; - "bg-inverse-subtler": SemanticColourValue; - "bg-inverse-subtlest": SemanticColourValue; - "bg-strong": SemanticColourValue; - "bg-strongest": SemanticColourValue; - "bg-selected-strongest": SemanticColourValue; - "bg-warning-strong": SemanticColourValue; - "bg-info-strong": SemanticColourValue; - "border-error-strong": SemanticColourValue; }; diff --git a/stories/theme/doc-elements/doc-semantic-colour-display.tsx b/stories/theme/doc-elements/doc-semantic-colour-display.tsx index 4ab7ada41..c6d75ab95 100644 --- a/stories/theme/doc-elements/doc-semantic-colour-display.tsx +++ b/stories/theme/doc-elements/doc-semantic-colour-display.tsx @@ -46,6 +46,13 @@ export const SemanticColourDisplay = ({ "text-primary", ]} /> + - - - + Icon + + + + + + + Border - + - @@ -259,7 +298,7 @@ const SwatchColour = styled.div` background: ${(props) => props.$colour}; `; -const SwatchLabel = styled.span` +const SwatchLabel = styled.div` font-family: monospace; font-size: 1rem; border-radius: 4px; From 6a6020f4c86b716fcbc6dc185406f181323586a1 Mon Sep 17 00:00:00 2001 From: qroll Date: Thu, 26 Sep 2024 12:45:34 +0800 Subject: [PATCH 0479/1949] [MISC][RL] Update prop --- src/time-range-picker/combobox-picker/combobox-picker.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index 985c237ef..04f0cd559 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -418,7 +418,7 @@ export const ComboboxPicker = ({ offset={8} alignment={alignment} fitAvailableHeight - zIndex={dropdownZIndex} + customZIndex={dropdownZIndex} /> {renderError()} From 22c6b77d44cf34936cdcac47ef6e9296913cae4e Mon Sep 17 00:00:00 2001 From: qroll Date: Thu, 26 Sep 2024 12:46:26 +0800 Subject: [PATCH 0480/1949] [MISC][RL] Bump v2.8.0-canary.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 55c5ecf5e..fafbaa224 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.8.0-canary.1", + "version": "2.8.0-canary.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.8.0-canary.1", + "version": "2.8.0-canary.2", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 96898a31d..125e4d283 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.8.0-canary.1", + "version": "2.8.0-canary.2", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 9b8f5e6abcabeb0151e56bbd9d2019c378d620cf Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 13:20:20 +0800 Subject: [PATCH 0481/1949] [BOOKINGSG-6090-date-navigator][JZ|FY] Add DateNavigator component and its props, also added extra helper functions --- src/date-navigator/date-navigator.style.tsx | 38 +++++++ src/date-navigator/date-navigator.tsx | 115 ++++++++++++++++++++ src/date-navigator/types.ts | 10 ++ src/util/calendar-helper.ts | 46 +++++++- src/util/date-helper.ts | 17 ++- 5 files changed, 222 insertions(+), 4 deletions(-) create mode 100644 src/date-navigator/date-navigator.style.tsx create mode 100644 src/date-navigator/date-navigator.tsx create mode 100644 src/date-navigator/types.ts diff --git a/src/date-navigator/date-navigator.style.tsx b/src/date-navigator/date-navigator.style.tsx new file mode 100644 index 000000000..dffac47c9 --- /dev/null +++ b/src/date-navigator/date-navigator.style.tsx @@ -0,0 +1,38 @@ +import styled from "styled-components"; +import { Color } from "../color"; +import { ClickableIcon } from "../shared/clickable-icon"; +import { Text } from "../text"; + +export const HeaderArrowButton = styled(ClickableIcon)` + height: 2.5rem; + padding: 1rem; + :disabled { + cursor: not-allowed; + > svg { + color: ${Color.Neutral[5]}; + } + } +`; + +export const Container = styled.div` + display: flex; + align-items: center; + margin: 0.625rem 0 0.625rem 0; + justify-content: center; + width: 100%; +`; + +export const Wrapper = styled.div` + text-align: center; + padding: 0 !important; +`; + +export const StyledDateText = styled(Text.H4)` + color: ${Color.Neutral[1]}; + white-space: nowrap; + display: inline-block; +`; + +export const StyledDayText = styled(Text.XSmall)` + color: ${Color.Neutral[2]}; +`; diff --git a/src/date-navigator/date-navigator.tsx b/src/date-navigator/date-navigator.tsx new file mode 100644 index 000000000..6d546f23b --- /dev/null +++ b/src/date-navigator/date-navigator.tsx @@ -0,0 +1,115 @@ +import dayjs from "dayjs"; +import { + ArrowLeft, + ArrowRight, +} from "../shared/internal-calendar/calendar-manager.style"; +import { CalendarHelper, DateHelper } from "../util"; +import { + Container, + HeaderArrowButton, + StyledDateText, + StyledDayText, + Wrapper, +} from "./date-navigator.style"; +import { DateNavigatorProps } from "./types"; + +export const DateNavigator = ({ + selectedDate, + ...optionalProps +}: DateNavigatorProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const date = DateHelper.toDayjs(selectedDate); + const dateText = DateHelper.toDayjs(selectedDate) + .format("D MMMM YYYY") + .toString(); + const isToday = DateHelper.isSame(selectedDate, dayjs()); + const dayText = isToday + ? "Today" + : DateHelper.toDayjs(selectedDate).format("dddd"); + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + const isLeftArrowDisabled = () => { + if (!optionalProps.minDate) { + return false; + } + return ( + CalendarHelper.isDisabledDay( + date, + undefined, + optionalProps.minDate + ) || DateHelper.isSame(date, optionalProps.minDate) + ); + }; + + const isRightArrowDisabled = () => { + if (!optionalProps.maxDate) { + return false; + } + return ( + CalendarHelper.isDisabledDay( + date, + undefined, + undefined, + optionalProps.maxDate + ) || DateHelper.isSame(date, optionalProps.maxDate) + ); + }; + + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= + return ( + + {optionalProps.onLeftArrowClick && ( + optionalProps.onLeftArrowClick(selectedDate)} + > + + + )} + + + {dateText} + + + {dayText} + + + {optionalProps.onRightArrowClick && ( + + optionalProps.onRightArrowClick(selectedDate) + } + > + + + )} + + ); +}; diff --git a/src/date-navigator/types.ts b/src/date-navigator/types.ts new file mode 100644 index 000000000..44fcc54d7 --- /dev/null +++ b/src/date-navigator/types.ts @@ -0,0 +1,10 @@ +export interface DateNavigatorProps { + className?: string | undefined; + "data-testid"?: string | undefined; + selectedDate: string; + minDate?: string | undefined; + maxDate?: string | undefined; + isLoading?: boolean | undefined; + onLeftArrowClick?: (currentDate: string) => void | undefined; + onRightArrowClick?: (currentDate: string) => void | undefined; +} diff --git a/src/util/calendar-helper.ts b/src/util/calendar-helper.ts index e7547d2e4..07cbc6918 100644 --- a/src/util/calendar-helper.ts +++ b/src/util/calendar-helper.ts @@ -1,9 +1,9 @@ -import customParseFormat from "dayjs/plugin/customParseFormat"; -import timezone from "dayjs/plugin/timezone"; import dayjs, { Dayjs, OpUnitType } from "dayjs"; +import customParseFormat from "dayjs/plugin/customParseFormat"; import isBetween from "dayjs/plugin/isBetween"; -import isSameOrBefore from "dayjs/plugin/isSameOrBefore"; import isSameOrAfter from "dayjs/plugin/isSameOrAfter"; +import isSameOrBefore from "dayjs/plugin/isSameOrBefore"; +import timezone from "dayjs/plugin/timezone"; dayjs.extend(isBetween); dayjs.extend(isSameOrBefore); @@ -12,6 +12,46 @@ dayjs.extend(isSameOrAfter); dayjs.extend(customParseFormat); dayjs.extend(timezone); export namespace CalendarHelper { + /** + * Rounds time to the nearest hour, e.g 6:30 will be clamped to 6:00 + * @param time the input time in HH:mm format + * @param toNextHour to clamp to next hour instead, e.g. 6:30 will be clamped to 7:00 + * @returns + */ + export const roundToNearestHour = (time: string, toNextHour?: boolean) => { + const formattedTime = dayjs(time, "HH:mm"); + const roundedTime = + formattedTime.minute() === 0 + ? formattedTime + : toNextHour + ? formattedTime.minute(0).add(1, "hour") + : formattedTime.minute(0); + return roundedTime.format("HH:mm"); + }; + + export const generateHourlyIntervals = ( + startTime: string, + endTime: string, + generatedFormat = "ha" + ) => { + const format = "HH:mm"; + let start = dayjs(startTime, format); + let end = dayjs(endTime, format); + + if (start.isSame(end)) { + end = end.add(1, "day"); + } + + const intervals: string[] = []; + + while (start.isBefore(end)) { + intervals.push(start.format(generatedFormat)); + start = start.add(1, "hour"); + } + + return intervals; + }; + export const generateDays = (calendarDate: Dayjs): Dayjs[][] => { const firstDayOfTheMonth = calendarDate.startOf("month"); diff --git a/src/util/date-helper.ts b/src/util/date-helper.ts index 4b9e79d38..1c2546feb 100644 --- a/src/util/date-helper.ts +++ b/src/util/date-helper.ts @@ -1,4 +1,4 @@ -import dayjs, { Dayjs } from "dayjs"; +import dayjs, { Dayjs, OpUnitType } from "dayjs"; const MONTHS_WITH_31_DAYS = [1, 3, 5, 7, 8, 10, 12]; const MONTHS_WITH_30_DAYS = [4, 6, 9, 11]; @@ -101,4 +101,19 @@ export namespace DateHelper { .format(format); return newTime; }; + + /** + * Compares two date params to check if they are the same, to a precision level + * @param date1 The first date input param + * @param date2 The second date input param + * @param precision The precision/granular level to check if dates are the same, defaults to "day" + * @returns + */ + export const isSame = ( + date1: string | Dayjs, + date2: string | Dayjs, + precision: OpUnitType = "day" + ) => { + return dayjs(date1).isSame(dayjs(date2), precision); + }; } From d7694087732f88a565b615b3650f0e421d993143 Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 13:21:16 +0800 Subject: [PATCH 0482/1949] [BOOKINGSG-6090-date-navigator][JZ|FY] Re-export DateNavigator and its typings --- src/date-navigator/index.ts | 2 ++ src/index.ts | 1 + 2 files changed, 3 insertions(+) create mode 100644 src/date-navigator/index.ts diff --git a/src/date-navigator/index.ts b/src/date-navigator/index.ts new file mode 100644 index 000000000..93b5a3d46 --- /dev/null +++ b/src/date-navigator/index.ts @@ -0,0 +1,2 @@ +export * from "./date-navigator"; +export * from "./types"; diff --git a/src/index.ts b/src/index.ts index d11d546a4..d6a3b0832 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,6 +13,7 @@ export * from "./color"; export * from "./countdown-timer"; export * from "./data-table"; export * from "./date-input"; +export * from "./date-navigator"; export * from "./date-range-input"; export * from "./design-token"; export * from "./divider"; From daf5f0b92ce3ca79dd9b4714c5f1b39c7ac8c6be Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 13:21:51 +0800 Subject: [PATCH 0483/1949] [BOOKINGSG-6090-date-navigator][JZ|FY] Added stories and docs for DateNavigator --- stories/date-navigator/date-navigator.mdx | 40 ++++++++ .../date-navigator/date-navigator.stories.tsx | 93 +++++++++++++++++++ stories/date-navigator/props-table.tsx | 62 +++++++++++++ 3 files changed, 195 insertions(+) create mode 100644 stories/date-navigator/date-navigator.mdx create mode 100644 stories/date-navigator/date-navigator.stories.tsx create mode 100644 stories/date-navigator/props-table.tsx diff --git a/stories/date-navigator/date-navigator.mdx b/stories/date-navigator/date-navigator.mdx new file mode 100644 index 000000000..15fdea6fd --- /dev/null +++ b/stories/date-navigator/date-navigator.mdx @@ -0,0 +1,40 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../storybook-common"; +import * as DateNavigatorStories from "./date-navigator.stories"; +import { PropsTable } from "./props-table"; + + + +DateNavigator + +Overview + +A component that displays the current date and day, with optional callbacks for navigating the dates. + +```tsx +import { DateNavigator } from "@lifesg/react-design-system/date-navigator"; +``` + + + +With Navigation + +With the optional callbacks defined for left right arrow button clicks, the buttons will appear and the behavior of these button depends on the implementation. + + + +Loading State + +If there is a need to disable button clicks due to loading states, there is an optional prop to to do so. + + + +With date range + +If min and max date props are passed in, the component will disable the corresponding navigation buttons when the current date falls out of the range. + + + +Component API + + diff --git a/stories/date-navigator/date-navigator.stories.tsx b/stories/date-navigator/date-navigator.stories.tsx new file mode 100644 index 000000000..c4fca9d04 --- /dev/null +++ b/stories/date-navigator/date-navigator.stories.tsx @@ -0,0 +1,93 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import dayjs from "dayjs"; +import { useState } from "react"; +import { DateNavigator } from "../../src/date-navigator/date-navigator"; + +type Component = typeof DateNavigator; + +const meta: Meta = { + title: "Modules/DateNavigator", + component: DateNavigator, +}; + +export default meta; + +export const Default: StoryObj = { + render: () => { + const today = dayjs().toString(); + return ; + }, +}; + +export const WithNavigation: StoryObj = { + render: () => { + const today = dayjs().toString(); + const [selectedDate, setSelectedDate] = useState(today); + + const onLeftArrowClick = (currentDate: string) => { + setSelectedDate(dayjs(currentDate).subtract(1, "day").toString()); + }; + + const onRightArrowClick = (currentDate: string) => { + setSelectedDate(dayjs(currentDate).add(1, "day").toString()); + }; + + return ( + + ); + }, +}; + +export const LoadingState: StoryObj = { + render: () => { + const today = dayjs().toString(); + const [selectedDate, setSelectedDate] = useState(today); + + const onLeftArrowClick = (currentDate: string) => { + setSelectedDate(dayjs(currentDate).subtract(1, "day").toString()); + }; + + const onRightArrowClick = (currentDate: string) => { + setSelectedDate(dayjs(currentDate).add(1, "day").toString()); + }; + return ( + + ); + }, +}; + +export const WithMinAndMaxDate: StoryObj = { + render: () => { + const today = dayjs().toString(); + const minDate = dayjs(today).subtract(6, "day").toString(); + const maxDate = dayjs(today).add(6, "day").toString(); + const [selectedDate, setSelectedDate] = useState(today); + + const onLeftArrowClick = (currentDate: string) => { + setSelectedDate(dayjs(currentDate).subtract(1, "day").toString()); + }; + + const onRightArrowClick = (currentDate: string) => { + setSelectedDate(dayjs(currentDate).add(1, "day").toString()); + }; + + return ( + + ); + }, +}; diff --git a/stories/date-navigator/props-table.tsx b/stories/date-navigator/props-table.tsx new file mode 100644 index 000000000..8310cacec --- /dev/null +++ b/stories/date-navigator/props-table.tsx @@ -0,0 +1,62 @@ +import { ApiTable } from "../storybook-common/api-table"; +import { ApiTableSectionProps } from "../storybook-common/api-table/types"; + +const DATA: ApiTableSectionProps[] = [ + { + attributes: [ + { + name: "data-testid", + description: "The test identifier of the component", + propTypes: ["string"], + }, + { + name: "className", + description: "The class selector of the component", + propTypes: ["string"], + }, + { + name: "selectedDate", + mandatory: true, + description: ( + <> + The date string to display, any format that is + acceptable by Dayjs will work. + + ), + propTypes: ["string"], + }, + { + name: "minDate", + description: + "The minimum date that is allowed to be navigated to.", + propTypes: ["string"], + }, + { + name: "maxDate", + description: + "The maximum date that is allowed to be navigated to.", + propTypes: ["string"], + }, + { + name: "isLoading", + description: "The loading state to disable navigation buttons.", + defaultValue: "false", + propTypes: ["boolean"], + }, + { + name: "onLeftArrowClick", + description: + "The callback function which will be called on left arrow navigation button click.", + propTypes: ["(currentDate: string) => void"], + }, + { + name: "onRightArrowClick", + description: + "The callback function which will be called on right arrow navigation button click.", + propTypes: ["(currentDate: string) => void"], + }, + ], + }, +]; + +export const PropsTable = () => ; From 7ee1490240768c9e3f6bcc255ef6669b7026dd61 Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 13:22:16 +0800 Subject: [PATCH 0484/1949] [BOOKINGSG-6090-date-navigator][JZ|FY] Add tests for DateNavigator --- tests/date-navigator/date-navigator.spec.tsx | 120 +++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 tests/date-navigator/date-navigator.spec.tsx diff --git a/tests/date-navigator/date-navigator.spec.tsx b/tests/date-navigator/date-navigator.spec.tsx new file mode 100644 index 000000000..01ab10d45 --- /dev/null +++ b/tests/date-navigator/date-navigator.spec.tsx @@ -0,0 +1,120 @@ +import { fireEvent, render, screen } from "@testing-library/react"; +import { DateNavigator } from "../../src"; + +describe("DateNavigator", () => { + const today = "2024-09-05"; + + beforeEach(() => { + jest.resetAllMocks(); + jest.useFakeTimers().setSystemTime(new Date(today)); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + it("should render a simple date displaying the selectedDate prop without navigation arrows", () => { + const { rerender } = render(); + expect(screen.getByText("5 September 2024")).toBeVisible(); + expect(screen.getByText("Today")).toBeVisible(); + expect( + screen.queryByTestId("date-navigator-left-arrow-btn") + ).not.toBeInTheDocument(); + expect( + screen.queryByTestId("date-navigator-right-arrow-btn") + ).not.toBeInTheDocument(); + + const tomorrow = "2024-09-06"; + rerender(); + expect(screen.getByText("6 September 2024")).toBeVisible(); + expect(screen.getByText("Friday")).toBeVisible(); + expect( + screen.queryByTestId("date-navigator-left-arrow-btn") + ).not.toBeInTheDocument(); + expect( + screen.queryByTestId("date-navigator-right-arrow-btn") + ).not.toBeInTheDocument(); + }); + + it("should render the new date if it changes on rerender", () => { + render(); + }); + + it("should render a date navigator with navigation arrows", () => { + const onRightArrowClick = jest.fn(); + const onLeftArrowClick = jest.fn(); + render( + + ); + const leftArrowButton = screen.getByTestId( + "date-navigator-left-arrow-btn" + ); + const rightArrowButton = screen.getByTestId( + "date-navigator-right-arrow-btn" + ); + fireEvent.click(leftArrowButton); + fireEvent.click(rightArrowButton); + expect(onRightArrowClick).toHaveBeenCalledTimes(1); + expect(onRightArrowClick).toHaveBeenCalledWith(today); + expect(onLeftArrowClick).toHaveBeenCalledTimes(1); + expect(onLeftArrowClick).toHaveBeenCalledWith(today); + }); + + it("should disable the buttons when it is in a loading state", () => { + const onRightArrowClick = jest.fn(); + const onLeftArrowClick = jest.fn(); + render( + + ); + const leftArrowButton = screen.getByTestId( + "date-navigator-left-arrow-btn" + ); + const rightArrowButton = screen.getByTestId( + "date-navigator-right-arrow-btn" + ); + expect(leftArrowButton).toBeDisabled(); + expect(rightArrowButton).toBeDisabled(); + }); + + it("should disable the corresponding buttons when the current date is ", () => { + const onRightArrowClick = jest.fn(); + const onLeftArrowClick = jest.fn(); + const minDate = "2024-08-05"; + const maxDate = "2024-10-05"; + const { rerender } = render( + + ); + const leftArrowButton = screen.getByTestId( + "date-navigator-left-arrow-btn" + ); + expect(leftArrowButton).toBeDisabled(); + rerender( + + ); + const rightArrowButton = screen.getByTestId( + "date-navigator-right-arrow-btn" + ); + expect(rightArrowButton).toBeDisabled(); + }); +}); From 83687fcaddbad7aeba33c2159027885041bd0d7f Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 13:22:47 +0800 Subject: [PATCH 0485/1949] [BOOKINGSG-6090-date-navigator][JZ|FY] Fix combobox-picker typing change error --- .../combobox-picker/combobox-picker.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index 985c237ef..e1ff8e04a 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -1,17 +1,17 @@ +import { OpenChangeReason } from "@floating-ui/react"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { ClearIcon } from "../../input/input.style"; +import { ErrorMessage } from "../../form/form-label.style"; import { ClearIconContainer } from "../../input-range-select/input-range-select.style"; -import { DropdownList } from "../../shared/dropdown-list-v2/dropdown-list"; +import { ClearIcon } from "../../input/input.style"; import { DropdownListState } from "../../shared/dropdown-list-v2"; +import { DropdownList } from "../../shared/dropdown-list-v2/dropdown-list"; import { ElementWithDropdown } from "../../shared/dropdown-wrapper"; -import { ErrorMessage } from "../../form/form-label.style"; -import { OpenChangeReason } from "@floating-ui/react"; import { RangeInputInnerContainer } from "../../shared/range-input-inner-container"; -import { SelectorInput, Wrapper } from "../common.styles"; import { SimpleIdGenerator } from "../../util"; -import { TimeFieldContainer } from "./combobox-picker.styles.tsx"; import { TimeHelper } from "../../util/time-helper"; +import { SelectorInput, Wrapper } from "../common.styles"; import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; +import { TimeFieldContainer } from "./combobox-picker.styles.tsx"; type TimeRangeInputType = "start" | "end"; interface TimeChangeOptions { @@ -418,7 +418,7 @@ export const ComboboxPicker = ({ offset={8} alignment={alignment} fitAvailableHeight - zIndex={dropdownZIndex} + customZIndex={dropdownZIndex} /> {renderError()} From 46279a9f2487a74ef0aaccb1d6f7977b59ead373 Mon Sep 17 00:00:00 2001 From: qroll Date: Thu, 26 Sep 2024 13:57:13 +0800 Subject: [PATCH 0486/1949] [MISC][RL] Attempt to set timeout for test --- tests/time-range-picker/time-range-picker.spec.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/time-range-picker/time-range-picker.spec.tsx b/tests/time-range-picker/time-range-picker.spec.tsx index 925df5315..371a0e5e3 100644 --- a/tests/time-range-picker/time-range-picker.spec.tsx +++ b/tests/time-range-picker/time-range-picker.spec.tsx @@ -18,7 +18,6 @@ describe("TimeRangePicker", () => { unobserve: jest.fn(), disconnect: jest.fn(), })); - jest.setTimeout(10000); }); describe("Combobox variant", () => { @@ -495,7 +494,7 @@ describe("TimeRangePicker", () => { expect(mockOnBlur).toHaveBeenCalledTimes(1); expect(mockOnFocus).toHaveBeenCalledTimes(2); expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); - }); + }, 10000); }); describe("readonly/disabled behavior", () => { From 483d9636d85853543a06560ede32099dba158417 Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 13:58:18 +0800 Subject: [PATCH 0487/1949] [BOOKINGSG-6090-timetable][JZ|FY] Update popover-trigger to allow configuring popover delay/offset, also overwrite outline to none --- src/popover-v2/popover-trigger.tsx | 8 ++++++-- src/popover-v2/types.ts | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/popover-v2/popover-trigger.tsx b/src/popover-v2/popover-trigger.tsx index a20671ac4..cff9842c8 100644 --- a/src/popover-v2/popover-trigger.tsx +++ b/src/popover-v2/popover-trigger.tsx @@ -45,7 +45,7 @@ export const PopoverTrigger = ({ placement: position, whileElementsMounted: autoUpdate, middleware: [ - offset(16), + offset(otherProps.offset ?? 16), flip(), shift({ limiter: limitShift(), @@ -71,7 +71,10 @@ export const PopoverTrigger = ({ const hover = useHover(context, { enabled: trigger === "hover", // short window to enter the floating element without it closing - delay: { close: 500 }, + delay: { + open: otherProps?.delay?.open ?? 0, + close: otherProps?.delay?.close ?? 500, + }, }); const { getReferenceProps, getFloatingProps } = useInteractions([ @@ -136,6 +139,7 @@ export const PopoverTrigger = ({ }} style={{ ...floatingStyles, + outline: "none", zIndex: zIndex ?? parentZIndex, }} {...getFloatingProps()} diff --git a/src/popover-v2/types.ts b/src/popover-v2/types.ts index b6102eb5b..37555e6f7 100644 --- a/src/popover-v2/types.ts +++ b/src/popover-v2/types.ts @@ -33,6 +33,9 @@ export interface PopoverV2TriggerProps { * the popover may not be visible. Specify the parent element here instead */ rootNode?: RefObject | undefined; + offset?: number | undefined; + // in milliseconds + delay?: { open: number; close: number } | undefined; onPopoverAppear?: (() => void) | undefined; onPopoverDismiss?: (() => void) | undefined; } From 14cf696f486c27e1f3a11e5ab85707790ae8940b Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 13:59:26 +0800 Subject: [PATCH 0488/1949] [BOOKINGSG-6090-timetable][JZ|FY] Update popover props table --- stories/popover-v2/props-table.tsx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/stories/popover-v2/props-table.tsx b/stories/popover-v2/props-table.tsx index 550b7a9d2..b6c6e98d4 100644 --- a/stories/popover-v2/props-table.tsx +++ b/stories/popover-v2/props-table.tsx @@ -127,6 +127,24 @@ const POPOVER_TRIGGER_DATA: ApiTableSectionProps[] = [ propTypes: ["React.ReactNode"], mandatory: true, }, + { + name: "offset", + description: "How much offset to apply for the popover (in px)", + propTypes: ["number"], + defaultValue: "16", + }, + { + name: "delay", + description: ( + <> + How much delay for popover to appear/dismiss
    + Note: When trigger is of type click, + delay is not applied. + + ), + propTypes: ["{ open: number, close: number }"], + defaultValue: "{ open: 0, close: 500 }", + }, ...COMMON_POPOVER_ATTRIBUTES, ], }, From ed24543f9cc4645f2a151724157541d0721a36fe Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 14:00:46 +0800 Subject: [PATCH 0489/1949] [BOOKINGSG-6090-timetable][JZ|FY] Add TimeTable component and its types along with its mock data --- .../timetable-navigator.style.tsx | 40 + .../timetable-navigator.tsx | 107 + src/timetable/timetable-row/row-bar.style.tsx | 6 + src/timetable/timetable-row/row-bar.tsx | 122 + .../timetable-row/row-cell.style.tsx | 116 + src/timetable/timetable-row/row-cell.tsx | 147 + src/timetable/timetable.style.tsx | 275 ++ src/timetable/timetable.tsx | 394 ++ src/timetable/types.ts | 75 + stories/timetable/mock-data.tsx | 173 + .../timetable/timetable-data-even-days.json | 2214 +++++++++++ .../timetable/timetable-data-odd-days.json | 2751 +++++++++++++ .../timetable/timetable-lazy-load-data.json | 3468 +++++++++++++++++ 13 files changed, 9888 insertions(+) create mode 100644 src/timetable/timetable-navigator/timetable-navigator.style.tsx create mode 100644 src/timetable/timetable-navigator/timetable-navigator.tsx create mode 100644 src/timetable/timetable-row/row-bar.style.tsx create mode 100644 src/timetable/timetable-row/row-bar.tsx create mode 100644 src/timetable/timetable-row/row-cell.style.tsx create mode 100644 src/timetable/timetable-row/row-cell.tsx create mode 100644 src/timetable/timetable.style.tsx create mode 100644 src/timetable/timetable.tsx create mode 100644 src/timetable/types.ts create mode 100644 stories/timetable/mock-data.tsx create mode 100644 stories/timetable/timetable-data-even-days.json create mode 100644 stories/timetable/timetable-data-odd-days.json create mode 100644 stories/timetable/timetable-lazy-load-data.json diff --git a/src/timetable/timetable-navigator/timetable-navigator.style.tsx b/src/timetable/timetable-navigator/timetable-navigator.style.tsx new file mode 100644 index 000000000..57c5445f5 --- /dev/null +++ b/src/timetable/timetable-navigator/timetable-navigator.style.tsx @@ -0,0 +1,40 @@ +import styled, { css } from "styled-components"; +import { Color } from "../../color"; +import { IconButton } from "../../icon-button"; +import { Text } from "../../text"; + +export const StyledRefreshButton = styled(IconButton)<{ $isLoading: boolean }>` + color: ${Color.Neutral[3]}; + @keyframes spin { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + svg { + ${(props) => { + if (props.$isLoading) { + return css` + -webkit-animation: spin 4s linear infinite; + -moz-animation: spin 4s linear infinite; + `; + } + }} + } +`; + +export const NavigationHeaderWrapper = styled.div` + width: 252px; + padding-bottom: 1rem; +`; + +export const NavigationHeaderSubtitleWrapper = styled.div` + display: flex; + align-items: center; + justify-content: center; + gap: 0.625rem; +`; + +export const StyledResultText = styled(Text.H6)` + color: ${Color.Neutral[3]}; +`; diff --git a/src/timetable/timetable-navigator/timetable-navigator.tsx b/src/timetable/timetable-navigator/timetable-navigator.tsx new file mode 100644 index 000000000..0317fec30 --- /dev/null +++ b/src/timetable/timetable-navigator/timetable-navigator.tsx @@ -0,0 +1,107 @@ +import { RefreshIcon } from "@lifesg/react-icons"; +import { MutableRefObject } from "react"; +import { DateNavigator } from "../../date-navigator/date-navigator"; +import { + NavigationHeaderSubtitleWrapper, + NavigationHeaderWrapper, + StyledRefreshButton, + StyledResultText, +} from "./timetable-navigator.style"; + +interface TimeTableNavigatorProps { + selectedDate: string; + isLoading: boolean; + tableContainerRef: MutableRefObject; + minDate?: string | undefined; + maxDate?: string | undefined; + totalRecords?: number | undefined; + onLeftArrowClick?: (currentDate: string) => void | undefined; + onRightArrowClick?: (currentDate: string) => void | undefined; + onRefresh?: (() => void) | undefined; +} + +export const TimeTableNavigator = ({ + selectedDate, + isLoading, + tableContainerRef, + ...optionalProps +}: TimeTableNavigatorProps) => { + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + + const scrollToTop = () => { + if (tableContainerRef.current) { + tableContainerRef.current.scrollTop = 0; + } + }; + + const onRefresh = () => { + if (!optionalProps.onRefresh) return; + scrollToTop(); + optionalProps.onRefresh(); + }; + + const handleRightArrowClick = (date: string) => { + scrollToTop(); + optionalProps.onRightArrowClick(date); + }; + + const handleLeftArrowClick = (date: string) => { + scrollToTop(); + optionalProps.onLeftArrowClick(date); + }; + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= + const renderRecordsSection = () => { + if (optionalProps.totalRecords === undefined) return <>; + return ( + + + {optionalProps.totalRecords} results found + + {optionalProps.onRefresh && ( + + + + )} + + ); + }; + + return ( + + { + + } + {renderRecordsSection()} + + ); +}; diff --git a/src/timetable/timetable-row/row-bar.style.tsx b/src/timetable/timetable-row/row-bar.style.tsx new file mode 100644 index 000000000..07fd0baca --- /dev/null +++ b/src/timetable/timetable-row/row-bar.style.tsx @@ -0,0 +1,6 @@ +import styled from "styled-components"; + +export const RowCellContainer = styled.div` + display: flex; + width: 100%; +`; diff --git a/src/timetable/timetable-row/row-bar.tsx b/src/timetable/timetable-row/row-bar.tsx new file mode 100644 index 000000000..b86a5bdd8 --- /dev/null +++ b/src/timetable/timetable-row/row-bar.tsx @@ -0,0 +1,122 @@ +import dayjs from "dayjs"; +import { MutableRefObject } from "react"; +import { + CustomPopoverProps, + RowBarColors, + RowCellData, + RowData, +} from "../types"; +import { RowCellContainer } from "./row-bar.style"; +import { RowCell } from "./row-cell"; + +interface RowBarProps extends RowData { + timetableMinTime: string; + timetableMaxTime: string; + intervalWidth: number; + containerRef: MutableRefObject; + rowBarColor: RowBarColors; + outsideOpHoursCellCustomPopover?: CustomPopoverProps | undefined; + "data-testid"?: string | undefined; + onCellClick?: (data: RowCellData, e: React.MouseEvent) => void; +} + +export const RowBar = ({ + id, + timetableMinTime, + timetableMaxTime, + rowMinTime = timetableMinTime, + rowMaxTime = timetableMaxTime, + rowCells, + rowBarColor, + intervalWidth, + containerRef, + ...optionalProps +}: RowBarProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const rowCellArray: RowCellData[] = []; + + // =========================================================================== + // HELPER FUNCTIONS + // =========================================================================== + + const isOnTheSameHour = ( + time1: dayjs.Dayjs, + time2: dayjs.Dayjs + ): boolean => { + return time1.get("hour") == time2.get("hour"); + }; + + // Handle non-op before hours + if (dayjs(timetableMinTime, "HH:mm").isBefore(dayjs(rowMinTime, "HH:mm"))) { + rowCellArray.push({ + id, + startTime: timetableMinTime, + endTime: rowMinTime, + status: "blocked", + customPopover: optionalProps.outsideOpHoursCellCustomPopover, + }); + } + + rowCells.forEach((cell, index) => { + const { endTime } = cell; + rowCellArray.push(cell); + + const nextSlotStartTime = dayjs( + rowCells[index + 1]?.startTime, + "HH:mm" + ); + const parsedEndTime = dayjs(endTime, "HH:mm"); + + let curr = parsedEndTime; + while (curr.isBefore(nextSlotStartTime)) { + if (!isOnTheSameHour(curr, nextSlotStartTime)) { + const nextHour = curr.add(1, "hour").startOf("hour"); // Round to the next hour + rowCellArray.push({ + id, + startTime: curr.format("HH:mm").toString(), + endTime: nextHour.format("HH:mm").toString(), + status: undefined, + }); + curr = nextHour; + } else { + rowCellArray.push({ + id, + startTime: curr.format("HH:mm").toString(), + endTime: nextSlotStartTime.format("HH:mm").toString(), + status: undefined, + }); + curr = nextSlotStartTime; + } + } + }); + + // Handle non-op after hours + if (dayjs(timetableMaxTime, "HH:mm").isAfter(dayjs(rowMaxTime, "HH:mm"))) { + rowCellArray.push({ + id, + startTime: rowMaxTime, + endTime: timetableMaxTime, + status: "blocked", + customPopover: optionalProps.outsideOpHoursCellCustomPopover, + }); + } + + return ( + + {rowCellArray.map((cell, index) => { + return ( + + ); + })} + + ); +}; diff --git a/src/timetable/timetable-row/row-cell.style.tsx b/src/timetable/timetable-row/row-cell.style.tsx new file mode 100644 index 000000000..d60440e05 --- /dev/null +++ b/src/timetable/timetable-row/row-cell.style.tsx @@ -0,0 +1,116 @@ +import styled, { css } from "styled-components"; +import { Color } from "../../color"; +import { PopoverTrigger } from "../../popover-v2"; +import { PopoverCard } from "../../popover-v2/popover.styles"; +import { Text } from "../../text"; +import { CellType } from "../types"; + +interface BlockStyleProps { + $width: number; + $status: CellType; + $bgColour: string; + $clickableCell?: boolean; +} + +interface BlockContainerProps { + $isOnTheHour: boolean; +} + +export const BlockContainer = styled.div` + border-bottom: 1px solid ${Color.Neutral[5]}; + ${(props) => { + if (props.$isOnTheHour) { + return css` + box-shadow: inset -0.5px 0px ${Color.Accent.Light[1]}; + `; + } + }} +`; + +export const Wrapper = styled.div` + display: flex; + margin-bottom: 2px; + height: 65px; +`; + +export const Gap = styled.div` + width: 2px; + height: 100%; +`; + +export const Block = styled.div` + height: 100%; + width: ${({ $width }) => `${$width}px`}; + font-size: 11px; + border-radius: 4px; + box-sizing: border-box; + padding: 4px; + ${({ $status, $bgColour, $clickableCell }) => { + switch ($status) { + case "blocked": + return css` + background: repeating-linear-gradient( + 135deg, + #e0e4e5 0px 6px, + #ecefef 6px 12px + ); + &:hover { + cursor: ${$clickableCell ? "pointer" : "not-allowed"}; + } + `; + case "filled": + return css` + background: ${$bgColour}; + &:hover { + cursor: ${$clickableCell ? "pointer" : "default"}; + } + `; + case "default": + return css` + &:hover { + cursor: ${$clickableCell ? "pointer" : "default"}; + } + `; + default: + return css` + background: ${Color.Neutral[6]}; + &:hover { + cursor: not-allowed; + } + `; + } + }} +`; + +export const BlockTitle = styled(Text.H6)` + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +`; + +export const BlockDescription = styled(Text.XSmall)` + color: #686868; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +`; + +export const StyledPopoverTrigger = styled(PopoverTrigger)` + padding: 0; + max-height: 62px; + &:hover { + cursor: pointer; + } +`; + +interface StyledPopoverContentProps { + $width?: string; + $padding?: string; +} + +export const StyledPopoverContent = styled( + PopoverCard +)` + width: ${(props) => props.$width ?? ""}; + padding: ${(props) => props.$padding ?? ""}; +`; diff --git a/src/timetable/timetable-row/row-cell.tsx b/src/timetable/timetable-row/row-cell.tsx new file mode 100644 index 000000000..26baa103e --- /dev/null +++ b/src/timetable/timetable-row/row-cell.tsx @@ -0,0 +1,147 @@ +import dayjs from "dayjs"; +import React, { MutableRefObject } from "react"; +import { PopoverTrigger, PopoverV2TriggerProps } from "../../popover-v2"; +import { DateHelper } from "../../util"; +import { ROW_CELL_GAP, ROW_INTERVAL, RowCellData } from "../types"; +import { + Block, + BlockContainer, + BlockDescription, + BlockTitle, + Gap, + StyledPopoverContent, + Wrapper, +} from "./row-cell.style"; + +interface RowCellProps extends RowCellData { + containerRef: MutableRefObject; + intervalWidth: number; + rowBarColor: string; + onCellClick?: (data: RowCellData, e: React.MouseEvent) => void; +} + +const Component = ({ + id, + startTime, + endTime, + title, + subtitle, + status, + intervalWidth, + rowBarColor, + containerRef, + customPopover, + onCellClick, +}: RowCellProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const isOnTheHour = dayjs(endTime, "HH:mm").get("minutes") === 0; + const isNotAvailable = status !== "default" || !status; + const numberOfIntervals = + DateHelper.getTimeDiffInMinutes(startTime, endTime) / ROW_INTERVAL; + const totalCellWidth = numberOfIntervals * intervalWidth; + const adjustedCellWidth = isNotAvailable + ? totalCellWidth - ROW_CELL_GAP + : totalCellWidth; + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + const handleCellClick = (event: React.MouseEvent) => { + if (status && status !== "blocked" && onCellClick) { + onCellClick( + { + id, + startTime, + endTime, + status, + title, + subtitle, + customPopover, + }, + event + ); + } + }; + + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= + + const ConditionalCellWrapper = ({ + wrapper, + children, + }: { + wrapper: (child: JSX.Element) => JSX.Element; + children: JSX.Element; + }) => { + if (!customPopover) { + return children; + } + + return wrapper(children); + }; + + const buildPopoverContent = (content: string | JSX.Element) => { + return ( + + {content} + + ); + }; + + const buildPopoverTrigger = (child: JSX.Element) => { + const popoverTriggerProps: PopoverV2TriggerProps = { + position: "bottom-start", + rootNode: containerRef, + offset: customPopover.offset, + children: child, + trigger: customPopover.trigger, + delay: customPopover.delay, + popoverContent: () => buildPopoverContent(customPopover.content), + }; + + return ( + {child} + ); + }; + + return ( + buildPopoverTrigger(child)} + > + + + + {title && ( + {title} + )} + {subtitle && ( + + {subtitle} + + )} + + {isNotAvailable && } + + + + ); +}; + +export const RowCell = React.memo(Component); diff --git a/src/timetable/timetable.style.tsx b/src/timetable/timetable.style.tsx new file mode 100644 index 000000000..e316d8230 --- /dev/null +++ b/src/timetable/timetable.style.tsx @@ -0,0 +1,275 @@ +import styled, { css, keyframes } from "styled-components"; +import { LoadingDotsSpinner } from "../animations"; +import { Color } from "../color"; +import { ErrorDisplay } from "../error-display"; +import { PopoverTrigger } from "../popover-v2"; +import { Text } from "../text"; + +interface ColumnHeaderRowProps { + $numOfColumns: number; + $isScrolled: boolean; +} + +interface RowHeaderColumnProps { + $numOfRows: number; + $isScrolled: boolean; +} + +interface TimeTableContainerProps { + $loading: boolean; + $width: string; + $height: string; + $allRecordsLoaded: boolean; +} + +interface EmptyTableContainerProps { + $width: string; + $height: string; +} + +interface RowColumnHeaderProps { + $isScrolledY: boolean; + $isScrolledX: boolean; +} + +interface RowHeaderProps { + $isScrolled: boolean; +} + +interface LoadingCellWrapperProps { + $width: number; +} + +interface ContentContainerPopoverProps { + $numOfRows: number; +} + +interface LoaderProps { + $isEmptyContent: boolean; +} + +export const EmptyTableContainer = styled.div` + display: grid; + grid-template-columns: 252px auto; + min-height: 600px; // REVIEW + min-width: 1000px; // REVIEW + height: ${(props) => props.$height}; + width: ${(props) => props.$width}; +`; + +export const EmptyTableRowHeader = styled.div` + display: flex; + height: fit-content; + grid-column: 1 / -1; + border-bottom: 1px solid ${Color.Neutral[5]}; +`; + +export const TimeTableContainer = styled.div` + display: grid; + overflow: scroll; + position: relative; + grid-template-columns: 252px fit-content(100%); + height: ${(props) => props.$height}; + width: ${(props) => props.$width}; + padding-bottom: ${(props) => (props.$allRecordsLoaded ? "0" : "128px")}; + min-height: 600px; // REVIEW + min-width: 900px; // REVIEW + ${(props) => { + if (props.$loading) { + return css` + :hover { + cursor: not-allowed; + padding-bottom: 0; + } + `; + } + }} +`; + +export const RowColumnHeader = styled.div` + position: sticky; + top: 0; + left: 0; + background-color: white; + width: 252px; + z-index: 2; + border-bottom: 1px solid ${Color.Neutral[5]}; + ${(props) => { + if (props.$isScrolledX || props.$isScrolledY) { + return css` + box-shadow: 0.125rem 0.125rem 0.5rem ${Color.Neutral[5]}; + clip-path: inset( + 0 ${props.$isScrolledX ? "-0.75rem" : "0"} + ${props.$isScrolledY ? "-0.75rem" : "0"} 0 + ); + transition: box-shadow 0.5s ease-in-out, + clip-path 0.5s ease-in-out; + `; + } else { + return css` + box-shadow: none; + clip-path: inset(0); + transition: box-shadow 0.5s ease-in-out, + clip-path 0.5s ease-in-out; + `; + } + }}; +`; + +export const RowHeaderColumn = styled.div` + display: grid; + position: sticky; + grid-column: 1 / 1; + left: 0; + z-index: 1; + background-color: white; + grid-template-rows: repeat(${(props) => props.$numOfRows}, 68px); +`; + +export const ColumnHeaderRow = styled.div` + display: grid; + position: sticky; + grid-column: 2 / 2; + grid-row: 1 / 1; + top: 0; + z-index: 1; + background-color: white; + grid-template-columns: repeat(${(props) => props.$numOfColumns}, 1fr); + width: 100%; + border-bottom: 1px solid ${Color.Neutral[5]}; + transition: all 0.5s ease-in-out; + ${(props) => { + if (props.$isScrolled) { + return css` + box-shadow: 0rem 0.125rem 0.5rem ${Color.Neutral[5]}; + `; + } + }}; +`; + +export const ColumnHeader = styled.div` + min-width: 84px; + align-content: end; + margin-bottom: 0.25rem; +`; + +export const ColumnHeaderTitle = styled(Text.H6)` + color: ${Color.Neutral[3]}; +`; + +export const ContentContainer = styled.div` + display: grid; + grid-template-rows: repeat(${(props) => props.$numOfRows}, 68px); +`; + +export const RowHeader = styled.div` + display: flex; + flex-direction: column; + align-items: flex-end; + justify-content: center; + position: sticky; + left: 0; + background-color: white; + width: 252px; + height: 68px; + text-align: right; + padding: 0 1rem 0 2rem; + border-bottom: 1px solid ${Color.Neutral[5]}; + border-left: 1px solid ${Color.Accent.Light[1]}; + transition: all 0.5s ease-in-out; + ${(props) => { + if (props.$isScrolled) { + return css` + box-shadow: 0.125rem 0.125rem 0.5rem ${Color.Neutral[5]}; + `; + } else { + return css` + box-shadow: inset -0.5px 0px ${Color.Accent.Light[1]}; + `; + } + }}; +`; + +export const ClickableRowHeaderTitle = styled(Text.H5)<{ + $isClickable: boolean; +}>` + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + color: ${Color.Primary}; + :hover { + cursor: ${(props) => (props.$isClickable ? "pointer" : "default")}; + } +`; + +export const RowHeaderSubtitle = styled(Text.XSmall)<{ $show: boolean }>` + display: inline-flex; + gap: 6px; + align-items: center; + color: ${Color.Neutral[3]}; + ${(props) => { + if (!props.$show) { + return css` + display: none; + `; + } + }} +`; + +export const Loader = styled(LoadingDotsSpinner)` + display: flex; + align-items: center; + justify-content: center; + grid-column: ${(props) => (props.$isEmptyContent ? "1 / -1" : "2 / -1")}; + grid-row: 2; + width: 100%; + height: 100%; +`; + +export const NoResultsFound = styled(ErrorDisplay)` + grid-column: 1 / -1; + grid-row: 2; + padding: 5rem 0 5rem 0; +`; + +export const LoadingWrapper = styled.div` + display: flex; + border-bottom: 1px solid ${Color.Neutral[5]}; +`; + +export const LoadingCell = styled.div` + border-right: 0.5px solid ${Color.Accent.Light[1]}; + width: ${(props) => `${props.$width}px`}; + height: 100%; + padding: 20px 12px 20px 12px; +`; + +const gradientAnimation = keyframes` + 0% { + background-position: -468px 0; + } + 100% { + background-position: 468px 0; + } +`; + +export const LoadingBar = styled.div` + height: 28px; + width: 100%; + background: linear-gradient( + to right, + ${Color.Neutral[6]} 8%, + ${Color.Neutral[7]} 18%, + ${Color.Neutral[6]} 33% + ); + background-size: 800px 104px; + animation: ${gradientAnimation} 1.5s forwards infinite; +`; + +export const StyledPopoverTrigger = styled(PopoverTrigger)` + max-width: 24rem !important; + :hover { + cursor: default; + } +`; diff --git a/src/timetable/timetable.tsx b/src/timetable/timetable.tsx new file mode 100644 index 000000000..6f3693e3c --- /dev/null +++ b/src/timetable/timetable.tsx @@ -0,0 +1,394 @@ +import { isEmpty, throttle } from "lodash"; +import { useEffect, useRef, useState } from "react"; +import { useResizeDetector } from "react-resize-detector"; +import { PopoverV2TriggerProps } from "../popover-v2"; +import { CalendarHelper } from "../util"; +import { TimeTableNavigator } from "./timetable-navigator/timetable-navigator"; +import { RowBar } from "./timetable-row/row-bar"; +import { StyledPopoverContent } from "./timetable-row/row-cell.style"; +import { + ClickableRowHeaderTitle, + ColumnHeader, + ColumnHeaderRow, + ColumnHeaderTitle, + ContentContainer, + EmptyTableContainer, + EmptyTableRowHeader, + Loader, + LoadingBar, + LoadingCell, + LoadingWrapper, + NoResultsFound, + RowColumnHeader, + RowHeader, + RowHeaderColumn, + RowHeaderSubtitle, + StyledPopoverTrigger, + TimeTableContainer, +} from "./timetable.style"; +import { + CustomPopoverProps, + ROW_BAR_COLOR_SEQUENCE, + ROW_INTERVAL, + RowData, + TimeTableProps, +} from "./types"; + +export const TimeTable = ({ + date, + rowData, + isLoading, + minTime = "00:00", + maxTime = "23:00", + onPage, + ...optionalProps +}: TimeTableProps) => { + // ============================================================================= + // CONST, STATE, REF + // ============================================================================= + const timetableMinTime = CalendarHelper.roundToNearestHour(minTime); + const timetableMaxTime = CalendarHelper.roundToNearestHour(maxTime, true); + const hourlyIntervals = CalendarHelper.generateHourlyIntervals( + timetableMinTime, + timetableMaxTime + ); + const isEmptyContent = optionalProps.totalRecords === 0 || isEmpty(rowData); + const allRecordsLoaded = + isEmptyContent || rowData.length === optionalProps.totalRecords; + const tableContainerRef = useRef(null); + const contentContainerRef = useRef(null); + const [isScrolledX, setIsScrolledX] = useState(false); + const [isScrolledY, setIsScrolledY] = useState(false); + const [intervalWidth, setIntervalWidth] = useState(0); + const [loadMore, setLoadMore] = useState(false); + + // ============================================================================= + // EFFECTS + // ============================================================================= + + useEffect(() => { + const handleScroll = throttle(() => { + if (tableContainerRef.current) { + setIsScrolledX(tableContainerRef.current.scrollLeft > 0); + setIsScrolledY(tableContainerRef.current.scrollTop > 0); + } + + if (loadMore) return; + + const { scrollTop, clientHeight, scrollHeight } = + tableContainerRef.current; + const isEndReached = + Math.ceil(scrollTop + clientHeight) >= scrollHeight; + const shouldLoadMore = + isEndReached && !allRecordsLoaded && onPage && !isLoading; + + if (shouldLoadMore) { + setLoadMore(true); + onPage(); + } + }, 100); + + const tableContainer = tableContainerRef.current; + + if (tableContainer) { + tableContainer.addEventListener("scroll", handleScroll); + } + + return () => { + if (tableContainer) { + tableContainer.removeEventListener("scroll", handleScroll); + } + }; + }, [allRecordsLoaded, loadMore, isLoading, onPage]); + + useEffect(() => { + setLoadMore(false); + }, [rowData]); + + // ============================================================================= + // EVENT HANDLERS + // ============================================================================= + const handleResize = () => { + if (tableContainerRef.current) { + const numberOfIntervalsPerRowBar = Math.ceil( + (hourlyIntervals.length * 60) / ROW_INTERVAL + ); + const tableContainerWidth = + tableContainerRef.current.clientWidth - 252; + const width = + tableContainerWidth / numberOfIntervalsPerRowBar > 21 + ? tableContainerWidth / numberOfIntervalsPerRowBar + : 21; + setIntervalWidth(width); + } + }; + + useResizeDetector({ + onResize: handleResize, + targetRef: tableContainerRef, + refreshMode: "debounce", + refreshRate: 50, + }); + + const handleRowNameClick = (data: RowData, event: React.MouseEvent) => { + if (optionalProps.onNameClick) { + optionalProps.onNameClick(data, event); + } + }; + + // =========================================================================== + // HELPER FUNCTIONS + // =========================================================================== + /** + * Using closures to more efficiently loop through and wrap the color sequencing instead of modding large numbers repeatedly + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#closure + */ + const getColorFromSequence = (() => { + let colorIndex = 0; + const colorSequenceLength = ROW_BAR_COLOR_SEQUENCE.length; + + return () => { + const color = ROW_BAR_COLOR_SEQUENCE[colorIndex]; + colorIndex = (colorIndex + 1) % colorSequenceLength; + return color; + }; + })(); + + const buildPopoverContent = (customPopoverProps: CustomPopoverProps) => { + return ( + + {customPopoverProps.content} + + ); + }; + + const buildPopoverTrigger = (data: RowData, child: JSX.Element) => { + if (!data.rowHeaderCustomPopover) { + return child; + } + + const popoverTriggerProps: PopoverV2TriggerProps = { + position: "bottom-start", + rootNode: tableContainerRef, + offset: data.rowHeaderCustomPopover.offset, + children: child, + trigger: data.rowHeaderCustomPopover.trigger, + delay: data.rowHeaderCustomPopover.delay, + popoverContent: () => + buildPopoverContent(data.rowHeaderCustomPopover), + }; + + return ( + + {child} + + ); + }; + + // ============================================================================= + // RENDER FUNCTIONS + // ============================================================================= + + const ConditionalCellWrapper = ({ + wrapper, + children, + }: { + wrapper: (child: JSX.Element) => JSX.Element; + children: JSX.Element; + }) => { + return wrapper(children); + }; + + const renderRowHeaderColumn = () => { + return ( + <> + {rowData.map((data, index) => { + return ( + + buildPopoverTrigger(data, child) + } + > + + + handleRowNameClick(data, event) + } + weight="semibold" + id={`${data.id}-row-header-title-id`} + data-testid={`${data.id}-row-header-title`} + > + {data.name} + + + + {data.subtitle} + + + + ); + })} + {renderRowHeaderColumnLazyLoad()} + + ); + }; + + const renderRowHeaderColumnLazyLoad = () => { + if (isLoading || !loadMore) return; + return ( + + + + ); + }; + + const renderColumnHeaders = () => { + // Don't render first column if there are no rows + return hourlyIntervals.map((columnHeader: string) => { + return ( + + + {columnHeader} + + + ); + }); + }; + + const renderRowBarData = () => { + if (isLoading) return ; + return ( + + {rowData.map((data, _) => { + return ( + + ); + })} + {renderRowDataLazyLoad()} + + ); + }; + + const renderRowDataLazyLoad = () => { + if (isLoading || !loadMore) return; + return ( + + {hourlyIntervals.map((_, index) => ( + + + + ))} + + ); + }; + + if (isEmptyContent) { + return ( + + + + + {!isLoading ? ( + + ) : ( + + )} + + ); + } + + return ( + + + + + + {renderRowHeaderColumn()} + + + {renderColumnHeaders()} + + {renderRowBarData()} + + ); +}; diff --git a/src/timetable/types.ts b/src/timetable/types.ts new file mode 100644 index 000000000..398a08946 --- /dev/null +++ b/src/timetable/types.ts @@ -0,0 +1,75 @@ +import { PopoverV2TriggerType } from "../popover-v2"; +import { ResourceScheme } from "../theme"; + +export const ROW_BAR_COLOR_SEQUENCE = [ + "#FFE6BB", + "#D8EFEB", + "#E6EAFE", + "#FAE4E5", + "#D3EEFC", +] as const; // Assert to be a readonly tuple +export const ROW_CELL_GAP = 2; +export const ROW_INTERVAL = 15; +export type RowBarColors = (typeof ROW_BAR_COLOR_SEQUENCE)[number]; +export type CellType = "filled" | "blocked" | "default"; + +interface EmptyContentProps { + description: string; + illustrationScheme: ResourceScheme; +} + +export interface RowData { + id: string; + name: string; + rowCells: RowCellData[]; + subtitle?: string | JSX.Element | undefined; + rowHeaderCustomPopover?: CustomPopoverProps; + // HH:mm format, defaults to minTime + rowMinTime?: string; + // HH:mm format, defaults to maxTime + rowMaxTime?: string; +} + +export interface CustomPopoverProps { + trigger: PopoverV2TriggerType; + content: string | JSX.Element; + width?: string | undefined; + padding?: string | undefined; + delay?: { open: number; close: number } | undefined; + offset?: number | undefined; +} + +export interface TimeTableProps { + date: string; + emptyContent: EmptyContentProps; + rowData: RowData[]; + isLoading: boolean; + // HH:mm format + minTime?: string; + // HH:mm format + maxTime?: string; + minDate?: string | undefined; + maxDate?: string | undefined; + totalRecords?: number | undefined; + width?: string | undefined; + height?: string | undefined; + outsideOpHoursCellCustomPopover?: CustomPopoverProps | undefined; + onRefresh?: () => void; + onPage?: () => void; + onLeftArrowClick?: (currentDate: string) => void; + onRightArrowClick?: (currentDate: string) => void; + onNameClick?: (rowData: RowData, e: React.MouseEvent) => void; + onCellClick?: (data: RowCellData, e: React.MouseEvent) => void; +} + +export interface RowCellData { + id: string; + // HH:mm format + startTime: string; + // HH:mm format + endTime: string; + status?: CellType | undefined; + title?: string | undefined; + subtitle?: string | undefined; + customPopover?: CustomPopoverProps | undefined; +} diff --git a/stories/timetable/mock-data.tsx b/stories/timetable/mock-data.tsx new file mode 100644 index 000000000..d57146fdb --- /dev/null +++ b/stories/timetable/mock-data.tsx @@ -0,0 +1,173 @@ +import { Person2Icon, PinIcon } from "@lifesg/react-icons"; +import dayjs, { Dayjs } from "dayjs"; +import styled from "styled-components"; +import { Color } from "../../src/color"; +import { Text } from "../../src/text"; +import { CellType, TimeTableProps } from "../../src/timetable/types"; +import timeTableEvenDays from "./timetable-data-even-days.json"; +import timeTableOddDays from "./timetable-data-odd-days.json"; +import lazyLoadData from "./timetable-lazy-load-data.json"; + +export const StyledHoverContent = styled.div` + display: flex; + align-items: center; + column-gap: 5px; +`; + +const cellTypeMap: Record = { + OCCUPIED: "filled", + DISABLED: "blocked", + DEFAULT: "default", +}; + +const mapper = (resource) => { + return { + id: resource.id, + name: resource.title, + rowMinTime: resource.timelines[0].startTime, + rowMaxTime: resource.timelines[0].endTime, + subtitle: ( + <> + + {resource.capacity} + + ), + rowCells: resource.timelines[0].slots.map((slot) => { + return { + id: slot.id, + startTime: slot.startTime, + endTime: slot.endTime, + title: slot.title, + subtitle: slot.label, + status: cellTypeMap[slot.status], + }; + }), + }; +}; + +const fetchRowData = (date: Dayjs) => { + const isEven = date.day() % 2 === 0; + if (isEven) { + return timeTableEvenDays.resources.map((resource) => mapper(resource)); + } + return timeTableOddDays.resources.map((resource) => mapper(resource)); +}; + +export const getTimeTableData = (currentDate?: string): TimeTableProps => { + const date = dayjs(currentDate); + + return { + date: date.format("YYYY-MM-DD"), + minTime: "06:20:00", + maxTime: "22:00:00", + maxDate: date.add(1, "month").format("YYYY-MM-DD"), + minDate: date.add(-11, "month").format("YYYY-MM-DD"), + totalRecords: 10, + rowData: fetchRowData(date), + emptyContent: { + illustrationScheme: "bookingsg", + description: + "There’s no data to show. You may need to adjust your search or filters. If you believe this is a mistake, try refreshing the page.", + }, + isLoading: false, + }; +}; + +export const lazyLoad = (page: number) => { + const limit = 10; + const pageStart = (page - 1) * limit; + const pageEnd = page * limit; + + const currentPageItems = lazyLoadData.resources.slice(pageStart, pageEnd); + + return currentPageItems.map((resource) => { + return { + id: resource.id, + name: resource.title, + rowMinTime: resource.timelines[0].startTime, + rowMaxTime: resource.timelines[0].endTime, + subtitle: ( + <> + + {resource.capacity} + + ), + rowHeaderHoverContent: ( + <> + {resource.title} + + + + {resource.subtitle} + + + + ), + rowCells: resource.timelines[0].slots.map((slot) => { + return { + id: slot.id, + startTime: slot.startTime, + endTime: slot.endTime, + title: slot.label, + subtitle: slot.label, + status: cellTypeMap[slot.status], + ...(slot.status === "OCCUPIED" && { + filledBlockClickContent: ( +
    + ), + }), + }; + }), + }; + }); +}; diff --git a/stories/timetable/timetable-data-even-days.json b/stories/timetable/timetable-data-even-days.json new file mode 100644 index 000000000..b0f53bbfc --- /dev/null +++ b/stories/timetable/timetable-data-even-days.json @@ -0,0 +1,2214 @@ +{ + "page": 1, + "rowsPerPage": 8, + "totalPages": 2, + "totalRows": 10, + "resources": [ + { + "_provider": "rmbme", + "id": "Dy3E3RvQY0", + "title": "2Hr-interval", + "organisationId": "0B8E79PbpK", + "subtitle": "Eclipse", + "resourceSubtype": "Meeting Room", + "resourceType": "Rooms", + "resourceTypeId": "kd6PRJPJzZ", + "images": [ + "https://mol-dev-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/Dy3E3RvQY0/3be74a40-1932-4a44-b571-59259d3b256c/c988ab16-3dd2-4f17-9f88-c70958f2a338/9fecf77f-e454-4c86-815f-08d9eb2ec8a9_ActiveSG1.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSOOIGMMFT%2F20240819%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240819T052315Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEDUaDmFwLXNvdXRoZWFzdC0xIkcwRQIhAJv2SAwVoSPwMmO2O807cHLgX8nvXY1H0MpDoy8Xc3DzAiA5IPjHSx6AxZHWErHkEIGxCR5DAJUOAJEomVw2sVhw9irqAwg%2BEAIaDDUwMzc3OTU0NDEwMCIMaWFQ1Y1utrGnRt5zKscDV7EQ0Ur1oIbCtKQGh3T3qKebL%2BksKpPUEFIo7Svys2a91MSBqFh7CJiFF%2BZjLPGi10Oz9mg668pEQHde9LPmVNkxwDrYoerHXwW3BgNyNzB4OYuR8Q4C6gWDpr%2Fds5pdyZFHcL2pBoeuD96zyNlXWp368PU0pbB1U0N0Xh9jY4sjEdu%2FnaMFy9zzDEl3upQj3f7XBATFb1jWV0Xqubtd4jPuyBAIc7QAsG6s3na27fdyZQrsoX1tcp44190zOpzY5%2FO51%2BgkrhX0RDNS%2B1gDG6EwME%2FH727Pnzci8OO%2BSIoKdyrIEm4%2BkOpxZpI8SucM98RNE9LRVd%2FItYXtaQNrJjVlYM0IzEHJrJ0qyVLoKbmfEEmgKpTVd7aogdzViI5RGEOts%2BI1eRl2CLOjYRuVYKT6dplep1EYA%2FmeaJWdR4Azg5IWlAvQimZ1lBhUck%2B9qXswbIF%2BBwH2jmu9n9z6Uh7dVeP3enQ95Po8SSoRwJxA4CzMpgYVGS%2B59wTrPY7gAft%2Fdc2fWjIhdRMITTtZad3%2Bhp%2FSyLV14q69J7My44wI94K%2Fj7cCNMXmY6MsJBuFnjkq1%2BFQ%2B5ZZi8%2FweDoSFtGexlagUYEwxqaLtgY6pQFCrOyo2wcQqBHqu9mMp2Yg7FuzJn7o9Pw9LOqbxkEXfMDEdffdSsXnGxHq%2BelGL1YEeM6GAp57B1k6RSngsX%2BACZlVvmCA1oiHq6FLuNdCEefrbI9teD9LzQDZxKEouU4doZyA%2FZEnQi8YWbWJZvd1tluUT%2FRgYhgHhl%2FV%2Bqf3Mk%2FB7bHUJJMCE5UXcz45J4NCvwFUK2qzDRsS6eS4gpgLoHwo1YQ%3D&X-Amz-Signature=2035d9424ac6a7db9a32c53bb056951917339626e209eb442176fb77c3534103&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "", + "availableAfterDays": "", + "capacity": "8", + "additionalDescription": [ + { + "key": "Built-in amenities", + "title": "Built-in amenities", + "items": [ + { + "label": "DVD Player" + }, + { + "label": "LAN Point" + } + ] + }, + { + "key": "Available layouts", + "title": "Available layouts", + "description": "Additional time may be added when checking for availability due to setup and teardown of layout.", + "items": [ + { + "label": "Test createdAt (10 pax)" + } + ] + }, + { + "key": "View layout details", + "title": "View layout details", + "items": [ + { + "label": "Test createdAt (10 pax)", + "description": [ + { + "label": "Setup time", + "value": "15 minutes" + }, + { + "label": "Teardown time", + "value": "15 minutes" + } + ], + "imageUrls": [ + "https://dev.rbs.ccubesg.io/rbs/api/v1/layout/mOkQkkAQYZ/layout-url?path=resource-layouts%2FmOkQkkAQYZ%2F3be74a40-1932-4a44-b571-59259d3b256c%2F2222f4a5-cf01-4f0e-990c-1df31c3f057e%2Foffice%20photo.jpg" + ] + } + ] + } + ], + "timelines": [ + { + "date": "2024-08-19", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "08:15:00", + "status": "OCCUPIED", + "label": "booking owner name", + "title": "booking title" + }, + { + "startTime": "08:15:00", + "endTime": "08:30:00", + "status": "OCCUPIED", + "label": "booking owner name", + "title": "booking title" + }, + { + "startTime": "08:30:00", + "endTime": "08:45:00", + "status": "OCCUPIED", + "label": "booking owner name", + "title": "booking title" + }, + { + "startTime": "08:45:00", + "endTime": "09:00:00", + "status": "OCCUPIED", + "label": "booking owner name", + "title": "booking title" + }, + { + "startTime": "09:30:00", + "endTime": "10:30:00", + "status": "OCCUPIED", + "label": "booking owner name", + "title": "booking title" + }, + { + "startTime": "10:45:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "booking owner name", + "title": "booking title" + }, + { + "startTime": "11:00:00", + "endTime": "11:30:00", + "status": "OCCUPIED", + "label": "booking owner name", + "title": "booking title" + }, + { + "startTime": "16:00:00", + "endTime": "16:30:00", + "status": "OCCUPIED", + "label": "booking owner name", + "title": "booking title" + } + ], + "startTime": "08:00:00", + "endTime": "16:30:00", + "interval": 120 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/Dy3E3RvQY0?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=Dy3E3RvQY0&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/Dy3E3RvQY0?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=Dy3E3RvQY0&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "ZlJQyXWP6z", + "title": "4 Hr interval", + "organisationId": "0B8E79PbpK", + "subtitle": "Eclipse", + "resourceSubtype": "Meeting Room", + "resourceType": "Rooms", + "resourceTypeId": "kd6PRJPJzZ", + "images": [ + "https://mol-dev-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/ZlJQyXWP6z/3be74a40-1932-4a44-b571-59259d3b256c/a2b46cf3-c488-4f63-a3d2-cbdf2300af76/9fecf77f-e454-4c86-815f-08d9eb2ec8a9_ActiveSG1.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSOOIGMMFT%2F20240819%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240819T052315Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEDUaDmFwLXNvdXRoZWFzdC0xIkcwRQIhAJv2SAwVoSPwMmO2O807cHLgX8nvXY1H0MpDoy8Xc3DzAiA5IPjHSx6AxZHWErHkEIGxCR5DAJUOAJEomVw2sVhw9irqAwg%2BEAIaDDUwMzc3OTU0NDEwMCIMaWFQ1Y1utrGnRt5zKscDV7EQ0Ur1oIbCtKQGh3T3qKebL%2BksKpPUEFIo7Svys2a91MSBqFh7CJiFF%2BZjLPGi10Oz9mg668pEQHde9LPmVNkxwDrYoerHXwW3BgNyNzB4OYuR8Q4C6gWDpr%2Fds5pdyZFHcL2pBoeuD96zyNlXWp368PU0pbB1U0N0Xh9jY4sjEdu%2FnaMFy9zzDEl3upQj3f7XBATFb1jWV0Xqubtd4jPuyBAIc7QAsG6s3na27fdyZQrsoX1tcp44190zOpzY5%2FO51%2BgkrhX0RDNS%2B1gDG6EwME%2FH727Pnzci8OO%2BSIoKdyrIEm4%2BkOpxZpI8SucM98RNE9LRVd%2FItYXtaQNrJjVlYM0IzEHJrJ0qyVLoKbmfEEmgKpTVd7aogdzViI5RGEOts%2BI1eRl2CLOjYRuVYKT6dplep1EYA%2FmeaJWdR4Azg5IWlAvQimZ1lBhUck%2B9qXswbIF%2BBwH2jmu9n9z6Uh7dVeP3enQ95Po8SSoRwJxA4CzMpgYVGS%2B59wTrPY7gAft%2Fdc2fWjIhdRMITTtZad3%2Bhp%2FSyLV14q69J7My44wI94K%2Fj7cCNMXmY6MsJBuFnjkq1%2BFQ%2B5ZZi8%2FweDoSFtGexlagUYEwxqaLtgY6pQFCrOyo2wcQqBHqu9mMp2Yg7FuzJn7o9Pw9LOqbxkEXfMDEdffdSsXnGxHq%2BelGL1YEeM6GAp57B1k6RSngsX%2BACZlVvmCA1oiHq6FLuNdCEefrbI9teD9LzQDZxKEouU4doZyA%2FZEnQi8YWbWJZvd1tluUT%2FRgYhgHhl%2FV%2Bqf3Mk%2FB7bHUJJMCE5UXcz45J4NCvwFUK2qzDRsS6eS4gpgLoHwo1YQ%3D&X-Amz-Signature=6ab9c75269a4b5759ee55a3b9d05fa27b76f27528d87c2f9354c1f067234541e&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "12", + "availableAfterDays": "", + "capacity": "16", + "additionalDescription": [], + "timelines": [ + { + "date": "2024-08-19", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "16:00:00", + "status": "OCCUPIED", + "label": "booking owner name", + "title": "booking title" + }, + { + "startTime": "16:00:00", + "endTime": "20:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 240 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/ZlJQyXWP6z?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=ZlJQyXWP6z&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/ZlJQyXWP6z?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=ZlJQyXWP6z&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "9znPmRxQBv", + "title": "acs", + "organisationId": "0B8E79PbpK", + "subtitle": "City", + "resourceSubtype": "[E2E]Room Type 1", + "resourceType": "Rooms", + "resourceTypeId": "kd6PRJPJzZ", + "images": [ + "https://mol-dev-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/9znPmRxQBv/3be74a40-1932-4a44-b571-59259d3b256c/4b9a9679-2004-44c0-bad2-9bc36aec0519/Screenshot%202024-03-19%20at%209.44.51%20AMScreenshot%202024-03-19%20at%209.44.51%20AMScreenshot%202024-03-19%20at%209.44.51%20AMScreenshot%202024-03-19%20at%209.44.51%20AMScreenshot%202024-03-19%20at%209.44.51%20AMScreenshot%202024-03-19%20at%209.44.51%20AMScreenshot%202024-03-19%20at%209.44.51%20AM.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSOOIGMMFT%2F20240819%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240819T052315Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEDUaDmFwLXNvdXRoZWFzdC0xIkcwRQIhAJv2SAwVoSPwMmO2O807cHLgX8nvXY1H0MpDoy8Xc3DzAiA5IPjHSx6AxZHWErHkEIGxCR5DAJUOAJEomVw2sVhw9irqAwg%2BEAIaDDUwMzc3OTU0NDEwMCIMaWFQ1Y1utrGnRt5zKscDV7EQ0Ur1oIbCtKQGh3T3qKebL%2BksKpPUEFIo7Svys2a91MSBqFh7CJiFF%2BZjLPGi10Oz9mg668pEQHde9LPmVNkxwDrYoerHXwW3BgNyNzB4OYuR8Q4C6gWDpr%2Fds5pdyZFHcL2pBoeuD96zyNlXWp368PU0pbB1U0N0Xh9jY4sjEdu%2FnaMFy9zzDEl3upQj3f7XBATFb1jWV0Xqubtd4jPuyBAIc7QAsG6s3na27fdyZQrsoX1tcp44190zOpzY5%2FO51%2BgkrhX0RDNS%2B1gDG6EwME%2FH727Pnzci8OO%2BSIoKdyrIEm4%2BkOpxZpI8SucM98RNE9LRVd%2FItYXtaQNrJjVlYM0IzEHJrJ0qyVLoKbmfEEmgKpTVd7aogdzViI5RGEOts%2BI1eRl2CLOjYRuVYKT6dplep1EYA%2FmeaJWdR4Azg5IWlAvQimZ1lBhUck%2B9qXswbIF%2BBwH2jmu9n9z6Uh7dVeP3enQ95Po8SSoRwJxA4CzMpgYVGS%2B59wTrPY7gAft%2Fdc2fWjIhdRMITTtZad3%2Bhp%2FSyLV14q69J7My44wI94K%2Fj7cCNMXmY6MsJBuFnjkq1%2BFQ%2B5ZZi8%2FweDoSFtGexlagUYEwxqaLtgY6pQFCrOyo2wcQqBHqu9mMp2Yg7FuzJn7o9Pw9LOqbxkEXfMDEdffdSsXnGxHq%2BelGL1YEeM6GAp57B1k6RSngsX%2BACZlVvmCA1oiHq6FLuNdCEefrbI9teD9LzQDZxKEouU4doZyA%2FZEnQi8YWbWJZvd1tluUT%2FRgYhgHhl%2FV%2Bqf3Mk%2FB7bHUJJMCE5UXcz45J4NCvwFUK2qzDRsS6eS4gpgLoHwo1YQ%3D&X-Amz-Signature=ee8323f7150b897fb80a2edb1370a58947d25350f4bd77901e3dd37cb07cd4bc&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "30", + "availableAfterDays": "", + "capacity": "4", + "additionalDescription": [ + { + "key": "Additional amenities", + "title": "Additional services", + "description": "Only available upon request.", + "items": [ + { + "label": "002d37f7d618-test" + } + ] + }, + { + "key": "Available layouts", + "title": "Available layouts", + "description": "Additional time may be added when checking for availability due to setup and teardown of layout.", + "items": [ + { + "label": "layout x (4 pax)" + } + ] + }, + { + "key": "View layout details", + "title": "View layout details", + "items": [ + { + "label": "layout x (4 pax)", + "description": [ + { + "label": "Setup time", + "value": "15 minutes" + }, + { + "label": "Teardown time", + "value": "15 minutes" + } + ] + } + ] + } + ], + "timelines": [ + { + "date": "2024-08-19", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "13:00:00", + "status": "OCCUPIED" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "OCCUPIED" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00:00", + "endTime": "21:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "21:00:00", + "interval": 60 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/9znPmRxQBv?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=9znPmRxQBv&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/9znPmRxQBv?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=9znPmRxQBv&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "B8E79Z6Pbp", + "title": "Fixed Session Resource1", + "organisationId": "0B8E79PbpK", + "subtitle": "Eclipse", + "resourceSubtype": "Meeting Room", + "resourceType": "Rooms", + "resourceTypeId": "kd6PRJPJzZ", + "images": [ + "https://mol-dev-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/B8E79Z6Pbp/3be74a40-1932-4a44-b571-59259d3b256c/b782ddaa-65a4-46a9-a6e5-42d9753f100b/jagabee_stik.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSG3HXRZB6%2F20240904%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240904T053142Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELb%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLXNvdXRoZWFzdC0xIkYwRAIgDwWdoPPRGUkF1Xr9DCkR1zgC%2BBuswSfwuvYoMm8%2Ba48CICRBaUNXTVGdXcsIa4YUIV7A8Z1vYKYHKkH1Cy9aYngmKvMDCM%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQAhoMNTAzNzc5NTQ0MTAwIgyKZ0dmAk0xnfTAzCQqxwMbp9YqdBCEwz7tSyhmZ1xIdWAsD52yCyNw5%2FaMR6YWKeJHHyJb8kgWvuOt2p1LWLSi2N2JzhdguFIDRlBcby%2BHxzQ%2FUXZRBd9bz9CZN0XIhCh5Znmck1KLzuzO5uDJgfPYG1Fs71DNo2sK5HIfbHJnE5fNQwht5P68cbAnZ4PSLkBgJbnU09mU6AxhJmOlssURyKcyCKoNAfjpBv3HLwQwADBh6cf4rwIR0T4HYV31Z5wvvRufp4pQezWL6x6fLNKTuxl94lpraooooGU0imMqg0XWh1Hg86tXESl0mV3nz2xfHBVAcked3gixp9K%2BZASuy90sKZaMK%2FKH3HnG8tEI8Ih%2FUthiE47f6ylthOHaRfzr%2FPLSPQo5aeH0hMq%2BzFu10oS0YCZZBgUHRFiaghWKCzgxqmiUSZoc7ABqqR5%2BdTVwy9XgdcQQgmsFYdjaDBbedUA3Bfy6BjYub%2FLPcYlITqCnQQjpxGMkPpBRBnzxHIquTTrL1kQ8%2BEgbVqMJLg5W0UItqwLPV4kP88HIbbjqQb3Tfd%2Fc7le3G%2BlWhCaE3p8sIVwiymCARjhBxWUiGAlg3j6HGXKHGzWxGRK0Rl1oUYR09kSMITCv39%2B2BjqmAQgIDZfwIghilh3PXOP3eqbc5KQ0CrIJECqfRHGW8%2BZV8nh5RHcnA4iCo%2FgqXIZ0bqucKOMn2LEosCPjD62FkDaTnKw4n9OmePfUBRQEi3etlVN6YgXAyhxH6hX931uI8FKdlK%2B4oP2blLsSHPzFx%2FLZbh0Fpim7EszB4A63Yeq%2FvZ8prv8IQB75R0UlXX23nmlznmhnbqSf%2F4E7B2jQ5JU%2FIR79XBc%3D&X-Amz-Signature=cf58bfb464bf84e43096aa85073cfb5c6f6101b9b67542f4d746903ef5bbb212&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "30", + "availableAfterDays": "", + "capacity": "3", + "additionalDescription": [], + "timelines": [ + { + "date": "2024-09-04", + "disabled": false, + "slots": [ + { + "startTime": "10:00", + "endTime": "12:00", + "status": "OCCUPIED" + }, + { + "startTime": "15:00", + "endTime": "17:00", + "status": "DEFAULT" + } + ], + "startTime": "10:00", + "endTime": "17:00" + } + ], + "itemTemplate": "rooms-fixedSessions", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/B8E79Z6Pbp?date=2024-09-04&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=B8E79Z6Pbp&selectedDate=2024-09-04&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/B8E79Z6Pbp?date=2024-09-04&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=B8E79Z6Pbp&selectedDate=2024-09-04&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "bJxrj7JPqL", + "title": "Apple", + "organisationId": "0B8E79PbpK", + "subtitle": "Eclipse", + "resourceSubtype": "Meeting Room", + "resourceType": "Rooms", + "resourceTypeId": "kd6PRJPJzZ", + "images": [ + "https://mol-dev-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/bJxrj7JPqL/3be74a40-1932-4a44-b571-59259d3b256c/a3a8618a-8be3-4d59-bb75-71962e4e9ff3/hachi.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSOOIGMMFT%2F20240819%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240819T052315Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEDUaDmFwLXNvdXRoZWFzdC0xIkcwRQIhAJv2SAwVoSPwMmO2O807cHLgX8nvXY1H0MpDoy8Xc3DzAiA5IPjHSx6AxZHWErHkEIGxCR5DAJUOAJEomVw2sVhw9irqAwg%2BEAIaDDUwMzc3OTU0NDEwMCIMaWFQ1Y1utrGnRt5zKscDV7EQ0Ur1oIbCtKQGh3T3qKebL%2BksKpPUEFIo7Svys2a91MSBqFh7CJiFF%2BZjLPGi10Oz9mg668pEQHde9LPmVNkxwDrYoerHXwW3BgNyNzB4OYuR8Q4C6gWDpr%2Fds5pdyZFHcL2pBoeuD96zyNlXWp368PU0pbB1U0N0Xh9jY4sjEdu%2FnaMFy9zzDEl3upQj3f7XBATFb1jWV0Xqubtd4jPuyBAIc7QAsG6s3na27fdyZQrsoX1tcp44190zOpzY5%2FO51%2BgkrhX0RDNS%2B1gDG6EwME%2FH727Pnzci8OO%2BSIoKdyrIEm4%2BkOpxZpI8SucM98RNE9LRVd%2FItYXtaQNrJjVlYM0IzEHJrJ0qyVLoKbmfEEmgKpTVd7aogdzViI5RGEOts%2BI1eRl2CLOjYRuVYKT6dplep1EYA%2FmeaJWdR4Azg5IWlAvQimZ1lBhUck%2B9qXswbIF%2BBwH2jmu9n9z6Uh7dVeP3enQ95Po8SSoRwJxA4CzMpgYVGS%2B59wTrPY7gAft%2Fdc2fWjIhdRMITTtZad3%2Bhp%2FSyLV14q69J7My44wI94K%2Fj7cCNMXmY6MsJBuFnjkq1%2BFQ%2B5ZZi8%2FweDoSFtGexlagUYEwxqaLtgY6pQFCrOyo2wcQqBHqu9mMp2Yg7FuzJn7o9Pw9LOqbxkEXfMDEdffdSsXnGxHq%2BelGL1YEeM6GAp57B1k6RSngsX%2BACZlVvmCA1oiHq6FLuNdCEefrbI9teD9LzQDZxKEouU4doZyA%2FZEnQi8YWbWJZvd1tluUT%2FRgYhgHhl%2FV%2Bqf3Mk%2FB7bHUJJMCE5UXcz45J4NCvwFUK2qzDRsS6eS4gpgLoHwo1YQ%3D&X-Amz-Signature=bf0bae5559a13510eac9f528777a29eb41f3430037105256273a30662778b8ab&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": true + }, + "unavailableAfterDays": "", + "availableAfterDays": "", + "capacity": "6", + "additionalDescription": [ + { + "key": "Booking usage", + "title": "Booking usage", + "items": [ + { + "label": "Meeting" + } + ] + }, + { + "key": "Additional amenities", + "title": "Additional services", + "description": "Only available upon request.", + "items": [ + { + "label": "MC Services" + }, + { + "label": "002d37f7d618-test" + }, + { + "label": "Barista Services" + }, + { + "label": "Coffee" + }, + { + "label": "a" + } + ] + }, + { + "key": "Available layouts", + "title": "Available layouts", + "description": "Additional time may be added when checking for availability due to setup and teardown of layout.", + "items": [ + { + "label": "Default (5 pax)" + }, + { + "label": "tt (1 pax)" + }, + { + "label": "With setup time (10 pax)" + } + ] + }, + { + "key": "View layout details", + "title": "View layout details", + "items": [ + { + "label": "Default (5 pax)", + "description": [ + { + "label": "Setup time", + "value": "None" + }, + { + "label": "Teardown time", + "value": "None" + } + ], + "imageUrls": [ + "https://dev.rbs.ccubesg.io/rbs/api/v1/layout/Dy3E38OrY0/layout-url?path=resource-layouts%2FDy3E38OrY0%2F3be74a40-1932-4a44-b571-59259d3b256c%2F71193987-ece6-4351-b25f-410851a72daf%2Ftest%20with%20white%20space.png" + ] + }, + { + "label": "tt (1 pax)", + "description": [ + { + "label": "Setup time", + "value": "None" + }, + { + "label": "Teardown time", + "value": "None" + } + ], + "imageUrls": [ + "https://dev.rbs.ccubesg.io/rbs/api/v1/layout/B0XrnDmQmz/layout-url?path=resource-layouts%2FB0XrnDmQmz%2F3be74a40-1932-4a44-b571-59259d3b256c%2Fafe6d37a-2cb6-402d-a8e8-ed5c1afc58ef%2Fwaffle.png" + ] + }, + { + "label": "With setup time (10 pax)", + "description": [ + { + "label": "Setup time", + "value": "30 minutes" + }, + { + "label": "Teardown time", + "value": "30 minutes" + } + ], + "imageUrls": [ + "https://dev.rbs.ccubesg.io/rbs/api/v1/layout/5oJQMZGERj/layout-url?path=resource-layouts%2F5oJQMZGERj%2F3be74a40-1932-4a44-b571-59259d3b256c%2F376de4ea-c825-4eac-a947-aca2c4430012%2F769aacaa-f20a-40af-8eab-65d15bbb7c09.jpg" + ] + } + ] + } + ], + "timelines": [ + { + "date": "2024-08-19", + "disabled": false, + "slots": [ + { + "startTime": "08:00", + "endTime": "08:30", + "status": "DEFAULT" + }, + { + "startTime": "08:30", + "endTime": "09:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00", + "endTime": "09:30", + "status": "DEFAULT" + }, + { + "startTime": "09:30", + "endTime": "10:00", + "status": "OCCUPIED" + }, + { + "startTime": "10:00", + "endTime": "10:30", + "status": "OCCUPIED" + }, + { + "startTime": "10:30", + "endTime": "11:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00", + "endTime": "13:30", + "status": "DEFAULT" + }, + { + "startTime": "13:30", + "endTime": "14:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00", + "endTime": "14:30", + "status": "DISABLED" + }, + { + "startTime": "14:30", + "endTime": "15:00", + "status": "DISABLED" + }, + { + "startTime": "15:00", + "endTime": "15:30", + "status": "OCCUPIED" + }, + { + "startTime": "15:30", + "endTime": "16:00", + "status": "OCCUPIED" + }, + { + "startTime": "16:00", + "endTime": "16:30", + "status": "OCCUPIED" + }, + { + "startTime": "16:30", + "endTime": "17:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00", + "endTime": "17:30", + "status": "DEFAULT" + }, + { + "startTime": "17:30", + "endTime": "18:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00", + "endTime": "18:00" + } + ], + "itemTemplate": "rooms-fixedSessions", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/bJxrj7JPqL?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=bJxrj7JPqL&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/bJxrj7JPqL?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=bJxrj7JPqL&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "mx0Ex4xE9Y", + "title": "apple+dragonfruit", + "organisationId": "0B8E79PbpK", + "subtitle": "Eclipse", + "resourceSubtype": "Meeting Room", + "resourceType": "Rooms", + "resourceTypeId": "kd6PRJPJzZ", + "images": [ + "https://mol-dev-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/mx0Ex4xE9Y/3be74a40-1932-4a44-b571-59259d3b256c/e0f84078-9e75-4136-9829-44fc3cb8f52f/9fecf77f-e454-4c86-815f-08d9eb2ec8a9_ActiveSG1.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSOOIGMMFT%2F20240819%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240819T052315Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEDUaDmFwLXNvdXRoZWFzdC0xIkcwRQIhAJv2SAwVoSPwMmO2O807cHLgX8nvXY1H0MpDoy8Xc3DzAiA5IPjHSx6AxZHWErHkEIGxCR5DAJUOAJEomVw2sVhw9irqAwg%2BEAIaDDUwMzc3OTU0NDEwMCIMaWFQ1Y1utrGnRt5zKscDV7EQ0Ur1oIbCtKQGh3T3qKebL%2BksKpPUEFIo7Svys2a91MSBqFh7CJiFF%2BZjLPGi10Oz9mg668pEQHde9LPmVNkxwDrYoerHXwW3BgNyNzB4OYuR8Q4C6gWDpr%2Fds5pdyZFHcL2pBoeuD96zyNlXWp368PU0pbB1U0N0Xh9jY4sjEdu%2FnaMFy9zzDEl3upQj3f7XBATFb1jWV0Xqubtd4jPuyBAIc7QAsG6s3na27fdyZQrsoX1tcp44190zOpzY5%2FO51%2BgkrhX0RDNS%2B1gDG6EwME%2FH727Pnzci8OO%2BSIoKdyrIEm4%2BkOpxZpI8SucM98RNE9LRVd%2FItYXtaQNrJjVlYM0IzEHJrJ0qyVLoKbmfEEmgKpTVd7aogdzViI5RGEOts%2BI1eRl2CLOjYRuVYKT6dplep1EYA%2FmeaJWdR4Azg5IWlAvQimZ1lBhUck%2B9qXswbIF%2BBwH2jmu9n9z6Uh7dVeP3enQ95Po8SSoRwJxA4CzMpgYVGS%2B59wTrPY7gAft%2Fdc2fWjIhdRMITTtZad3%2Bhp%2FSyLV14q69J7My44wI94K%2Fj7cCNMXmY6MsJBuFnjkq1%2BFQ%2B5ZZi8%2FweDoSFtGexlagUYEwxqaLtgY6pQFCrOyo2wcQqBHqu9mMp2Yg7FuzJn7o9Pw9LOqbxkEXfMDEdffdSsXnGxHq%2BelGL1YEeM6GAp57B1k6RSngsX%2BACZlVvmCA1oiHq6FLuNdCEefrbI9teD9LzQDZxKEouU4doZyA%2FZEnQi8YWbWJZvd1tluUT%2FRgYhgHhl%2FV%2Bqf3Mk%2FB7bHUJJMCE5UXcz45J4NCvwFUK2qzDRsS6eS4gpgLoHwo1YQ%3D&X-Amz-Signature=a79860558fe680db2db7cd6882eed2788be9efb372135f22fd1d848e778f953b&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "12", + "availableAfterDays": "", + "capacity": "10", + "additionalDescription": [ + { + "key": "Built-in amenities", + "title": "Built-in amenities", + "items": [ + { + "label": "Common built-in amenity" + }, + { + "label": "Chairs (Additional)" + }, + { + "label": "Phone phone" + } + ] + } + ], + "timelines": [ + { + "date": "2024-08-19", + "disabled": false, + "slots": [ + { + "startTime": "08:00", + "endTime": "09:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00", + "endTime": "10:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00", + "endTime": "11:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00", + "endTime": "12:00", + "status": "DEFAULT" + }, + { + "id": "jingzhi-id", + "startTime": "13:00", + "endTime": "14:00", + "status": "OCCUPIED", + "label": "Jing Zhi", + "action": [ + { + "type": "SHOW_MODAL", + "continueOnError": true, + "payload": { + "message": "", + "cancelActionLabel": "", + "renderContent": { + "type": "html", + "html": "

    Booking details for apple+dragonfruit

    19 Aug 2024, Mon 1:00pm - 2:00pm

    Eclipse

    Status

    Confirmed

    Booking owner

    Jing Zhi

    jingzhi.t_dcube@scientecpeople.com

    Booking title

    Test Combined Reschedule

    " + }, + "confirmActionLabel": "Close" + } + } + ] + }, + { + "startTime": "14:00", + "endTime": "15:00", + "status": "OCCUPIED", + "label": "Jing Zhi", + "action": [ + { + "type": "SHOW_MODAL", + "continueOnError": true, + "payload": { + "message": "", + "cancelActionLabel": "", + "renderContent": { + "type": "html", + "html": "

    Booking details for apple+dragonfruit

    19 Aug 2024, Mon 2:00pm - 3:00pm

    Eclipse

    Status

    Confirmed

    Booking owner

    Jing Zhi

    jingzhi.t_dcube@scientecpeople.com

    Booking title

    Test1235125

    " + }, + "confirmActionLabel": "Close" + } + } + ] + }, + { + "startTime": "15:00", + "endTime": "16:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00", + "endTime": "17:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00", + "endTime": "18:00", + "status": "DISABLED" + }, + { + "startTime": "18:00", + "endTime": "19:00", + "status": "OCCUPIED", + "label": "" + }, + { + "startTime": "19:00", + "endTime": "20:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00", + "endTime": "21:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00", + "endTime": "22:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00", + "endTime": "22:00" + } + ], + "itemTemplate": "rooms-fixedSessions", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/mx0Ex4xE9Y?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=mx0Ex4xE9Y&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/mx0Ex4xE9Y?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=mx0Ex4xE9Y&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "RBP5eeePm6", + "title": "Coconut", + "organisationId": "0B8E79PbpK", + "subtitle": "Eclipse", + "resourceSubtype": "Meeting Room", + "resourceType": "Rooms", + "resourceTypeId": "kd6PRJPJzZ", + "images": [ + "https://mol-dev-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/RBP5eeePm6/3be74a40-1932-4a44-b571-59259d3b256c/0fae6789-9237-4306-bb33-db6d0af75b04/Double19.PNG%20%281%29.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSOOIGMMFT%2F20240819%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240819T052315Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEDUaDmFwLXNvdXRoZWFzdC0xIkcwRQIhAJv2SAwVoSPwMmO2O807cHLgX8nvXY1H0MpDoy8Xc3DzAiA5IPjHSx6AxZHWErHkEIGxCR5DAJUOAJEomVw2sVhw9irqAwg%2BEAIaDDUwMzc3OTU0NDEwMCIMaWFQ1Y1utrGnRt5zKscDV7EQ0Ur1oIbCtKQGh3T3qKebL%2BksKpPUEFIo7Svys2a91MSBqFh7CJiFF%2BZjLPGi10Oz9mg668pEQHde9LPmVNkxwDrYoerHXwW3BgNyNzB4OYuR8Q4C6gWDpr%2Fds5pdyZFHcL2pBoeuD96zyNlXWp368PU0pbB1U0N0Xh9jY4sjEdu%2FnaMFy9zzDEl3upQj3f7XBATFb1jWV0Xqubtd4jPuyBAIc7QAsG6s3na27fdyZQrsoX1tcp44190zOpzY5%2FO51%2BgkrhX0RDNS%2B1gDG6EwME%2FH727Pnzci8OO%2BSIoKdyrIEm4%2BkOpxZpI8SucM98RNE9LRVd%2FItYXtaQNrJjVlYM0IzEHJrJ0qyVLoKbmfEEmgKpTVd7aogdzViI5RGEOts%2BI1eRl2CLOjYRuVYKT6dplep1EYA%2FmeaJWdR4Azg5IWlAvQimZ1lBhUck%2B9qXswbIF%2BBwH2jmu9n9z6Uh7dVeP3enQ95Po8SSoRwJxA4CzMpgYVGS%2B59wTrPY7gAft%2Fdc2fWjIhdRMITTtZad3%2Bhp%2FSyLV14q69J7My44wI94K%2Fj7cCNMXmY6MsJBuFnjkq1%2BFQ%2B5ZZi8%2FweDoSFtGexlagUYEwxqaLtgY6pQFCrOyo2wcQqBHqu9mMp2Yg7FuzJn7o9Pw9LOqbxkEXfMDEdffdSsXnGxHq%2BelGL1YEeM6GAp57B1k6RSngsX%2BACZlVvmCA1oiHq6FLuNdCEefrbI9teD9LzQDZxKEouU4doZyA%2FZEnQi8YWbWJZvd1tluUT%2FRgYhgHhl%2FV%2Bqf3Mk%2FB7bHUJJMCE5UXcz45J4NCvwFUK2qzDRsS6eS4gpgLoHwo1YQ%3D&X-Amz-Signature=330bd9d1ae1640873d8e6628fd5797a8f32d447110e6d24f40f309e6c6f490a0&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": true + }, + "unavailableAfterDays": "120", + "availableAfterDays": "", + "capacity": "12", + "additionalDescription": [], + "timelines": [ + { + "date": "2024-08-19", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "08:15:00", + "status": "DEFAULT" + }, + { + "startTime": "08:15:00", + "endTime": "08:30:00", + "status": "DEFAULT" + }, + { + "startTime": "08:30:00", + "endTime": "08:45:00", + "status": "DEFAULT" + }, + { + "startTime": "08:45:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "DEFAULT" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "DEFAULT" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "DEFAULT" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "10:15:00", + "status": "DEFAULT" + }, + { + "startTime": "10:15:00", + "endTime": "10:30:00", + "status": "DEFAULT" + }, + { + "startTime": "10:30:00", + "endTime": "10:45:00", + "status": "DEFAULT" + }, + { + "startTime": "10:45:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "11:15:00", + "status": "DEFAULT" + }, + { + "startTime": "11:15:00", + "endTime": "11:30:00", + "status": "DEFAULT" + }, + { + "startTime": "11:30:00", + "endTime": "11:45:00", + "status": "DEFAULT" + }, + { + "startTime": "11:45:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DISABLED" + }, + { + "startTime": "13:00:00", + "endTime": "13:15:00", + "status": "DEFAULT" + }, + { + "startTime": "13:15:00", + "endTime": "13:30:00", + "status": "DEFAULT" + }, + { + "startTime": "13:30:00", + "endTime": "13:45:00", + "status": "DEFAULT" + }, + { + "startTime": "13:45:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "14:15:00", + "status": "DEFAULT" + }, + { + "startTime": "14:15:00", + "endTime": "14:30:00", + "status": "DEFAULT" + }, + { + "startTime": "14:30:00", + "endTime": "14:45:00", + "status": "DEFAULT" + }, + { + "startTime": "14:45:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "16:30:00", + "status": "OCCUPIED", + "label": "booking label" + }, + { + "startTime": "16:30:00", + "endTime": "16:45:00", + "status": "DEFAULT" + }, + { + "startTime": "16:45:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "17:15:00", + "status": "DEFAULT" + }, + { + "startTime": "17:15:00", + "endTime": "17:30:00", + "status": "DEFAULT" + }, + { + "startTime": "17:30:00", + "endTime": "17:45:00", + "status": "DEFAULT" + }, + { + "startTime": "17:45:00", + "endTime": "18:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 15 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/RBP5eeePm6?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=RBP5eeePm6&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/RBP5eeePm6?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=RBP5eeePm6&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "DAPBjGgPqd", + "title": "Coconut Approval Required", + "organisationId": "0B8E79PbpK", + "subtitle": "GovTech Headquarters", + "resourceSubtype": "Meeting Room", + "resourceType": "Rooms", + "resourceTypeId": "kd6PRJPJzZ", + "images": [ + "https://mol-dev-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/DAPBjGgPqd/3be74a40-1932-4a44-b571-59259d3b256c/febf8918-25be-437a-bc7c-33abc09b63e6/Double19.PNG%20%281%29.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSOOIGMMFT%2F20240819%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240819T052315Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEDUaDmFwLXNvdXRoZWFzdC0xIkcwRQIhAJv2SAwVoSPwMmO2O807cHLgX8nvXY1H0MpDoy8Xc3DzAiA5IPjHSx6AxZHWErHkEIGxCR5DAJUOAJEomVw2sVhw9irqAwg%2BEAIaDDUwMzc3OTU0NDEwMCIMaWFQ1Y1utrGnRt5zKscDV7EQ0Ur1oIbCtKQGh3T3qKebL%2BksKpPUEFIo7Svys2a91MSBqFh7CJiFF%2BZjLPGi10Oz9mg668pEQHde9LPmVNkxwDrYoerHXwW3BgNyNzB4OYuR8Q4C6gWDpr%2Fds5pdyZFHcL2pBoeuD96zyNlXWp368PU0pbB1U0N0Xh9jY4sjEdu%2FnaMFy9zzDEl3upQj3f7XBATFb1jWV0Xqubtd4jPuyBAIc7QAsG6s3na27fdyZQrsoX1tcp44190zOpzY5%2FO51%2BgkrhX0RDNS%2B1gDG6EwME%2FH727Pnzci8OO%2BSIoKdyrIEm4%2BkOpxZpI8SucM98RNE9LRVd%2FItYXtaQNrJjVlYM0IzEHJrJ0qyVLoKbmfEEmgKpTVd7aogdzViI5RGEOts%2BI1eRl2CLOjYRuVYKT6dplep1EYA%2FmeaJWdR4Azg5IWlAvQimZ1lBhUck%2B9qXswbIF%2BBwH2jmu9n9z6Uh7dVeP3enQ95Po8SSoRwJxA4CzMpgYVGS%2B59wTrPY7gAft%2Fdc2fWjIhdRMITTtZad3%2Bhp%2FSyLV14q69J7My44wI94K%2Fj7cCNMXmY6MsJBuFnjkq1%2BFQ%2B5ZZi8%2FweDoSFtGexlagUYEwxqaLtgY6pQFCrOyo2wcQqBHqu9mMp2Yg7FuzJn7o9Pw9LOqbxkEXfMDEdffdSsXnGxHq%2BelGL1YEeM6GAp57B1k6RSngsX%2BACZlVvmCA1oiHq6FLuNdCEefrbI9teD9LzQDZxKEouU4doZyA%2FZEnQi8YWbWJZvd1tluUT%2FRgYhgHhl%2FV%2Bqf3Mk%2FB7bHUJJMCE5UXcz45J4NCvwFUK2qzDRsS6eS4gpgLoHwo1YQ%3D&X-Amz-Signature=f42fdd1ee37cb8c85b6aa1b12299c8cac79026a1b649037cffd835bdfcbfc350&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": true, + "Manual start": true + }, + "unavailableAfterDays": "30", + "availableAfterDays": "", + "capacity": "12", + "additionalDescription": [], + "timelines": [ + { + "date": "2024-08-19", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "16:30:00", + "status": "OCCUPIED", + "label": "a very long booking text that spans across the entire universe beyond the horizon into the blackhole transcending time and space" + }, + { + "startTime": "16:30:00", + "endTime": "16:45:00", + "status": "DEFAULT" + }, + { + "startTime": "16:45:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "17:15:00", + "status": "DEFAULT" + }, + { + "startTime": "17:15:00", + "endTime": "17:30:00", + "status": "DEFAULT" + }, + { + "startTime": "17:30:00", + "endTime": "17:45:00", + "status": "DEFAULT" + }, + { + "startTime": "17:45:00", + "endTime": "18:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 15 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/DAPBjGgPqd?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=DAPBjGgPqd&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/DAPBjGgPqd?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=DAPBjGgPqd&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "ajlEo56PqA", + "title": "Default test", + "organisationId": "0B8E79PbpK", + "subtitle": "Eclipse", + "resourceSubtype": "Meeting Room", + "resourceType": "Rooms", + "resourceTypeId": "kd6PRJPJzZ", + "images": [ + "https://mol-dev-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/ajlEo56PqA/3be74a40-1932-4a44-b571-59259d3b256c/7e6e379a-2318-4b9c-885b-df45c47b926e/Square_-_black_simple.svg.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSOOIGMMFT%2F20240819%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240819T052315Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEDUaDmFwLXNvdXRoZWFzdC0xIkcwRQIhAJv2SAwVoSPwMmO2O807cHLgX8nvXY1H0MpDoy8Xc3DzAiA5IPjHSx6AxZHWErHkEIGxCR5DAJUOAJEomVw2sVhw9irqAwg%2BEAIaDDUwMzc3OTU0NDEwMCIMaWFQ1Y1utrGnRt5zKscDV7EQ0Ur1oIbCtKQGh3T3qKebL%2BksKpPUEFIo7Svys2a91MSBqFh7CJiFF%2BZjLPGi10Oz9mg668pEQHde9LPmVNkxwDrYoerHXwW3BgNyNzB4OYuR8Q4C6gWDpr%2Fds5pdyZFHcL2pBoeuD96zyNlXWp368PU0pbB1U0N0Xh9jY4sjEdu%2FnaMFy9zzDEl3upQj3f7XBATFb1jWV0Xqubtd4jPuyBAIc7QAsG6s3na27fdyZQrsoX1tcp44190zOpzY5%2FO51%2BgkrhX0RDNS%2B1gDG6EwME%2FH727Pnzci8OO%2BSIoKdyrIEm4%2BkOpxZpI8SucM98RNE9LRVd%2FItYXtaQNrJjVlYM0IzEHJrJ0qyVLoKbmfEEmgKpTVd7aogdzViI5RGEOts%2BI1eRl2CLOjYRuVYKT6dplep1EYA%2FmeaJWdR4Azg5IWlAvQimZ1lBhUck%2B9qXswbIF%2BBwH2jmu9n9z6Uh7dVeP3enQ95Po8SSoRwJxA4CzMpgYVGS%2B59wTrPY7gAft%2Fdc2fWjIhdRMITTtZad3%2Bhp%2FSyLV14q69J7My44wI94K%2Fj7cCNMXmY6MsJBuFnjkq1%2BFQ%2B5ZZi8%2FweDoSFtGexlagUYEwxqaLtgY6pQFCrOyo2wcQqBHqu9mMp2Yg7FuzJn7o9Pw9LOqbxkEXfMDEdffdSsXnGxHq%2BelGL1YEeM6GAp57B1k6RSngsX%2BACZlVvmCA1oiHq6FLuNdCEefrbI9teD9LzQDZxKEouU4doZyA%2FZEnQi8YWbWJZvd1tluUT%2FRgYhgHhl%2FV%2Bqf3Mk%2FB7bHUJJMCE5UXcz45J4NCvwFUK2qzDRsS6eS4gpgLoHwo1YQ%3D&X-Amz-Signature=97fbd54ff50ccfba7e83cd7727cf7d52af5dc030f0f39730260c4c11c9dcb950&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": true + }, + "unavailableAfterDays": "30", + "availableAfterDays": "", + "capacity": "12", + "additionalDescription": [], + "timelines": [ + { + "date": "2024-08-19", + "disabled": false, + "slots": [ + { + "startTime": "08:00", + "endTime": "09:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00", + "endTime": "10:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00", + "endTime": "11:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00", + "endTime": "12:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00", + "endTime": "14:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00", + "endTime": "15:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00", + "endTime": "16:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00", + "endTime": "17:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00", + "endTime": "18:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00", + "endTime": "19:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00", + "endTime": "20:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00", + "endTime": "21:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00", + "endTime": "22:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00", + "endTime": "22:00" + } + ], + "itemTemplate": "rooms-fixedSessions", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/ajlEo56PqA?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=ajlEo56PqA&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/ajlEo56PqA?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=ajlEo56PqA&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "ewGEKbeQVa", + "title": "delet", + "organisationId": "0B8E79PbpK", + "subtitle": "Eclipse, Level 8", + "resourceSubtype": "test default fallback", + "resourceType": "Rooms", + "resourceTypeId": "kd6PRJPJzZ", + "images": null, + "tags": { + "Approval required": false, + "Manual start": true + }, + "unavailableAfterDays": "9", + "availableAfterDays": "", + "capacity": "14", + "additionalDescription": [], + "timelines": [ + { + "date": "2024-08-19", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "08:15:00", + "status": "DEFAULT" + }, + { + "startTime": "08:15:00", + "endTime": "08:30:00", + "status": "DEFAULT" + }, + { + "startTime": "08:30:00", + "endTime": "08:45:00", + "status": "DEFAULT" + }, + { + "startTime": "08:45:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "DEFAULT" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "DEFAULT" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "DEFAULT" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "10:15:00", + "status": "DEFAULT" + }, + { + "startTime": "10:15:00", + "endTime": "10:30:00", + "status": "DEFAULT" + }, + { + "startTime": "10:30:00", + "endTime": "10:45:00", + "status": "DEFAULT" + }, + { + "startTime": "10:45:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "11:15:00", + "status": "DEFAULT" + }, + { + "startTime": "11:15:00", + "endTime": "11:30:00", + "status": "DEFAULT" + }, + { + "startTime": "11:30:00", + "endTime": "11:45:00", + "status": "DEFAULT" + }, + { + "startTime": "11:45:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DISABLED" + }, + { + "startTime": "13:00:00", + "endTime": "13:15:00", + "status": "DEFAULT" + }, + { + "startTime": "13:15:00", + "endTime": "13:30:00", + "status": "DEFAULT" + }, + { + "startTime": "13:30:00", + "endTime": "13:45:00", + "status": "DEFAULT" + }, + { + "startTime": "13:45:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "14:15:00", + "status": "DEFAULT" + }, + { + "startTime": "14:15:00", + "endTime": "14:30:00", + "status": "DEFAULT" + }, + { + "startTime": "14:30:00", + "endTime": "14:45:00", + "status": "DEFAULT" + }, + { + "startTime": "14:45:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "15:15:00", + "status": "DEFAULT" + }, + { + "startTime": "15:15:00", + "endTime": "15:30:00", + "status": "DEFAULT" + }, + { + "startTime": "15:30:00", + "endTime": "15:45:00", + "status": "DEFAULT" + }, + { + "startTime": "15:45:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "16:15:00", + "status": "DEFAULT" + }, + { + "startTime": "16:15:00", + "endTime": "16:30:00", + "status": "DEFAULT" + }, + { + "startTime": "16:30:00", + "endTime": "16:45:00", + "status": "DEFAULT" + }, + { + "startTime": "16:45:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "17:15:00", + "status": "DEFAULT" + }, + { + "startTime": "17:15:00", + "endTime": "17:30:00", + "status": "DEFAULT" + }, + { + "startTime": "17:30:00", + "endTime": "17:45:00", + "status": "DEFAULT" + }, + { + "startTime": "17:45:00", + "endTime": "18:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 15 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/ewGEKbeQVa?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=ewGEKbeQVa&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/rbs/web/book/ewGEKbeQVa?date=2024-08-19&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://dev.rbs.ccubesg.io/listing/rbs/detail?provider=rmbme&resourceId=ewGEKbeQVa&selectedDate=2024-08-19&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + } + ] +} diff --git a/stories/timetable/timetable-data-odd-days.json b/stories/timetable/timetable-data-odd-days.json new file mode 100644 index 000000000..91141bfe6 --- /dev/null +++ b/stories/timetable/timetable-data-odd-days.json @@ -0,0 +1,2751 @@ +{ + "page": 1, + "rowsPerPage": 10, + "totalPages": 3, + "totalRows": 10, + "resources": [ + { + "_provider": "rmbme", + "id": "9l4P1dOr16", + "title": "Apple", + "organisationId": "ylWEXKQNDX", + "subtitle": "Mapletree Business City 10, Floor 8", + "resourceSubtype": "Conference Room", + "resourceType": "Rooms", + "resourceTypeId": "vmoQAgr9Dl", + "images": [ + "https://mol-stg-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/9l4P1dOr16/5d53aabc-48ab-4e38-8036-b3d000f7c123/e4fc7335-232b-4a2e-99a7-2d47d52d5663/apple-washington-size-113-per-piece-fruits-vegetables-fresh-produce-509590_1024x.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSD7BMLLBM%2F20240903%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240903T023753Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLXNvdXRoZWFzdC0xIkcwRQIgfBMojE3SRXwhEN4Z332Q6Wo0Qg3EMh2Y6qF1Yj0CpQwCIQCa3nEw%2BwK7TXMTgAzYZe%2BAzDWxerb%2Bdo5DS2ouNRyJJyrzAwi0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAIaDDUwMzc3OTU0NDEwMCIMrVWU%2BpHyl02dUNsrKscDdFEBk11jllrTFNthtU%2Fc%2Bo09CAXSFvHTPiQZAM1Eboy8BUzx4TYmaV7BBR4KvuMTtbCk6DyLlSJATmJIJp90JIIXEAw0iJ%2FWdnF0E3%2BLtgXoYpL0eDeLZulu2YfIKFGdNBUFumdljKFORqJ5DjcFzE41WjuNwB%2B%2FE0KAUmruNP3ZHLLldW4CJI6w2tMk%2BJz8%2FqlXXVXa4wQMveyQg0KPXGbfPiUqaFSubr117ohi9t6r8S0kWBeDttTXoTDIkPAf4dVpJ%2FcpzxbWd0V30Geu6jQrFqAdZuptMplj4Imb4cSxoxL4EHMU2Alt4qMJxMoIUZR%2BkAr8uOl03GV2q8iUwqE8mEPIFT%2BDZh9avXKTJCeIIYSx325bAO3TfHAe89Sj456ZUQ8%2FNX8RPamm8lPO3ES8PDlDncN%2FuZztxbxL4olXHutwuhwn49zlLviT7KUV32JThtZFbyGJo2Wl8EhhOHT3jAnQ4RJCit%2BXpGVHnuMXc6H%2Ft4l09oTUxzYdHwyLBE%2BUH6FQMtEVvEcCILjmtsVd52tQ8DsqPkWnhdA9x5A9F7GpGMdCiT7C5CjlnMjxDb%2BNKFu5GSSDx7VLY9I1g5lAHn29ezIwm%2BbZtgY6pQE7VzZ8tdgt9RRMTCIhpPZLUQynKIC1yeqOT6ZenOyMzL6V8nunnwVSV4%2BiSrKj6r%2FmiGPbIZZp9RN2SIZdHiHk%2F1wdYKpsZ7kVNazpLFccBc6siBikiMUzU2%2FRRawKazkRFY6j5TKN%2B7mcLvfaUy8TFIPs7q1Z9sF9893LxH9HXmIirayN%2Byg7GW93ORK7i3uQ09SnTiABmJAkswGOu%2Br1cAjOa0s%3D&X-Amz-Signature=98ada84cc0f8bb9ebfff9b4ba372925ca44ad78293889b7aa47d543876b751bd&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": true, + "Manual start": false + }, + "unavailableAfterDays": "60", + "availableAfterDays": "", + "capacity": "3", + "additionalDescription": [ + { + "key": "Booking usage", + "title": "Booking usage", + "items": [ + { + "label": "Event (Internal)" + }, + { + "label": "Event (External)" + }, + { + "label": "Annual General Meeting" + } + ] + }, + { + "key": "Built-in amenities", + "title": "Built-in amenities", + "items": [ + { + "label": "Chairs (Additional)" + }, + { + "label": "Deskphone" + }, + { + "label": "Chair" + } + ] + }, + { + "key": "Additional amenities", + "title": "Additional services", + "description": "Only available upon request.", + "items": [ + { + "label": "Coffee" + }, + { + "label": "Barista Services" + }, + { + "label": "Tea" + } + ] + } + ], + "timelines": [ + { + "date": "2024-09-06", + "disabled": false, + "slots": [ + { + "startTime": "08:00", + "endTime": "08:45", + "status": "DEFAULT" + }, + { + "startTime": "08:45:00", + "endTime": "09:30:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "11:45:00", + "status": "DEFAULT" + }, + { + "id": "RBP5g87Em6", + "title": "Weekly Huddle #7", + "label": "Shawn TAY (GOVTECH)", + "hosts": [], + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "OCCUPIED", + "action": [ + { + "type": "SHOW_MODAL", + "continueOnError": true, + "payload": { + "message": "", + "cancelActionLabel": "", + "renderContent": { + "type": "html", + "html": "

    Booking details for Apple

    6 Sep 2024, Fri 11:00am - 12:00pm

    Mapletree Business City 10, Floor 8

    Status

    Confirmed

    Booking owner

    Shawn TAY (GOVTECH)

    Shawn_TAY@tech.gov.sg

    Booking title

    Weekly Huddle #7

    " + }, + "confirmActionLabel": "Close" + } + } + ] + }, + { + "startTime": "13:00:00", + "endTime": "13:45:00", + "status": "DEFAULT" + }, + { + "startTime": "13:45:00", + "endTime": "14:30:00", + "status": "DEFAULT" + }, + { + "startTime": "14:30:00", + "endTime": "15:15:00", + "status": "OCCUPIED" + }, + { + "startTime": "16:45:00", + "endTime": "17:15:00", + "status": "DEFAULT" + }, + { + "startTime": "17:15:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "18:45:00", + "status": "DEFAULT" + }, + { + "startTime": "18:45:00", + "endTime": "19:30:00", + "status": "DEFAULT" + }, + { + "startTime": "19:30:00", + "endTime": "20:15:00", + "status": "DEFAULT" + }, + { + "startTime": "20:15:00", + "endTime": "21:00:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00:00", + "endTime": "21:45:00", + "status": "DEFAULT" + }, + { + "startTime": "21:45:00", + "endTime": "22:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "22:30:00", + "interval": 30 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/9l4P1dOr16?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=9l4P1dOr16&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/9l4P1dOr16?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=9l4P1dOr16&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "Dy3E3vRQY0", + "title": "Avocado", + "organisationId": "ylWEXKQNDX", + "subtitle": "Eclipse Building", + "resourceSubtype": "Conference Room", + "resourceType": "Rooms", + "resourceTypeId": "vmoQAgr9Dl", + "images": [ + "https://mol-stg-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/Dy3E3vRQY0/5d53aabc-48ab-4e38-8036-b3d000f7c123/a5bb9b71-289b-4216-a2cb-74e24451d200/Avocado2.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSD7BMLLBM%2F20240903%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240903T023753Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLXNvdXRoZWFzdC0xIkcwRQIgfBMojE3SRXwhEN4Z332Q6Wo0Qg3EMh2Y6qF1Yj0CpQwCIQCa3nEw%2BwK7TXMTgAzYZe%2BAzDWxerb%2Bdo5DS2ouNRyJJyrzAwi0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAIaDDUwMzc3OTU0NDEwMCIMrVWU%2BpHyl02dUNsrKscDdFEBk11jllrTFNthtU%2Fc%2Bo09CAXSFvHTPiQZAM1Eboy8BUzx4TYmaV7BBR4KvuMTtbCk6DyLlSJATmJIJp90JIIXEAw0iJ%2FWdnF0E3%2BLtgXoYpL0eDeLZulu2YfIKFGdNBUFumdljKFORqJ5DjcFzE41WjuNwB%2B%2FE0KAUmruNP3ZHLLldW4CJI6w2tMk%2BJz8%2FqlXXVXa4wQMveyQg0KPXGbfPiUqaFSubr117ohi9t6r8S0kWBeDttTXoTDIkPAf4dVpJ%2FcpzxbWd0V30Geu6jQrFqAdZuptMplj4Imb4cSxoxL4EHMU2Alt4qMJxMoIUZR%2BkAr8uOl03GV2q8iUwqE8mEPIFT%2BDZh9avXKTJCeIIYSx325bAO3TfHAe89Sj456ZUQ8%2FNX8RPamm8lPO3ES8PDlDncN%2FuZztxbxL4olXHutwuhwn49zlLviT7KUV32JThtZFbyGJo2Wl8EhhOHT3jAnQ4RJCit%2BXpGVHnuMXc6H%2Ft4l09oTUxzYdHwyLBE%2BUH6FQMtEVvEcCILjmtsVd52tQ8DsqPkWnhdA9x5A9F7GpGMdCiT7C5CjlnMjxDb%2BNKFu5GSSDx7VLY9I1g5lAHn29ezIwm%2BbZtgY6pQE7VzZ8tdgt9RRMTCIhpPZLUQynKIC1yeqOT6ZenOyMzL6V8nunnwVSV4%2BiSrKj6r%2FmiGPbIZZp9RN2SIZdHiHk%2F1wdYKpsZ7kVNazpLFccBc6siBikiMUzU2%2FRRawKazkRFY6j5TKN%2B7mcLvfaUy8TFIPs7q1Z9sF9893LxH9HXmIirayN%2Byg7GW93ORK7i3uQ09SnTiABmJAkswGOu%2Br1cAjOa0s%3D&X-Amz-Signature=56a94f9a88cf5680133f2d96c5961aad53925ac97890707509c297c6d71c7042&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "", + "availableAfterDays": "", + "capacity": "18", + "additionalDescription": [ + { + "key": "Booking usage", + "title": "Booking usage", + "items": [ + { + "label": "Internal meeting" + }, + { + "label": "External meeting" + } + ] + }, + { + "key": "Additional amenities", + "title": "Additional services", + "description": "Only available upon request.", + "items": [ + { + "label": "Barista Services" + } + ] + } + ], + "timelines": [ + { + "date": "2024-09-06", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "08:30:00", + "status": "DEFAULT" + }, + { + "startTime": "08:30:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "09:30:00", + "status": "DEFAULT" + }, + { + "startTime": "09:30:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "10:30:00", + "status": "DEFAULT" + }, + { + "startTime": "10:30:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "11:30:00", + "status": "DEFAULT" + }, + { + "startTime": "11:30:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "12:30:00", + "status": "DEFAULT" + }, + { + "startTime": "12:30:00", + "endTime": "13:00:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00:00", + "endTime": "13:30:00", + "status": "DEFAULT" + }, + { + "startTime": "13:30:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "14:30:00", + "status": "DEFAULT" + }, + { + "startTime": "14:30:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "15:30:00", + "status": "DEFAULT" + }, + { + "startTime": "15:30:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "16:30:00", + "status": "DEFAULT" + }, + { + "startTime": "16:30:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "17:30:00", + "status": "DEFAULT" + }, + { + "startTime": "17:30:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "18:30:00", + "status": "DEFAULT" + }, + { + "startTime": "18:30:00", + "endTime": "19:00:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00:00", + "endTime": "19:30:00", + "status": "DEFAULT" + }, + { + "startTime": "19:30:00", + "endTime": "20:00:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00:00", + "endTime": "20:30:00", + "status": "DEFAULT" + }, + { + "startTime": "20:30:00", + "endTime": "21:00:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00:00", + "endTime": "21:30:00", + "status": "DEFAULT" + }, + { + "startTime": "21:30:00", + "endTime": "22:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "22:00:00", + "interval": 30 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/Dy3E3vRQY0?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=Dy3E3vRQY0&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/Dy3E3vRQY0?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=Dy3E3vRQY0&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "GN9P0vME6K", + "title": "Banana", + "organisationId": "ylWEXKQNDX", + "subtitle": "Mapletree Business City 10, Floor 8", + "resourceSubtype": "Conference Room", + "resourceType": "Rooms", + "resourceTypeId": "vmoQAgr9Dl", + "images": [ + "https://mol-stg-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/GN9P0vME6K/5d53aabc-48ab-4e38-8036-b3d000f7c123/378a92b9-7901-4a55-8123-c8decb1477fb/Banana.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSD7BMLLBM%2F20240903%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240903T023753Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLXNvdXRoZWFzdC0xIkcwRQIgfBMojE3SRXwhEN4Z332Q6Wo0Qg3EMh2Y6qF1Yj0CpQwCIQCa3nEw%2BwK7TXMTgAzYZe%2BAzDWxerb%2Bdo5DS2ouNRyJJyrzAwi0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAIaDDUwMzc3OTU0NDEwMCIMrVWU%2BpHyl02dUNsrKscDdFEBk11jllrTFNthtU%2Fc%2Bo09CAXSFvHTPiQZAM1Eboy8BUzx4TYmaV7BBR4KvuMTtbCk6DyLlSJATmJIJp90JIIXEAw0iJ%2FWdnF0E3%2BLtgXoYpL0eDeLZulu2YfIKFGdNBUFumdljKFORqJ5DjcFzE41WjuNwB%2B%2FE0KAUmruNP3ZHLLldW4CJI6w2tMk%2BJz8%2FqlXXVXa4wQMveyQg0KPXGbfPiUqaFSubr117ohi9t6r8S0kWBeDttTXoTDIkPAf4dVpJ%2FcpzxbWd0V30Geu6jQrFqAdZuptMplj4Imb4cSxoxL4EHMU2Alt4qMJxMoIUZR%2BkAr8uOl03GV2q8iUwqE8mEPIFT%2BDZh9avXKTJCeIIYSx325bAO3TfHAe89Sj456ZUQ8%2FNX8RPamm8lPO3ES8PDlDncN%2FuZztxbxL4olXHutwuhwn49zlLviT7KUV32JThtZFbyGJo2Wl8EhhOHT3jAnQ4RJCit%2BXpGVHnuMXc6H%2Ft4l09oTUxzYdHwyLBE%2BUH6FQMtEVvEcCILjmtsVd52tQ8DsqPkWnhdA9x5A9F7GpGMdCiT7C5CjlnMjxDb%2BNKFu5GSSDx7VLY9I1g5lAHn29ezIwm%2BbZtgY6pQE7VzZ8tdgt9RRMTCIhpPZLUQynKIC1yeqOT6ZenOyMzL6V8nunnwVSV4%2BiSrKj6r%2FmiGPbIZZp9RN2SIZdHiHk%2F1wdYKpsZ7kVNazpLFccBc6siBikiMUzU2%2FRRawKazkRFY6j5TKN%2B7mcLvfaUy8TFIPs7q1Z9sF9893LxH9HXmIirayN%2Byg7GW93ORK7i3uQ09SnTiABmJAkswGOu%2Br1cAjOa0s%3D&X-Amz-Signature=6e438cfce49a468cc061d95b44f7ab775051001a917076b16fadb9e11fcad968&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "", + "availableAfterDays": "", + "capacity": "6", + "additionalDescription": [ + { + "key": "Booking usage", + "title": "Booking usage", + "items": [ + { + "label": "Internal meeting" + }, + { + "label": "External meeting" + } + ] + }, + { + "key": "Additional amenities", + "title": "Additional services", + "description": "Only available upon request.", + "items": [ + { + "label": "Coffee" + }, + { + "label": "Tea" + } + ] + } + ], + "timelines": [ + { + "date": "2024-09-06", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "08:30:00", + "status": "DEFAULT" + }, + { + "startTime": "08:30:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "09:30:00", + "status": "DEFAULT" + }, + { + "startTime": "09:30:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "10:30:00", + "status": "DEFAULT" + }, + { + "startTime": "10:30:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "11:30:00", + "status": "DEFAULT" + }, + { + "startTime": "11:30:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "12:30:00", + "status": "DEFAULT" + }, + { + "startTime": "12:30:00", + "endTime": "13:00:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00:00", + "endTime": "13:30:00", + "status": "DEFAULT" + }, + { + "startTime": "13:30:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "14:30:00", + "status": "DEFAULT" + }, + { + "startTime": "14:30:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "15:30:00", + "status": "DEFAULT" + }, + { + "startTime": "15:30:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "16:30:00", + "status": "DEFAULT" + }, + { + "startTime": "16:30:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "17:30:00", + "status": "DEFAULT" + }, + { + "startTime": "17:30:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "18:30:00", + "status": "DEFAULT" + }, + { + "startTime": "18:30:00", + "endTime": "19:00:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00:00", + "endTime": "19:30:00", + "status": "DEFAULT" + }, + { + "startTime": "19:30:00", + "endTime": "20:00:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00:00", + "endTime": "20:30:00", + "status": "DEFAULT" + }, + { + "startTime": "20:30:00", + "endTime": "21:00:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00:00", + "endTime": "21:30:00", + "status": "DEFAULT" + }, + { + "startTime": "21:30:00", + "endTime": "22:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "22:00:00", + "interval": 30 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/GN9P0vME6K?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=GN9P0vME6K&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/GN9P0vME6K?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=GN9P0vME6K&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "mx0ExmWr9Y", + "title": "Cantaloupe", + "organisationId": "ylWEXKQNDX", + "subtitle": "Mapletree Business City 10, Floor 9", + "resourceSubtype": "Conference Room", + "resourceType": "Rooms", + "resourceTypeId": "vmoQAgr9Dl", + "images": [ + "https://mol-stg-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/mx0ExmWr9Y/5d53aabc-48ab-4e38-8036-b3d000f7c123/5fad9460-c166-4a82-9aed-0a4579af632c/Cantaloupe.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSD7BMLLBM%2F20240903%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240903T023753Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLXNvdXRoZWFzdC0xIkcwRQIgfBMojE3SRXwhEN4Z332Q6Wo0Qg3EMh2Y6qF1Yj0CpQwCIQCa3nEw%2BwK7TXMTgAzYZe%2BAzDWxerb%2Bdo5DS2ouNRyJJyrzAwi0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAIaDDUwMzc3OTU0NDEwMCIMrVWU%2BpHyl02dUNsrKscDdFEBk11jllrTFNthtU%2Fc%2Bo09CAXSFvHTPiQZAM1Eboy8BUzx4TYmaV7BBR4KvuMTtbCk6DyLlSJATmJIJp90JIIXEAw0iJ%2FWdnF0E3%2BLtgXoYpL0eDeLZulu2YfIKFGdNBUFumdljKFORqJ5DjcFzE41WjuNwB%2B%2FE0KAUmruNP3ZHLLldW4CJI6w2tMk%2BJz8%2FqlXXVXa4wQMveyQg0KPXGbfPiUqaFSubr117ohi9t6r8S0kWBeDttTXoTDIkPAf4dVpJ%2FcpzxbWd0V30Geu6jQrFqAdZuptMplj4Imb4cSxoxL4EHMU2Alt4qMJxMoIUZR%2BkAr8uOl03GV2q8iUwqE8mEPIFT%2BDZh9avXKTJCeIIYSx325bAO3TfHAe89Sj456ZUQ8%2FNX8RPamm8lPO3ES8PDlDncN%2FuZztxbxL4olXHutwuhwn49zlLviT7KUV32JThtZFbyGJo2Wl8EhhOHT3jAnQ4RJCit%2BXpGVHnuMXc6H%2Ft4l09oTUxzYdHwyLBE%2BUH6FQMtEVvEcCILjmtsVd52tQ8DsqPkWnhdA9x5A9F7GpGMdCiT7C5CjlnMjxDb%2BNKFu5GSSDx7VLY9I1g5lAHn29ezIwm%2BbZtgY6pQE7VzZ8tdgt9RRMTCIhpPZLUQynKIC1yeqOT6ZenOyMzL6V8nunnwVSV4%2BiSrKj6r%2FmiGPbIZZp9RN2SIZdHiHk%2F1wdYKpsZ7kVNazpLFccBc6siBikiMUzU2%2FRRawKazkRFY6j5TKN%2B7mcLvfaUy8TFIPs7q1Z9sF9893LxH9HXmIirayN%2Byg7GW93ORK7i3uQ09SnTiABmJAkswGOu%2Br1cAjOa0s%3D&X-Amz-Signature=af8510ba0a0872726a4ffb86efc6d264b48be9dc13569018e91b1a4441d0afb6&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "", + "availableAfterDays": "", + "capacity": "10", + "additionalDescription": [ + { + "key": "Booking usage", + "title": "Booking usage", + "items": [ + { + "label": "Internal meeting" + }, + { + "label": "External meeting" + } + ] + }, + { + "key": "Available layouts", + "title": "Available layouts", + "description": "Additional time may be added when checking for availability due to setup and teardown of layout.", + "items": [ + { + "label": "Boardroom (10 pax)" + }, + { + "label": "Classroom (10 pax)" + }, + { + "label": "U-shape (10 pax)" + } + ] + }, + { + "key": "View layout details", + "title": "View layout details", + "items": [ + { + "label": "Boardroom (10 pax)", + "description": [ + { + "label": "Setup time", + "value": "None" + }, + { + "label": "Teardown time", + "value": "None" + } + ], + "imageUrls": [ + "https://rbs-stg.dwp.gov.sg/rbs/api/v1/layout/9l4P1xbr16/layout-url?path=resource-layouts/9l4P1xbr16/5d53aabc-48ab-4e38-8036-b3d000f7c123/1e64e6e8-a4bf-4668-b4e0-c2c83dd75cdd/Boardroom.png" + ] + }, + { + "label": "Classroom (10 pax)", + "description": [ + { + "label": "Setup time", + "value": "15 minutes" + }, + { + "label": "Teardown time", + "value": "15 minutes" + } + ], + "imageUrls": [ + "https://rbs-stg.dwp.gov.sg/rbs/api/v1/layout/mOkQkXAEYZ/layout-url?path=resource-layouts/mOkQkXAEYZ/5d53aabc-48ab-4e38-8036-b3d000f7c123/1e64e6e8-a4bf-4668-b4e0-c2c83dd75cdd/Classroom.png" + ] + }, + { + "label": "U-shape (10 pax)", + "description": [ + { + "label": "Setup time", + "value": "15 minutes" + }, + { + "label": "Teardown time", + "value": "15 minutes" + } + ], + "imageUrls": [ + "https://rbs-stg.dwp.gov.sg/rbs/api/v1/layout/NgYrJodP0w/layout-url?path=resource-layouts/NgYrJodP0w/5d53aabc-48ab-4e38-8036-b3d000f7c123/1e64e6e8-a4bf-4668-b4e0-c2c83dd75cdd/U-shape.png" + ] + } + ] + } + ], + "timelines": [ + { + "date": "2024-09-06", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00:00", + "endTime": "21:00:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00:00", + "endTime": "22:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "22:00:00", + "interval": 60 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/mx0ExmWr9Y?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=mx0ExmWr9Y&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/mx0ExmWr9Y?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=mx0ExmWr9Y&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "An0rbeOElJ", + "title": "Cherry", + "organisationId": "ylWEXKQNDX", + "subtitle": "Mapletree Business City 10, Floor 8", + "resourceSubtype": "Conference Room", + "resourceType": "Rooms", + "resourceTypeId": "vmoQAgr9Dl", + "images": [ + "https://mol-stg-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/An0rbeOElJ/5d53aabc-48ab-4e38-8036-b3d000f7c123/7053dc86-153f-4194-9ac1-73d2b07a6236/Cherry.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSD7BMLLBM%2F20240903%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240903T023753Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLXNvdXRoZWFzdC0xIkcwRQIgfBMojE3SRXwhEN4Z332Q6Wo0Qg3EMh2Y6qF1Yj0CpQwCIQCa3nEw%2BwK7TXMTgAzYZe%2BAzDWxerb%2Bdo5DS2ouNRyJJyrzAwi0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAIaDDUwMzc3OTU0NDEwMCIMrVWU%2BpHyl02dUNsrKscDdFEBk11jllrTFNthtU%2Fc%2Bo09CAXSFvHTPiQZAM1Eboy8BUzx4TYmaV7BBR4KvuMTtbCk6DyLlSJATmJIJp90JIIXEAw0iJ%2FWdnF0E3%2BLtgXoYpL0eDeLZulu2YfIKFGdNBUFumdljKFORqJ5DjcFzE41WjuNwB%2B%2FE0KAUmruNP3ZHLLldW4CJI6w2tMk%2BJz8%2FqlXXVXa4wQMveyQg0KPXGbfPiUqaFSubr117ohi9t6r8S0kWBeDttTXoTDIkPAf4dVpJ%2FcpzxbWd0V30Geu6jQrFqAdZuptMplj4Imb4cSxoxL4EHMU2Alt4qMJxMoIUZR%2BkAr8uOl03GV2q8iUwqE8mEPIFT%2BDZh9avXKTJCeIIYSx325bAO3TfHAe89Sj456ZUQ8%2FNX8RPamm8lPO3ES8PDlDncN%2FuZztxbxL4olXHutwuhwn49zlLviT7KUV32JThtZFbyGJo2Wl8EhhOHT3jAnQ4RJCit%2BXpGVHnuMXc6H%2Ft4l09oTUxzYdHwyLBE%2BUH6FQMtEVvEcCILjmtsVd52tQ8DsqPkWnhdA9x5A9F7GpGMdCiT7C5CjlnMjxDb%2BNKFu5GSSDx7VLY9I1g5lAHn29ezIwm%2BbZtgY6pQE7VzZ8tdgt9RRMTCIhpPZLUQynKIC1yeqOT6ZenOyMzL6V8nunnwVSV4%2BiSrKj6r%2FmiGPbIZZp9RN2SIZdHiHk%2F1wdYKpsZ7kVNazpLFccBc6siBikiMUzU2%2FRRawKazkRFY6j5TKN%2B7mcLvfaUy8TFIPs7q1Z9sF9893LxH9HXmIirayN%2Byg7GW93ORK7i3uQ09SnTiABmJAkswGOu%2Br1cAjOa0s%3D&X-Amz-Signature=5a94a0ec3089214927586c4f5add8b2162a31a0c84933728abf45608831f748a&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": true + }, + "unavailableAfterDays": "90", + "availableAfterDays": "", + "capacity": "10", + "additionalDescription": [ + { + "key": "Booking usage", + "title": "Booking usage", + "items": [ + { + "label": "Internal meeting" + }, + { + "label": "External meeting" + } + ] + } + ], + "timelines": [ + { + "date": "2024-09-06", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "08:30:00", + "status": "DEFAULT" + }, + { + "startTime": "08:30:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "09:30:00", + "status": "DEFAULT" + }, + { + "startTime": "09:30:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "10:30:00", + "status": "DEFAULT" + }, + { + "startTime": "10:30:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "11:30:00", + "status": "DEFAULT" + }, + { + "startTime": "11:30:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "12:30:00", + "status": "DEFAULT" + }, + { + "startTime": "12:30:00", + "endTime": "13:00:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00:00", + "endTime": "13:30:00", + "status": "DEFAULT" + }, + { + "startTime": "13:30:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "14:30:00", + "status": "DEFAULT" + }, + { + "startTime": "14:30:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "15:30:00", + "status": "DEFAULT" + }, + { + "startTime": "15:30:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "16:30:00", + "status": "DEFAULT" + }, + { + "startTime": "16:30:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "17:30:00", + "status": "DEFAULT" + }, + { + "startTime": "17:30:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "18:30:00", + "status": "DEFAULT" + }, + { + "startTime": "18:30:00", + "endTime": "19:00:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00:00", + "endTime": "19:30:00", + "status": "DEFAULT" + }, + { + "startTime": "19:30:00", + "endTime": "20:00:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00:00", + "endTime": "20:30:00", + "status": "DEFAULT" + }, + { + "startTime": "20:30:00", + "endTime": "21:00:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00:00", + "endTime": "21:30:00", + "status": "DEFAULT" + }, + { + "startTime": "21:30:00", + "endTime": "22:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "22:00:00", + "interval": 30 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/An0rbeOElJ?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=An0rbeOElJ&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/An0rbeOElJ?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=An0rbeOElJ&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "GN9P0vDE6K", + "title": "Dragonfruit", + "organisationId": "ylWEXKQNDX", + "subtitle": "Mapletree Business City 10, Floor 8", + "resourceSubtype": "Conference Room", + "resourceType": "Rooms", + "resourceTypeId": "vmoQAgr9Dl", + "images": [ + "https://mol-stg-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/GN9P0vDE6K/5d53aabc-48ab-4e38-8036-b3d000f7c123/02c7fa54-9d6a-4a50-892c-0d1071d94d5f/Dragonfruit.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSD7BMLLBM%2F20240903%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240903T023753Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLXNvdXRoZWFzdC0xIkcwRQIgfBMojE3SRXwhEN4Z332Q6Wo0Qg3EMh2Y6qF1Yj0CpQwCIQCa3nEw%2BwK7TXMTgAzYZe%2BAzDWxerb%2Bdo5DS2ouNRyJJyrzAwi0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAIaDDUwMzc3OTU0NDEwMCIMrVWU%2BpHyl02dUNsrKscDdFEBk11jllrTFNthtU%2Fc%2Bo09CAXSFvHTPiQZAM1Eboy8BUzx4TYmaV7BBR4KvuMTtbCk6DyLlSJATmJIJp90JIIXEAw0iJ%2FWdnF0E3%2BLtgXoYpL0eDeLZulu2YfIKFGdNBUFumdljKFORqJ5DjcFzE41WjuNwB%2B%2FE0KAUmruNP3ZHLLldW4CJI6w2tMk%2BJz8%2FqlXXVXa4wQMveyQg0KPXGbfPiUqaFSubr117ohi9t6r8S0kWBeDttTXoTDIkPAf4dVpJ%2FcpzxbWd0V30Geu6jQrFqAdZuptMplj4Imb4cSxoxL4EHMU2Alt4qMJxMoIUZR%2BkAr8uOl03GV2q8iUwqE8mEPIFT%2BDZh9avXKTJCeIIYSx325bAO3TfHAe89Sj456ZUQ8%2FNX8RPamm8lPO3ES8PDlDncN%2FuZztxbxL4olXHutwuhwn49zlLviT7KUV32JThtZFbyGJo2Wl8EhhOHT3jAnQ4RJCit%2BXpGVHnuMXc6H%2Ft4l09oTUxzYdHwyLBE%2BUH6FQMtEVvEcCILjmtsVd52tQ8DsqPkWnhdA9x5A9F7GpGMdCiT7C5CjlnMjxDb%2BNKFu5GSSDx7VLY9I1g5lAHn29ezIwm%2BbZtgY6pQE7VzZ8tdgt9RRMTCIhpPZLUQynKIC1yeqOT6ZenOyMzL6V8nunnwVSV4%2BiSrKj6r%2FmiGPbIZZp9RN2SIZdHiHk%2F1wdYKpsZ7kVNazpLFccBc6siBikiMUzU2%2FRRawKazkRFY6j5TKN%2B7mcLvfaUy8TFIPs7q1Z9sF9893LxH9HXmIirayN%2Byg7GW93ORK7i3uQ09SnTiABmJAkswGOu%2Br1cAjOa0s%3D&X-Amz-Signature=6a12f85542e0563c2d9a39181e5ac5ccc001fed925512a9bf495bc667795b5e4&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "", + "availableAfterDays": "", + "capacity": "10", + "additionalDescription": [ + { + "key": "Booking usage", + "title": "Booking usage", + "items": [ + { + "label": "Internal meeting" + }, + { + "label": "External meeting" + } + ] + }, + { + "key": "Built-in amenities", + "title": "Built-in amenities", + "items": [ + { + "label": "Projector" + }, + { + "label": "Laser pointer" + }, + { + "label": "Table" + }, + { + "label": "Microphone" + }, + { + "label": "Chair" + } + ] + }, + { + "key": "Additional amenities", + "title": "Additional services", + "description": "Only available upon request.", + "items": [ + { + "label": "Coffee" + }, + { + "label": "Tea" + } + ] + }, + { + "key": "Available layouts", + "title": "Available layouts", + "description": "Additional time may be added when checking for availability due to setup and teardown of layout.", + "items": [ + { + "label": "Classroom (12 pax)" + }, + { + "label": "Default (10 pax)" + }, + { + "label": "Cabaret (16 pax)" + } + ] + }, + { + "key": "View layout details", + "title": "View layout details", + "items": [ + { + "label": "Classroom (12 pax)", + "description": [ + { + "label": "Setup time", + "value": "15 minutes" + }, + { + "label": "Teardown time", + "value": "15 minutes" + } + ], + "imageUrls": [ + "https://rbs-stg.dwp.gov.sg/rbs/api/v1/layout/9znPmNeQBv/layout-url?path=resource-layouts/9znPmNeQBv/5d53aabc-48ab-4e38-8036-b3d000f7c123/0ed1cf96-f8cf-4f5a-bb9f-b448a6246f1f/Classroom.png" + ] + }, + { + "label": "Default (10 pax)", + "description": [ + { + "label": "Setup time", + "value": "None" + }, + { + "label": "Teardown time", + "value": "None" + } + ], + "imageUrls": [ + "https://rbs-stg.dwp.gov.sg/rbs/api/v1/layout/0B8E716Pbp/layout-url?path=resource-layouts/0B8E716Pbp/5d53aabc-48ab-4e38-8036-b3d000f7c123/021a5edb-99ba-4870-bb49-cf56762b652e/Boardroom.png" + ] + }, + { + "label": "Cabaret (16 pax)", + "description": [ + { + "label": "Setup time", + "value": "15 minutes" + }, + { + "label": "Teardown time", + "value": "15 minutes" + } + ], + "imageUrls": [ + "https://rbs-stg.dwp.gov.sg/rbs/api/v1/layout/vmoQAgyr9D/layout-url?path=resource-layouts/vmoQAgyr9D/5d53aabc-48ab-4e38-8036-b3d000f7c123/7e99c61a-7102-4ba6-bb69-7619491b8509/Cabaret.png" + ] + } + ] + } + ], + "timelines": [ + { + "date": "2024-09-06", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "08:30:00", + "status": "DEFAULT" + }, + { + "startTime": "08:30:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "09:30:00", + "status": "DEFAULT" + }, + { + "startTime": "09:30:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "10:30:00", + "status": "DEFAULT" + }, + { + "startTime": "10:30:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "11:30:00", + "status": "DEFAULT" + }, + { + "startTime": "11:30:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "12:30:00", + "status": "DEFAULT" + }, + { + "startTime": "12:30:00", + "endTime": "13:00:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00:00", + "endTime": "13:30:00", + "status": "DEFAULT" + }, + { + "startTime": "13:30:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "14:30:00", + "status": "DEFAULT" + }, + { + "startTime": "14:30:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "15:30:00", + "status": "DEFAULT" + }, + { + "startTime": "15:30:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "16:30:00", + "status": "DEFAULT" + }, + { + "startTime": "16:30:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "17:30:00", + "status": "DEFAULT" + }, + { + "startTime": "17:30:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "18:30:00", + "status": "DEFAULT" + }, + { + "startTime": "18:30:00", + "endTime": "19:00:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00:00", + "endTime": "19:30:00", + "status": "DEFAULT" + }, + { + "startTime": "19:30:00", + "endTime": "20:00:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00:00", + "endTime": "20:30:00", + "status": "DEFAULT" + }, + { + "startTime": "20:30:00", + "endTime": "21:00:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00:00", + "endTime": "21:30:00", + "status": "DEFAULT" + }, + { + "startTime": "21:30:00", + "endTime": "22:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "22:00:00", + "interval": 30 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/GN9P0vDE6K?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=GN9P0vDE6K&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/GN9P0vDE6K?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=GN9P0vDE6K&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "vK4rGewQ02", + "title": "Durian", + "organisationId": "ylWEXKQNDX", + "subtitle": "Eclipse Building", + "resourceSubtype": "Meeting Room", + "resourceType": "Rooms", + "resourceTypeId": "vmoQAgr9Dl", + "images": [ + "https://mol-stg-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/vK4rGewQ02/5d53aabc-48ab-4e38-8036-b3d000f7c123/e7be5a59-bff3-43f0-b86c-f375775a054b/Durian.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSD7BMLLBM%2F20240903%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240903T023753Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLXNvdXRoZWFzdC0xIkcwRQIgfBMojE3SRXwhEN4Z332Q6Wo0Qg3EMh2Y6qF1Yj0CpQwCIQCa3nEw%2BwK7TXMTgAzYZe%2BAzDWxerb%2Bdo5DS2ouNRyJJyrzAwi0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAIaDDUwMzc3OTU0NDEwMCIMrVWU%2BpHyl02dUNsrKscDdFEBk11jllrTFNthtU%2Fc%2Bo09CAXSFvHTPiQZAM1Eboy8BUzx4TYmaV7BBR4KvuMTtbCk6DyLlSJATmJIJp90JIIXEAw0iJ%2FWdnF0E3%2BLtgXoYpL0eDeLZulu2YfIKFGdNBUFumdljKFORqJ5DjcFzE41WjuNwB%2B%2FE0KAUmruNP3ZHLLldW4CJI6w2tMk%2BJz8%2FqlXXVXa4wQMveyQg0KPXGbfPiUqaFSubr117ohi9t6r8S0kWBeDttTXoTDIkPAf4dVpJ%2FcpzxbWd0V30Geu6jQrFqAdZuptMplj4Imb4cSxoxL4EHMU2Alt4qMJxMoIUZR%2BkAr8uOl03GV2q8iUwqE8mEPIFT%2BDZh9avXKTJCeIIYSx325bAO3TfHAe89Sj456ZUQ8%2FNX8RPamm8lPO3ES8PDlDncN%2FuZztxbxL4olXHutwuhwn49zlLviT7KUV32JThtZFbyGJo2Wl8EhhOHT3jAnQ4RJCit%2BXpGVHnuMXc6H%2Ft4l09oTUxzYdHwyLBE%2BUH6FQMtEVvEcCILjmtsVd52tQ8DsqPkWnhdA9x5A9F7GpGMdCiT7C5CjlnMjxDb%2BNKFu5GSSDx7VLY9I1g5lAHn29ezIwm%2BbZtgY6pQE7VzZ8tdgt9RRMTCIhpPZLUQynKIC1yeqOT6ZenOyMzL6V8nunnwVSV4%2BiSrKj6r%2FmiGPbIZZp9RN2SIZdHiHk%2F1wdYKpsZ7kVNazpLFccBc6siBikiMUzU2%2FRRawKazkRFY6j5TKN%2B7mcLvfaUy8TFIPs7q1Z9sF9893LxH9HXmIirayN%2Byg7GW93ORK7i3uQ09SnTiABmJAkswGOu%2Br1cAjOa0s%3D&X-Amz-Signature=68d3552e5f82364ff858fb2a537f7ccc4c0d5fe5db054a9d24d990b74861bd7a&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "", + "availableAfterDays": "", + "capacity": "10", + "additionalDescription": [], + "timelines": [ + { + "date": "2024-09-06", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "08:30:00", + "status": "DEFAULT" + }, + { + "startTime": "08:30:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "09:30:00", + "status": "DEFAULT" + }, + { + "startTime": "09:30:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "10:30:00", + "status": "DEFAULT" + }, + { + "startTime": "10:30:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "11:30:00", + "status": "DEFAULT" + }, + { + "startTime": "11:30:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "12:30:00", + "status": "DEFAULT" + }, + { + "startTime": "12:30:00", + "endTime": "13:00:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00:00", + "endTime": "13:30:00", + "status": "DEFAULT" + }, + { + "startTime": "13:30:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "14:30:00", + "status": "DEFAULT" + }, + { + "startTime": "14:30:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "15:30:00", + "status": "DEFAULT" + }, + { + "startTime": "15:30:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "16:30:00", + "status": "DEFAULT" + }, + { + "startTime": "16:30:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "17:30:00", + "status": "DEFAULT" + }, + { + "startTime": "17:30:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "18:30:00", + "status": "DEFAULT" + }, + { + "startTime": "18:30:00", + "endTime": "19:00:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00:00", + "endTime": "19:30:00", + "status": "DEFAULT" + }, + { + "startTime": "19:30:00", + "endTime": "20:00:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00:00", + "endTime": "20:30:00", + "status": "DEFAULT" + }, + { + "startTime": "20:30:00", + "endTime": "21:00:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00:00", + "endTime": "21:30:00", + "status": "DEFAULT" + }, + { + "startTime": "21:30:00", + "endTime": "22:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "22:00:00", + "interval": 30 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/vK4rGewQ02?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=vK4rGewQ02&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/vK4rGewQ02?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=vK4rGewQ02&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "0B8E719Pbp", + "title": "Executive room 1", + "organisationId": "ylWEXKQNDX", + "subtitle": "Eclipse Building", + "resourceSubtype": "Executive Room", + "resourceType": "Rooms", + "resourceTypeId": "vmoQAgr9Dl", + "images": null, + "tags": { + "Approval required": false, + "Manual start": true + }, + "unavailableAfterDays": "90", + "availableAfterDays": "", + "capacity": "5", + "additionalDescription": [ + { + "key": "Booking usage", + "title": "Booking usage", + "items": [ + { + "label": "Internal meeting" + }, + { + "label": "External meeting" + } + ] + } + ], + "timelines": [ + { + "date": "2024-09-06", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00:00", + "endTime": "21:00:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00:00", + "endTime": "22:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "22:00:00", + "interval": 60 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/0B8E719Pbp?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=0B8E719Pbp&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/0B8E719Pbp?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=0B8E719Pbp&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "vK4rGoMr02", + "title": "Executive room 6", + "organisationId": "ylWEXKQNDX", + "subtitle": "Eclipse Building", + "resourceSubtype": "Executive Room", + "resourceType": "Rooms", + "resourceTypeId": "vmoQAgr9Dl", + "images": null, + "tags": { + "Approval required": true, + "Manual start": false + }, + "unavailableAfterDays": "90", + "availableAfterDays": "", + "capacity": "6", + "additionalDescription": [ + { + "key": "Booking usage", + "title": "Booking usage", + "items": [ + { + "label": "Internal meeting" + }, + { + "label": "External meeting" + } + ] + } + ], + "timelines": [ + { + "date": "2024-09-06", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00:00", + "endTime": "21:00:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00:00", + "endTime": "22:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "22:00:00", + "interval": 60 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/vK4rGoMr02?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=vK4rGoMr02&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/vK4rGoMr02?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=vK4rGoMr02&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + }, + { + "_provider": "rmbme", + "id": "YRVPVjVPGe", + "title": "Grape", + "organisationId": "ylWEXKQNDX", + "subtitle": "Mapletree Business City 10, Floor 8", + "resourceSubtype": "Conference Room", + "resourceType": "Rooms", + "resourceTypeId": "vmoQAgr9Dl", + "images": [ + "https://mol-stg-rbs-backend-files.s3.ap-southeast-1.amazonaws.com/resource/YRVPVjVPGe/5d53aabc-48ab-4e38-8036-b3d000f7c123/b7635427-9512-4205-9c78-1480e4953c73/Grape.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAXKS4ZZQSD7BMLLBM%2F20240903%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240903T023753Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLXNvdXRoZWFzdC0xIkcwRQIgfBMojE3SRXwhEN4Z332Q6Wo0Qg3EMh2Y6qF1Yj0CpQwCIQCa3nEw%2BwK7TXMTgAzYZe%2BAzDWxerb%2Bdo5DS2ouNRyJJyrzAwi0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAIaDDUwMzc3OTU0NDEwMCIMrVWU%2BpHyl02dUNsrKscDdFEBk11jllrTFNthtU%2Fc%2Bo09CAXSFvHTPiQZAM1Eboy8BUzx4TYmaV7BBR4KvuMTtbCk6DyLlSJATmJIJp90JIIXEAw0iJ%2FWdnF0E3%2BLtgXoYpL0eDeLZulu2YfIKFGdNBUFumdljKFORqJ5DjcFzE41WjuNwB%2B%2FE0KAUmruNP3ZHLLldW4CJI6w2tMk%2BJz8%2FqlXXVXa4wQMveyQg0KPXGbfPiUqaFSubr117ohi9t6r8S0kWBeDttTXoTDIkPAf4dVpJ%2FcpzxbWd0V30Geu6jQrFqAdZuptMplj4Imb4cSxoxL4EHMU2Alt4qMJxMoIUZR%2BkAr8uOl03GV2q8iUwqE8mEPIFT%2BDZh9avXKTJCeIIYSx325bAO3TfHAe89Sj456ZUQ8%2FNX8RPamm8lPO3ES8PDlDncN%2FuZztxbxL4olXHutwuhwn49zlLviT7KUV32JThtZFbyGJo2Wl8EhhOHT3jAnQ4RJCit%2BXpGVHnuMXc6H%2Ft4l09oTUxzYdHwyLBE%2BUH6FQMtEVvEcCILjmtsVd52tQ8DsqPkWnhdA9x5A9F7GpGMdCiT7C5CjlnMjxDb%2BNKFu5GSSDx7VLY9I1g5lAHn29ezIwm%2BbZtgY6pQE7VzZ8tdgt9RRMTCIhpPZLUQynKIC1yeqOT6ZenOyMzL6V8nunnwVSV4%2BiSrKj6r%2FmiGPbIZZp9RN2SIZdHiHk%2F1wdYKpsZ7kVNazpLFccBc6siBikiMUzU2%2FRRawKazkRFY6j5TKN%2B7mcLvfaUy8TFIPs7q1Z9sF9893LxH9HXmIirayN%2Byg7GW93ORK7i3uQ09SnTiABmJAkswGOu%2Br1cAjOa0s%3D&X-Amz-Signature=b44aaa42675bae307a1bfcc72475cc435b4d2e2db5abec6f3d99c6508bc0d05e&X-Amz-SignedHeaders=host&x-id=GetObject" + ], + "tags": { + "Approval required": false, + "Manual start": false + }, + "unavailableAfterDays": "", + "availableAfterDays": "", + "capacity": "10", + "additionalDescription": [ + { + "key": "Booking usage", + "title": "Booking usage", + "items": [ + { + "label": "Internal meeting" + }, + { + "label": "External meeting" + } + ] + }, + { + "key": "Built-in amenities", + "title": "Built-in amenities", + "items": [ + { + "label": "Projector" + }, + { + "label": "Laser pointer" + }, + { + "label": "Chair" + } + ] + } + ], + "timelines": [ + { + "date": "2024-09-06", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "08:30:00", + "status": "DEFAULT" + }, + { + "startTime": "08:30:00", + "endTime": "09:00:00", + "status": "DEFAULT" + }, + { + "startTime": "09:00:00", + "endTime": "09:30:00", + "status": "DEFAULT" + }, + { + "startTime": "09:30:00", + "endTime": "10:00:00", + "status": "DEFAULT" + }, + { + "startTime": "10:00:00", + "endTime": "10:30:00", + "status": "DEFAULT" + }, + { + "startTime": "10:30:00", + "endTime": "11:00:00", + "status": "DEFAULT" + }, + { + "startTime": "11:00:00", + "endTime": "11:30:00", + "status": "DEFAULT" + }, + { + "startTime": "11:30:00", + "endTime": "12:00:00", + "status": "DEFAULT" + }, + { + "startTime": "12:00:00", + "endTime": "12:30:00", + "status": "DEFAULT" + }, + { + "startTime": "12:30:00", + "endTime": "13:00:00", + "status": "DEFAULT" + }, + { + "startTime": "13:00:00", + "endTime": "13:30:00", + "status": "DEFAULT" + }, + { + "startTime": "13:30:00", + "endTime": "14:00:00", + "status": "DEFAULT" + }, + { + "startTime": "14:00:00", + "endTime": "14:30:00", + "status": "DEFAULT" + }, + { + "startTime": "14:30:00", + "endTime": "15:00:00", + "status": "DEFAULT" + }, + { + "startTime": "15:00:00", + "endTime": "15:30:00", + "status": "DEFAULT" + }, + { + "startTime": "15:30:00", + "endTime": "16:00:00", + "status": "DEFAULT" + }, + { + "startTime": "16:00:00", + "endTime": "16:30:00", + "status": "DEFAULT" + }, + { + "startTime": "16:30:00", + "endTime": "17:00:00", + "status": "DEFAULT" + }, + { + "startTime": "17:00:00", + "endTime": "17:30:00", + "status": "DEFAULT" + }, + { + "startTime": "17:30:00", + "endTime": "18:00:00", + "status": "DEFAULT" + }, + { + "startTime": "18:00:00", + "endTime": "18:30:00", + "status": "DEFAULT" + }, + { + "startTime": "18:30:00", + "endTime": "19:00:00", + "status": "DEFAULT" + }, + { + "startTime": "19:00:00", + "endTime": "19:30:00", + "status": "DEFAULT" + }, + { + "startTime": "19:30:00", + "endTime": "20:00:00", + "status": "DEFAULT" + }, + { + "startTime": "20:00:00", + "endTime": "20:30:00", + "status": "DEFAULT" + }, + { + "startTime": "20:30:00", + "endTime": "21:00:00", + "status": "DEFAULT" + }, + { + "startTime": "21:00:00", + "endTime": "21:30:00", + "status": "DEFAULT" + }, + { + "startTime": "21:30:00", + "endTime": "22:00:00", + "status": "DEFAULT" + } + ], + "startTime": "08:00:00", + "endTime": "22:00:00", + "interval": 30 + } + ], + "itemTemplate": "rooms-interval", + "callToActions": { + "desktop": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/YRVPVjVPGe?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Unavailable", + "style": "default", + "enabled": false, + "visible": false, + "icon": null + } + }, + "actions": [] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=YRVPVjVPGe&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ], + "mobile": [ + { + "trigger": { + "type": "BUTTON", + "value": { + "label": "Book", + "style": "default", + "enabled": true, + "visible": true, + "icon": null + } + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/rbs/web/book/YRVPVjVPGe?date=2024-09-06&startTime=&endTime=" + }, + "continueOnError": null + } + ] + }, + { + "trigger": { + "type": "LIST_ITEM", + "value": null + }, + "actions": [ + { + "type": "REDIRECT", + "payload": { + "path": "https://rbs-stg.dwp.gov.sg/listing/rbs/detail?provider=rmbme&resourceId=YRVPVjVPGe&selectedDate=2024-09-06&calendarMode=day" + }, + "continueOnError": null + } + ] + } + ] + } + } + ] +} diff --git a/stories/timetable/timetable-lazy-load-data.json b/stories/timetable/timetable-lazy-load-data.json new file mode 100644 index 000000000..1149e39fb --- /dev/null +++ b/stories/timetable/timetable-lazy-load-data.json @@ -0,0 +1,3468 @@ +{ + "page": 1, + "rowsPerPage": 10, + "totalPages": 5, + "totalRows": 50, + "resources": [ + { + "id": "1", + "title": "Apple", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + } + ], + "startTime": "08:00:00", + "endTime": "14:00:00", + "interval": 30 + } + ] + }, + { + "id": "2", + "title": "Banana", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "3", + "title": "Cherry", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "17:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "3" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "4", + "title": "Date", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "5", + "title": "Elderberry", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "13:00:00", + "endTime": "15:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "4" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 60 + } + ] + }, + { + "id": "6", + "title": "Fig", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 60 + } + ] + }, + { + "id": "7", + "title": "Grape", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "8" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "9" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "10" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "11" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "8", + "title": "Honeydew", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "17:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "4" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "9", + "title": "Indian Fig", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "8" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "9" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "10" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "11" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "10", + "title": "Jackfruit", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "8" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "9" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "10" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "11" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "11", + "title": "Kiwi", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "8" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "9" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "10" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "11" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "12", + "title": "Lemon", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "17:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "3" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "13", + "title": "Mango", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 30 + } + ] + }, + { + "id": "14", + "title": "Nectarine", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 30 + } + ] + }, + { + "id": "15", + "title": "Olive", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "16", + "title": "Papaya", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 30 + } + ] + }, + { + "id": "17", + "title": "Quince", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "18", + "title": "Raspberry", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + } + ], + "startTime": "08:00:00", + "endTime": "14:00:00", + "interval": 30 + } + ] + }, + { + "id": "19", + "title": "Strawberry", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 30 + } + ] + }, + { + "id": "20", + "title": "Tangerine", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "15:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "6" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "21", + "title": "Uva", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "22", + "title": "Voavanga", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "15:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "6" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "23", + "title": "Watermelon", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "24", + "title": "Ximenia", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "9" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "10" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "11" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "12" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "25", + "title": "Yarrow", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "9" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "10" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "26", + "title": "Zucchini", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 30 + } + ] + }, + { + "id": "27", + "title": "Apricot", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "28", + "title": "Blackberry", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 30 + } + ] + }, + { + "id": "29", + "title": "Cantaloupe", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + } + ], + "startTime": "08:00:00", + "endTime": "14:00:00", + "interval": 30 + } + ] + }, + { + "id": "30", + "title": "Dragonfruit", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "15:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "6" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "31", + "title": "Elderberry", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "8" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "9" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "10" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "32", + "title": "Figs", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "33", + "title": "Grapefruit", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "8" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "9" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "10" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "34", + "title": "Huckleberry", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + } + ], + "startTime": "08:00:00", + "endTime": "14:00:00", + "interval": 30 + } + ] + }, + { + "id": "35", + "title": "Ice Cream Bean", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "36", + "title": "Jujube", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "15:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "6" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "37", + "title": "Kumquat", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "38", + "title": "Lime", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + } + ], + "startTime": "08:00:00", + "endTime": "14:00:00", + "interval": 30 + } + ] + }, + { + "id": "39", + "title": "Melon", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 30 + } + ] + }, + { + "id": "40", + "title": "Noni", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "41", + "title": "Orange", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "15:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "6" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "42", + "title": "Peach", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + } + ], + "startTime": "08:00:00", + "endTime": "14:00:00", + "interval": 30 + } + ] + }, + { + "id": "43", + "title": "Pear", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "44", + "title": "Pineapple", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "45", + "title": "Pomegranate", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "18:00:00", + "interval": 30 + } + ] + }, + { + "id": "46", + "title": "Quince", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + } + ], + "startTime": "08:00:00", + "endTime": "14:00:00", + "interval": 30 + } + ] + }, + { + "id": "47", + "title": "Raisin", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "09:15:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "09:15:00", + "endTime": "09:30:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "2" + }, + { + "startTime": "09:30:00", + "endTime": "09:45:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "3" + }, + { + "startTime": "09:45:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "48", + "title": "Salak", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + }, + { + "id": "49", + "title": "Tomato", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "0" + }, + { + "startTime": "09:00:00", + "endTime": "11:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "1" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "4" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "16:00:00", + "endTime": "17:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "17:00:00", + "endTime": "18:00:00", + "status": "DEFAULT", + "id": "8" + }, + { + "startTime": "18:00:00", + "endTime": "19:00:00", + "status": "DEFAULT", + "id": "9" + }, + { + "startTime": "19:00:00", + "endTime": "20:00:00", + "status": "DEFAULT", + "id": "10" + } + ], + "startTime": "08:00:00", + "endTime": "20:00:00", + "interval": 30 + } + ] + }, + { + "id": "50", + "title": "Uva Ursi", + "subtitle": "Eclipse", + "capacity": "8", + "timelines": [ + { + "date": "2024-09-10", + "disabled": false, + "slots": [ + { + "startTime": "08:00:00", + "endTime": "09:00:00", + "status": "DEFAULT", + "id": "1" + }, + { + "startTime": "09:00:00", + "endTime": "10:00:00", + "status": "DEFAULT", + "id": "2" + }, + { + "startTime": "10:00:00", + "endTime": "11:00:00", + "status": "DEFAULT", + "id": "3" + }, + { + "startTime": "11:00:00", + "endTime": "12:00:00", + "status": "OCCUPIED", + "label": "Booking owner name", + "title": "booking title", + "id": "4" + }, + { + "startTime": "12:00:00", + "endTime": "13:00:00", + "status": "DEFAULT", + "id": "5" + }, + { + "startTime": "13:00:00", + "endTime": "14:00:00", + "status": "DEFAULT", + "id": "6" + }, + { + "startTime": "14:00:00", + "endTime": "15:00:00", + "status": "DEFAULT", + "id": "7" + }, + { + "startTime": "15:00:00", + "endTime": "16:00:00", + "status": "DEFAULT", + "id": "8" + } + ], + "startTime": "08:00:00", + "endTime": "16:00:00", + "interval": 30 + } + ] + } + ] +} From fa6d683b53799b4a9a21096a165e449bd54b8755 Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 14:01:25 +0800 Subject: [PATCH 0490/1949] [BOOKINGSG-6090-timetable][JZ|FY] Re-export TimeTable --- src/index.ts | 1 + src/timetable/index.ts | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 src/timetable/index.ts diff --git a/src/index.ts b/src/index.ts index d6a3b0832..cd62bffaf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -74,6 +74,7 @@ export * from "./time-slot-bar-week"; export * from "./time-slot-week-view"; export * from "./timeline"; export * from "./timepicker"; +export * from "./timetable"; export * from "./toast"; export * from "./toggle"; export * from "./tooltip"; diff --git a/src/timetable/index.ts b/src/timetable/index.ts new file mode 100644 index 000000000..7df3938bc --- /dev/null +++ b/src/timetable/index.ts @@ -0,0 +1,2 @@ +export * from "./timetable"; +export * from "./types"; From 56685cdfb61a22ecc0f14c78d18dcf4fb2b32ae0 Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 14:01:54 +0800 Subject: [PATCH 0491/1949] [BOOKINGSG-6090-timetable][JZ|FY] Add stories and docs for TimeTable component --- stories/timetable/props-table.tsx | 367 ++++++++++++++++++++++++ stories/timetable/timetable.mdx | 60 ++++ stories/timetable/timetable.stories.tsx | 351 ++++++++++++++++++++++ 3 files changed, 778 insertions(+) create mode 100644 stories/timetable/props-table.tsx create mode 100644 stories/timetable/timetable.mdx create mode 100644 stories/timetable/timetable.stories.tsx diff --git a/stories/timetable/props-table.tsx b/stories/timetable/props-table.tsx new file mode 100644 index 000000000..855c6ffa5 --- /dev/null +++ b/stories/timetable/props-table.tsx @@ -0,0 +1,367 @@ +import { ApiTable } from "../storybook-common/api-table"; +import { ApiTableSectionProps } from "../storybook-common/api-table/types"; + +const DATA: ApiTableSectionProps[] = [ + { + name: "TimeTableProps", + attributes: [ + { + name: "date", + mandatory: true, + description: ( + <> + The date string to display, any format that is + acceptable by Dayjswill work. + + ), + propTypes: ["string"], + }, + { + name: "emptyContent", + mandatory: true, + description: ( + <> + The props to determine what this component should render + if there is no content. Note that it is determined as + empty when totalRecords=0or + rowData=[]. + + ), + propTypes: ["EmptyContentProps"], + }, + { + name: "rowData", + mandatory: true, + description: "The data used to render each unique rows", + propTypes: ["RowData[]"], + }, + { + name: "isLoading", + mandatory: true, + description: + "The loading toggle to render the loading animation.", + propTypes: ["boolean"], + }, + { + name: "minTime", + description: + "The start time of this time table in HH:mm format.", + propTypes: ["string"], + }, + { + name: "maxTime", + description: "The end time of this time table in HH:mm format.", + propTypes: ["string"], + }, + { + name: "minDate", + description: "The minimum date allowed for date navigation.", + propTypes: ["string"], + }, + { + name: "maxDate", + description: "The maximum date allowed for date navigation,", + propTypes: ["string"], + }, + { + name: "totalRecords", + description: ( + <> + To display the total number of records and also to let + this component know when it is fully loaded.
    + Note: Total records section will not be rendered + if this prop is not passed in. + + ), + propTypes: ["number"], + }, + { + name: "width", + description: "The width of this time table component.", + propTypes: ["string"], + }, + { + name: "height", + description: "The height of this time table component.", + propTypes: ["string"], + }, + { + name: "outsideOpHoursCellCustomPopover", + description: ( + <> + The props for rendering any custom popover for the + automatically filled blockedcells. + + ), + propTypes: ["CustomPopoverProps"], + }, + { + name: "onRefresh", + description: ( + <> + The callback function to trigger when the refresh button + is clicked.
    + Note: Refresh button will not be rendered if this + prop is not passed in. + + ), + propTypes: ["() => void"], + }, + { + name: "onPage", + description: + "The callback function to trigger when pagination happens.", + propTypes: ["() => void"], + }, + { + name: "onLeftArrowClick", + description: ( + <> + The callback function to trigger when the left arrow has + been clicked on the date navigator component. +
    + Note: Arrow button will not be rendered if this + prop is not passed in. + + ), + propTypes: ["(currentDate: string) => void"], + }, + { + name: "onRightArrowClick", + description: ( + <> + The callback function to trigger when the right arrow + has been clicked on the date navigator component. +
    + Note: Arrow button will not be rendered if this + prop is not passed in. + + ), + propTypes: ["(currentDate: string) => void"], + }, + { + name: "onNameClick", + description: + "The callback function to trigger when the row header name has been clicked.", + propTypes: ["(rowData: RowData, e: React.MouseEvent) => void"], + }, + { + name: "onCellClick", + description: + "The callback function to trigger when a cell has been clicked.", + propTypes: ["(data: RowCellData, e: React.MouseEvent) => void"], + }, + ], + }, + { + name: "EmptyContentProps", + attributes: [ + { + name: "description", + mandatory: true, + description: + "The description text to show when there is no content to display", + propTypes: ["string"], + }, + { + name: "illustrationScheme", + mandatory: true, + description: + "The scheme to use, which decides what image to display for empty content", + propTypes: [ + `"base"`, + `"bookingsg"`, + `"ccube"`, + `"rbs"`, + `"mylegacy"`, + ], + }, + ], + }, + { + name: "RowData", + attributes: [ + { + name: "id", + mandatory: true, + description: ( + <> + The identifier for this row. This can be useful if you + intend to utilise the onNameClickcallback, + as the RowDatawill get passed to the + callback. + + ), + propTypes: ["string"], + }, + { + name: "name", + mandatory: true, + description: "The row header name to be rendered.", + propTypes: ["string"], + }, + { + name: "rowCells", + mandatory: true, + description: + "The array of row cells to be rendered in this row of data.", + propTypes: ["RowCellData[]"], + }, + { + name: "subtitle", + description: "The row header subtitle to be rendered.", + propTypes: ["string", "JSX.Element"], + }, + { + name: "rowHeaderCustomPopover", + description: + "The props for rendering any custom popover for this row header", + propTypes: ["CustomPopoverProps"], + }, + { + name: "rowMinTime", + description: ( + <> + The starting time for this row in HH:mm format.
    + Defaults to minTimefrom + TimeTableProps.
    + This component will automatically fill + blockedcells fromminTimeto + this time. + + ), + propTypes: ["string"], + }, + { + name: "rowMaxTime", + description: ( + <> + The ending time for this row in HH:mm format.
    + Defaults to maxTimefrom + TimeTableProps.
    + This component will automatically fill + blockedcells tillmaxTimefrom + this time. + + ), + propTypes: ["string"], + }, + ], + }, + { + name: "RowCellData", + attributes: [ + { + name: "id", + mandatory: true, + description: ( + <> + The identifier for this cell. This can be useful if you + intend to utilise the onCellClickcallback, + as the RowCellDatawill get passed to the + callback. + + ), + propTypes: ["string"], + }, + { + name: "startTime", + mandatory: true, + description: "The starting time of this cell. In HH:mm format.", + propTypes: ["string"], + }, + { + name: "endTime", + mandatory: true, + description: "The ending time of this cell. In HH:mm format.", + propTypes: ["string"], + }, + { + name: "status", + description: ( + <> + The status of this cell, which determines the style it + will be rendered in. +
    + NOTE: undefined or blocked cells will have mouse + disabled hover interaction and will not trigger the + onCellClickcallback. + + ), + propTypes: [`"filled"`, `"blocked"`, `"default"`], + }, + { + name: "title", + description: "The title to show for this cell.", + propTypes: ["string"], + }, + { + name: "subtitle", + description: "The subtitle to show for this cell.", + propTypes: ["string"], + }, + { + name: "customPopover", + description: ( + <> + The props for rendering any custom popover for the cell. +
    + Warning: Ensure that there is no conflict when + handlingonClickcallback and a popover + trigger=click for this cell. + + ), + propTypes: ["CustomPopoverProps"], + }, + ], + }, + { + name: "CustomPopoverProps", + attributes: [ + { + name: "trigger", + mandatory: true, + description: "The interaction to trigger the popover.", + propTypes: [`"click"`, `"hover"`], + }, + { + name: "content", + mandatory: true, + description: "The content to be rendered within the popover.", + propTypes: ["string", "JSX.Element"], + }, + { + name: "width", + description: + "The custom width for this popover, can be in any units (px/rem..)", + propTypes: ["string"], + }, + { + name: "padding", + description: + "The custom padding for this popover, can be in any units (px/rem..)", + propTypes: ["string"], + }, + { + name: "delay", + description: ( + <> + The delay for the popover to appear upon hover in + milliseconds.
    + Note: This delay only applies for when the + trigger type is of typehover. + + ), + propTypes: ["{ open: number, close: number }"], + }, + { + name: "offset", + description: + "How much offset (in px) to apply for the popover.", + propTypes: ["number"], + }, + ], + }, +]; + +export const PropsTable = () => ; diff --git a/stories/timetable/timetable.mdx b/stories/timetable/timetable.mdx new file mode 100644 index 000000000..f2d76f195 --- /dev/null +++ b/stories/timetable/timetable.mdx @@ -0,0 +1,60 @@ +import { Canvas, Meta } from "@storybook/blocks"; +import { Heading3, Secondary, Title } from "../storybook-common"; +import * as TimeTableStories from "./timetable.stories"; +import { PropsTable } from "./props-table"; + + + +TimeTable + +Overview + +A component that displays a timetable to view a schedule for a specific day + +```tsx +import { TimeTable } from "@lifesg/react-design-system/timetable"; +``` + + + +TimeTable with navigation arrows +The timetable is using the `DateNavigator` component when `onRightArrowClick` and +`onLeftArrowClick` props are passed in. + +You may use `minDate` and `maxDate` to specify +how far in the future or past the timetable can be viewed until. + +_(In this example, +the user can only view the timetable 2 days before today and 2 days after today)_ + + + +Lazy Load + +Clicking onto the refresh icon on the top left-hand corner will trigger a refresh on the component level. + +Lazy load is also enabled if `onPage` callback is passed in + + + +Customisable popover width and padding + +You may choose to customise the padding and width of the popover for filled and disabled cells through `filledCellPopoverSize` and `blockedCellPopoverSize` respectively + +Do note that if the custom popover trigger is set to click, it will override the behaviour with the onClick callback for each cell + + + +TimeTable with no popover content + +If there's no `blockedCellHoverContent` or `filledBlockClickContent` provided, the popover will not appear + + + +No results found + + + +Component API + + diff --git a/stories/timetable/timetable.stories.tsx b/stories/timetable/timetable.stories.tsx new file mode 100644 index 000000000..359ef9676 --- /dev/null +++ b/stories/timetable/timetable.stories.tsx @@ -0,0 +1,351 @@ +import { PinIcon } from "@lifesg/react-icons"; +import type { Meta, StoryObj } from "@storybook/react"; +import dayjs from "dayjs"; +import { useEffect, useState } from "react"; +import { Color, PopoverV2TriggerType, Text } from "../../src"; +import { TimeTable } from "../../src/timetable/timetable"; +import { RowCellData, RowData } from "../../src/timetable/types"; +import { StyledHoverContent, getTimeTableData, lazyLoad } from "./mock-data"; + +type Component = typeof TimeTable; + +const meta: Meta = { + title: "Modules/TimeTable", + component: TimeTable, +}; + +export default meta; + +export const Default: StoryObj = { + render: () => { + return ( + <> + + + ); + }, +}; + +export const TimeTableWithNavigation: StoryObj = { + render: () => { + const timeTableData = getTimeTableData(); + + const [results, setResults] = useState(getTimeTableData().rowData); + const [date, setDate] = useState(timeTableData.date); + const [loading, setLoading] = useState(timeTableData.isLoading); + + const onLeftArrowClick = (currentDate: string) => { + const newDate = dayjs(currentDate) + .add(-1, "day") + .format("YYYY-MM-DD"); + setDate(newDate); + setLoading(true); + setTimeout(() => { + setResults(getTimeTableData(newDate).rowData); + setLoading(false); + }, 1000); + }; + + const onRightArrowClick = (currentDate: string) => { + const newDate = dayjs(currentDate) + .add(1, "day") + .format("YYYY-MM-DD"); + setDate(newDate); + setLoading(true); + setTimeout(() => { + setResults(getTimeTableData(newDate).rowData); + setLoading(false); + }, 1000); + }; + + const onCellClick = (data: RowCellData) => { + alert( + `Clicked on cell for ${data.id}, start: ${data.startTime}, end: ${data.endTime}, should redirect user to booking form with these data` + ); + }; + + return ( + <> + + + ); + }, +}; + +export const TimeTableWithLazyLoad: StoryObj = { + render: () => { + const timeTableData = getTimeTableData(); + const [results, setResults] = useState([]); + const [date, setDate] = useState(timeTableData.date); + const [loading, setLoading] = useState(false); + const [page, setPage] = useState(1); + + useEffect(() => { + setTimeout(() => { + const results = lazyLoad(page); + setResults((prev) => [...prev, ...results]); + }, 2000); + }, [page]); + + const onLeftArrowClick = (currentDate: string) => { + const newDate = dayjs(currentDate) + .add(-1, "day") + .format("YYYY-MM-DD"); + setDate(newDate); + setLoading(true); + setTimeout(() => { + setResults(lazyLoad(1)); + setLoading(false); + }, 1000); + }; + + const onRightArrowClick = (currentDate: string) => { + const newDate = dayjs(currentDate) + .add(1, "day") + .format("YYYY-MM-DD"); + setDate(newDate); + setLoading(true); + setTimeout(() => { + setResults(lazyLoad(1)); + setLoading(false); + }, 1000); + }; + + const onRefresh = () => { + setLoading(true); + setTimeout(() => { + setResults(lazyLoad(1)); + setLoading(false); + }, 5000); + }; + + const onCellClick = (data: RowCellData) => { + alert( + `Clicked on cell for ${data.id}, start: ${data.startTime}, end: ${data.endTime}, should redirect user to booking form with these data` + ); + }; + + return ( + <> + setPage(page + 1)} + totalRecords={50} + onCellClick={onCellClick} + onRightArrowClick={onRightArrowClick} + onLeftArrowClick={onLeftArrowClick} + /> + + ); + }, +}; + +export const TimeTableWithNoPopoverContent: StoryObj = { + render: () => { + const onCellClick = (data: RowCellData) => { + alert( + `Clicked on cell for ${data.id}, start: ${data.startTime}, end: ${data.endTime}, should redirect user to booking form with these data` + ); + }; + return ( + <> + + + ); + }, +}; + +export const TimeTableWithStyledPopovers: StoryObj = { + render: () => { + const onCellClick = (data: RowCellData) => { + if (data.status === "filled") return; + alert( + `Clicked on cell for ${data.id}, start: ${data.startTime}, end: ${data.endTime}, should redirect user to booking form with these data` + ); + }; + + const onNameClick = (rowData: RowData, e: React.MouseEvent) => { + alert(`Clicked on row header for ${rowData.name}`); + }; + + const buildCustomPopover = (row: RowData, cell: RowCellData) => { + switch (cell.status) { + case "filled": { + return { + customPopover: { + trigger: "hover" as PopoverV2TriggerType, + content: ( +
    +
    + + {row.name} + + + {dayjs().format("D MMM YYYY, ddd")}{" "} + {`${dayjs( + cell.startTime, + "HH:mm" + ).format("HH:mma")} - ${dayjs( + cell.endTime, + "HH:mm" + ).format("HH:mma")}`} + +
    + +
    + + Booking title + + {cell.title} +
    +
    + ), + width: "400px", + padding: "3rem", + offset: 0, + delay: { open: 1250, close: 1250 }, + }, + }; + } + case "default": { + return { + customPopover: { + trigger: "hover" as PopoverV2TriggerType, + content: "Available", + offset: 0, + delay: { open: 0, close: 0 }, + }, + }; + } + } + }; + + const rowData = getTimeTableData().rowData.map((row) => { + return { + ...row, + rowHeaderCustomPopover: { + trigger: "hover" as PopoverV2TriggerType, + content: ( + <> + {row.name} + + + Eclipse + + + ), + offset: 0, + delay: { open: 500, close: 0 }, + }, + outsideOpHoursCellCustomPopover: { + trigger: "hover" as PopoverV2TriggerType, + content: "Outside operating hours", + offset: 0, + delay: { open: 0, close: 0 }, + }, + rowCells: row.rowCells.map((cell) => { + return { + ...cell, + ...buildCustomPopover(row, cell), + }; + }), + }; + }); + + return ( + <> + + + ); + }, +}; + +export const TimeTableWithEmptyContent: StoryObj = { + render: () => { + return ( + <> + + + ); + }, +}; From 162f24532f3cd0119db1b2fbe9bf27e4330d3165 Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Thu, 26 Sep 2024 14:02:19 +0800 Subject: [PATCH 0492/1949] [BOOKINGSG-6090-timetable][JZ|FY] Add tests for TimeTable --- tests/timetable/timetable.spec.tsx | 269 +++++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 tests/timetable/timetable.spec.tsx diff --git a/tests/timetable/timetable.spec.tsx b/tests/timetable/timetable.spec.tsx new file mode 100644 index 000000000..0844760fd --- /dev/null +++ b/tests/timetable/timetable.spec.tsx @@ -0,0 +1,269 @@ +import { act, fireEvent, render, screen } from "@testing-library/react"; +import dayjs from "dayjs"; +import { TimeTable } from "../../src/timetable/timetable"; +import { RowData, TimeTableProps } from "../../src/timetable/types"; +import { lazyLoad } from "../../stories/timetable/mock-data"; + +describe("TimeTable", () => { + const date = dayjs("2024-09-11"); + + const timeTableMockData = { + date: date.format("YYYY-MM-DD"), + minTime: "06:20:00", + maxTime: "22:00:00", + maxDate: date.add(1, "month").format("YYYY-MM-DD"), + minDate: date.add(-11, "month").format("YYYY-MM-DD"), + totalRecords: 10, + rowData: [], + onNameClick: function (rowData: RowData): void { + alert(`Clicked on ${JSON.stringify(rowData)}`); + }, + emptyContent: { + illustrationScheme: "bookingsg", + description: + "There’s no data to show. You may need to adjust your search or filters. If you believe this is a mistake, try refreshing the page.", + }, + isLoading: false, + } as TimeTableProps; + + beforeEach(() => { + jest.resetAllMocks(); + jest.useFakeTimers().setSystemTime(new Date("2024-09-11")); + + global.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn(), + })); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + it("should render default timetable without errors", () => { + render( + + ); + expect(screen.getByText("11 September 2024")).toBeVisible(); + }); + + it("should have date navigator component visible if onRightArrowClick and onLeftArrowClick props are passed in", () => { + const onRightArrowClick = jest.fn(); + const onLeftArrowClick = jest.fn(); + + render( + + ); + const leftBtn = screen.getByTestId("date-navigator-left-arrow-btn"); + const rightBtn = screen.getByTestId("date-navigator-right-arrow-btn"); + expect(screen.getByText("11 September 2024")).toBeVisible(); + expect(leftBtn).toBeVisible(); + expect(rightBtn).toBeVisible(); + }); + + it("should not have have popover appear if there's no popover content", () => { + render( + + ); + const rowHeaderParent = screen.getByTestId("row-header-column-id"); + const firstRowHeader = rowHeaderParent.firstElementChild; + + const contentContainer = screen.getByTestId("content-container-id"); + const firstRowBar = contentContainer.firstElementChild; + const blockedCell = firstRowBar.children[0]; + const filledCell = firstRowBar.children[1]; + + fireEvent.mouseOver(firstRowHeader); + expect( + screen.queryByTestId("row-header-popover-card") + ).not.toBeInTheDocument(); + + fireEvent.mouseOver(blockedCell); + expect( + screen.queryByTestId("blocked-popover-card") + ).not.toBeInTheDocument(); + + fireEvent.mouseOver(filledCell); + expect( + screen.queryByTestId("filled-popover-card") + ).not.toBeInTheDocument(); + }); + + it("should have popover appear if there's popover content", () => { + render( + + ); + const rowHeaderParent = screen.getByTestId("row-header-column-id"); + const firstRowHeader = rowHeaderParent.firstElementChild; + const contentContainer = screen.getByTestId("content-container-id"); + const firstRowBar = contentContainer.firstElementChild; + const blockedCell = firstRowBar.children[0]; + const filledCell = firstRowBar.children[1]; + + fireEvent.mouseEnter(firstRowHeader); + expect(screen.queryByText("hello world123")).toBeVisible(); + expect( + screen.queryByTestId("row-header-popover-card") + ).toBeInTheDocument(); + + fireEvent.mouseEnter(blockedCell); + expect(screen.queryByText("skibididiidi ohio")).toBeVisible(); + expect( + screen.queryByTestId("blocked-popover-card") + ).toBeInTheDocument(); + + fireEvent.mouseEnter(filledCell); + expect(screen.queryByText("beeeboobeebooo")).toBeVisible(); + expect( + screen.queryByTestId("blocked-popover-card") + ).toBeInTheDocument(); + }); + + it("should trigger onNameClick if row header name are clicked", () => { + const onNameClick = jest.fn(); + + render( + + ); + const rowHeaderName = screen.getByTestId("1-row-header-title"); + + fireEvent.click(rowHeaderName); + expect(onNameClick).toHaveBeenCalledTimes(1); + }); + + it("should have show empty content display if no rowData is passed into TimeTable", () => { + render( + + ); + const emptyContent = screen.getByTestId("error-display"); + expect(screen.getByText("No results found")).toBeVisible(); + expect(emptyContent).toBeVisible(); + }); + + it("should have lazy load and a lazy loader should appear when user scrolls to the bottom of the TimeTable", async () => { + render( + lazyLoad(2)} + /> + ); + const container = screen.getByTestId("timetable-container-id"); + expect(screen.queryByTestId("lazy-loader")).toBeNull(); + + // Scroll to the bottom of the container + act(() => { + container.scrollTop = container.scrollHeight; + container.dispatchEvent(new Event("scroll")); // Trigger scroll event + }); + + expect(await screen.findByTestId("lazy-loader")).toBeInTheDocument(); + }); +}); From 5659e792b0287f33ea612b15a626cfa6288d09a7 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Thu, 26 Sep 2024 15:58:03 +0800 Subject: [PATCH 0493/1949] [CCUBE-1524][MAHI]Revert semantic storybook doc and update with only updated semantic tokens --- .../doc-semantic-colour-display.tsx | 44 ++++++++++++++++--- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/stories/theme/doc-elements/doc-semantic-colour-display.tsx b/stories/theme/doc-elements/doc-semantic-colour-display.tsx index c6d75ab95..58524da14 100644 --- a/stories/theme/doc-elements/doc-semantic-colour-display.tsx +++ b/stories/theme/doc-elements/doc-semantic-colour-display.tsx @@ -1,3 +1,4 @@ +import { ColourSpec } from "src/theme/colour-primitive/theme-helper"; import { getSemanticColour } from "src/theme/colour-semantic/theme-helper"; import { SemanticColourSet, ThemeSpec } from "src/theme/types"; import styled, { ThemeProvider, useTheme } from "styled-components"; @@ -9,21 +10,44 @@ interface SemanticColourPalette { const SemanticColourPalette = ({ tokens }: SemanticColourPalette) => { const theme = useTheme(); - return ( + // apply proxy to spy on the primitive token being accessed + let colourToken: string; + const proxy = { + get(target, prop) { + colourToken = prop; + return target[prop]; + }, + }; + const scheme = theme.colourScheme; + const original = ColourSpec.collections[scheme]; + ColourSpec.collections[scheme] = new Proxy(original, proxy); + + const component = ( {tokens.map((token) => { + colourToken = undefined; const colour = getSemanticColour(token)({ theme }); + const reference = colourToken || colour; + colourToken = undefined; return ( - {token} +
    + {token} + {reference} +
    ); })}
    ); + + // clean up proxy + ColourSpec.collections[scheme] = original; + + return component; }; interface SemanticColourDisplayProps { @@ -254,7 +278,7 @@ const Display = styled.div` margin-bottom: 2.5rem; &:last-child { - margin-bottom: 1rem; + margin-bottom: 3rem; } `; @@ -263,7 +287,7 @@ const Palette = styled.div``; const PaletteLabel = styled.div` font-size: 1.25rem; font-weight: bolder; - margin-bottom: 1rem; + margin-bottom: 1.5rem; `; const Swatch = styled.ul` @@ -271,13 +295,13 @@ const Swatch = styled.ul` flex-direction: column; margin: 0; padding: 0; - gap: 0.5rem; + gap: 0.25rem; `; const SwatchItem = styled.li` display: flex; justify-items: flex-start; - align-items: center; + align-items: flex-start; gap: 0.5rem; `; @@ -304,3 +328,11 @@ const SwatchLabel = styled.div` border-radius: 4px; padding: 0 0.5rem; `; + +const SwatchReference = styled.div` + font-family: monospace; + font-size: 0.875rem; + border-radius: 4px; + padding: 0 0.5rem; + color: #787878; +`; From 6e24078ec27855be7097b7bf89a2cbffe5353dea Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Thu, 26 Sep 2024 15:08:15 +0800 Subject: [PATCH 0494/1949] [CCUBE-1524][RL] Update order of tokens --- .../specs/lifesg-semantic-tokens.ts | 14 +++++++++----- src/theme/colour-semantic/theme-helper.ts | 12 ++++++++---- src/theme/colour-semantic/types.ts | 12 ++++++++---- .../doc-semantic-colour-display.tsx | 17 +++++------------ 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts b/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts index 1ee41851c..52ee2cd5c 100644 --- a/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts +++ b/src/theme/colour-semantic/specs/lifesg-semantic-tokens.ts @@ -52,6 +52,7 @@ export const LifeSGColourSet: SemanticColourSet = { "border-strong": getPrimitiveColour("neutral-70"), "border-primary": getPrimitiveColour("primary-50"), "border-primary-subtle": getPrimitiveColour("primary-60"), + "border-hover": getPrimitiveColour("primary-90"), "border-selected": getPrimitiveColour("primary-50"), @@ -61,6 +62,7 @@ export const LifeSGColourSet: SemanticColourSet = { "border-focus": getPrimitiveColour("primary-60"), "border-focus-strong": getPrimitiveColour("primary-50"), + "border-disabled": getPrimitiveColour("neutral-90"), "border-selected-disabled": getPrimitiveColour("neutral-70"), @@ -83,12 +85,13 @@ export const LifeSGColourSet: SemanticColourSet = { "bg-hover-neutral": getPrimitiveColour("neutral-95"), "bg-selected": getPrimitiveColour("primary-95"), - "bg-selected-strong": getPrimitiveColour("primary-90"), "bg-selected-hover": getPrimitiveColour("primary-90"), - "bg-selected-disabled": getPrimitiveColour("neutral-95"), - "bg-disabled": getPrimitiveColour("neutral-95"), + "bg-selected-strong": getPrimitiveColour("primary-90"), "bg-selected-strongest": getPrimitiveColour("primary-90"), + "bg-disabled": getPrimitiveColour("neutral-95"), + "bg-selected-disabled": getPrimitiveColour("neutral-95"), + "bg-success": getPrimitiveColour("success-100"), "bg-success-strong": getPrimitiveColour("success-50"), "bg-warning": getPrimitiveColour("warning-100"), @@ -115,11 +118,12 @@ export const LifeSGColourSet: SemanticColourSet = { // overlay "overlay-strong": "rgba(40, 40, 40, 0.95)", "overlay-subtle": "rgba(40, 40, 40, 0.20)", - "overlay-inverse-gradient": "rgba(255, 255, 255, 1)", - // hyperlink, focus ring + // hyperlink hyperlink: getPrimitiveColour("primary-50"), "hyperlink-inverse": "#FFCB6A", + + // focus ring "focus-ring": getPrimitiveColour("black"), "focus-ring-inverse": getPrimitiveColour("white"), }; diff --git a/src/theme/colour-semantic/theme-helper.ts b/src/theme/colour-semantic/theme-helper.ts index 78c2e365d..d38664e1a 100644 --- a/src/theme/colour-semantic/theme-helper.ts +++ b/src/theme/colour-semantic/theme-helper.ts @@ -93,6 +93,7 @@ export const ColourSemantic = { "border-primary-subtle": getSemanticColour("border-primary-subtle"), "border-hover": getSemanticColour("border-hover"), + "border-selected": getSemanticColour("border-selected"), "border-selected-subtle": getSemanticColour("border-selected-subtle"), "border-selected-subtlest": getSemanticColour("border-selected-subtlest"), @@ -100,6 +101,7 @@ export const ColourSemantic = { "border-focus": getSemanticColour("border-focus"), "border-focus-strong": getSemanticColour("border-focus-strong"), + "border-disabled": getSemanticColour("border-disabled"), "border-selected-disabled": getSemanticColour("border-selected-disabled"), @@ -122,11 +124,12 @@ export const ColourSemantic = { "bg-hover-neutral": getSemanticColour("bg-hover-neutral"), "bg-selected": getSemanticColour("bg-selected"), - "bg-selected-strong": getSemanticColour("bg-selected-strong"), "bg-selected-hover": getSemanticColour("bg-selected-hover"), - "bg-selected-disabled": getSemanticColour("bg-selected-disabled"), + "bg-selected-strong": getSemanticColour("bg-selected-strong"), "bg-selected-strongest": getSemanticColour("bg-selected-strongest"), + "bg-disabled": getSemanticColour("bg-disabled"), + "bg-selected-disabled": getSemanticColour("bg-selected-disabled"), "bg-success": getSemanticColour("bg-success"), "bg-success-strong": getSemanticColour("bg-success-strong"), @@ -156,11 +159,12 @@ export const ColourSemantic = { // overlay "overlay-strong": getSemanticColour("overlay-strong"), "overlay-subtle": getSemanticColour("overlay-subtle"), - "overlay-inverse-gradient": getSemanticColour("overlay-inverse-gradient"), - // hyperlink, focus ring + // hyperlink hyperlink: getSemanticColour("hyperlink"), "hyperlink-inverse": getSemanticColour("hyperlink-inverse"), + + // focus ring "focus-ring": getSemanticColour("focus-ring"), "focus-ring-inverse": getSemanticColour("focus-ring-inverse"), }; diff --git a/src/theme/colour-semantic/types.ts b/src/theme/colour-semantic/types.ts index 66acbd670..6e68b5f2a 100644 --- a/src/theme/colour-semantic/types.ts +++ b/src/theme/colour-semantic/types.ts @@ -61,6 +61,7 @@ export type SemanticColourSet = { "border-primary-subtle": SemanticColourValue; "border-hover": SemanticColourValue; + "border-selected": SemanticColourValue; "border-selected-subtle": SemanticColourValue; "border-selected-subtlest": SemanticColourValue; @@ -68,6 +69,7 @@ export type SemanticColourSet = { "border-focus": SemanticColourValue; "border-focus-strong": SemanticColourValue; + "border-disabled": SemanticColourValue; "border-selected-disabled": SemanticColourValue; @@ -90,11 +92,12 @@ export type SemanticColourSet = { "bg-hover-neutral": SemanticColourValue; "bg-selected": SemanticColourValue; - "bg-selected-strong": SemanticColourValue; "bg-selected-hover": SemanticColourValue; - "bg-selected-disabled": SemanticColourValue; + "bg-selected-strong": SemanticColourValue; "bg-selected-strongest": SemanticColourValue; + "bg-disabled": SemanticColourValue; + "bg-selected-disabled": SemanticColourValue; "bg-success": SemanticColourValue; "bg-success-strong": SemanticColourValue; @@ -122,11 +125,12 @@ export type SemanticColourSet = { // overlay "overlay-strong": SemanticColourValue; "overlay-subtle": SemanticColourValue; - "overlay-inverse-gradient": SemanticColourValue; - // hyperlink, focus ring + // hyperlink hyperlink: SemanticColourValue; "hyperlink-inverse": SemanticColourValue; + + // focus ring "focus-ring": SemanticColourValue; "focus-ring-inverse": SemanticColourValue; }; diff --git a/stories/theme/doc-elements/doc-semantic-colour-display.tsx b/stories/theme/doc-elements/doc-semantic-colour-display.tsx index 58524da14..35f8229b3 100644 --- a/stories/theme/doc-elements/doc-semantic-colour-display.tsx +++ b/stories/theme/doc-elements/doc-semantic-colour-display.tsx @@ -182,14 +182,13 @@ export const SemanticColourDisplay = ({ "bg-hover-strong", "bg-hover-subtle", "bg-hover-neutral", - "bg-primary-hover", ]} /> @@ -199,16 +198,14 @@ export const SemanticColourDisplay = ({ - Overlay From aae4a7e5b032eef32d7e04a6e2251f9bdd051760 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Fri, 27 Sep 2024 10:14:10 +0800 Subject: [PATCH 0495/1949] [CCUBE-1546][MAHI]Remove test cases and added breakpoint tokens to grid styling --- src/layout/container-style.tsx | 117 +++++++++++++++++++++++ src/layout/container.tsx | 75 +-------------- src/layout/types.ts | 2 +- tests/layout/layout-container.spec.tsx | 124 ------------------------- tests/layout/layout-content.spec.tsx | 104 --------------------- tests/layout/layout-section.spec.tsx | 80 ---------------- 6 files changed, 120 insertions(+), 382 deletions(-) create mode 100644 src/layout/container-style.tsx delete mode 100644 tests/layout/layout-container.spec.tsx delete mode 100644 tests/layout/layout-content.spec.tsx delete mode 100644 tests/layout/layout-section.spec.tsx diff --git a/src/layout/container-style.tsx b/src/layout/container-style.tsx new file mode 100644 index 000000000..aa94527ae --- /dev/null +++ b/src/layout/container-style.tsx @@ -0,0 +1,117 @@ +import styled, { css } from "styled-components"; +import { ContainerType } from "./types"; +import { MediaQuery } from "../theme/mediaquery/mediaquery-helper"; +import { Breakpoint } from "../theme"; + +interface StyleProps { + $type: ContainerType; + $stretch: boolean; +} + +export const StyledContainer = styled.div` + flex-grow: 1; + margin: 0 auto; + position: relative; + width: auto; + height: auto; + + ${(props) => { + if (props.$stretch) { + return css` + padding: 0 3rem; + `; + } else { + return css` + padding: 0 0.75rem; + /* Max width restrictions */ + max-width: 1440px; + + ${MediaQuery.MaxWidth.xl} { + max-width: 1140px; + } + `; + } + }} + + ${MediaQuery.MaxWidth.md} { + max-width: 720px; + } + ${MediaQuery.MaxWidth.sm} { + width: 100%; + padding: 0; + max-width: unset; + } + + ${(props) => { + switch (props.$type) { + case "grid": + return css` + column-gap: 2rem; + display: grid; + grid-template-columns: repeat( + ${Breakpoint["xxl-gutter"]}, + minmax(0, 1fr) + ); + + ${MediaQuery.MaxWidth.xl} { + column-gap: ${Breakpoint["xl-gutter"]}; + grid-template-columns: repeat( + ${Breakpoint["xl-column"]}, + minmax(0, 1fr) + ); + } + + ${MediaQuery.MaxWidth.lg} { + column-gap: ${Breakpoint["lg-gutter"]}; + grid-template-columns: repeat( + ${Breakpoint["lg-column"]}, + minmax(0, 1fr) + ); + } + + ${MediaQuery.MaxWidth.md} { + column-gap: ${Breakpoint["md-gutter"]}; + grid-template-columns: repeat( + ${Breakpoint["md-column"]}, + minmax(0, 1fr) + ); + } + + ${MediaQuery.MaxWidth.sm} { + column-gap: ${Breakpoint["sm-gutter"]}; + grid-template-columns: repeat( + ${Breakpoint["sm-column"]}, + minmax(0, 1fr) + ); + } + + ${MediaQuery.MaxWidth.xs} { + column-gap: ${Breakpoint["xs-gutter"]}; + grid-template-columns: repeat( + ${Breakpoint["xs-column"]}, + minmax(0, 1fr) + ); + } + + ${MediaQuery.MaxWidth.xxs} { + column-gap: ${Breakpoint["xss-gutter"]}; + grid-template-columns: repeat( + ${Breakpoint["xss-column"]}, + minmax(0, 1fr) + ); + } + `; + + case "flex-column": + return css` + display: flex; + flex-direction: column; + `; + case "flex": + default: + return css` + display: flex; + `; + } + }} +`; diff --git a/src/layout/container.tsx b/src/layout/container.tsx index 6dc985140..84798dd0b 100644 --- a/src/layout/container.tsx +++ b/src/layout/container.tsx @@ -1,7 +1,6 @@ import React from "react"; -import styled, { css } from "styled-components"; -import { MediaQuery } from "../theme/mediaquery/mediaquery-helper"; -import { ContainerProps, ContainerType, DivRef } from "./types"; +import { ContainerProps, DivRef } from "./types"; +import { StyledContainer } from "./container-style"; const Component = (props: ContainerProps, ref: DivRef): JSX.Element => { const { @@ -26,73 +25,3 @@ const Component = (props: ContainerProps, ref: DivRef): JSX.Element => { }; export const Container = React.forwardRef(Component); - -interface StyleProps { - $type: ContainerType; - $stretch: boolean; -} - -const StyledContainer = styled.div` - flex-grow: 1; - margin: 0 auto; - position: relative; - width: auto; - height: auto; - - ${(props) => { - if (props.$stretch) { - return css` - padding: 0 3rem; - `; - } else { - return css` - padding: 0 0.75rem; - /* Max width restrictions */ - max-width: 1320px; - - ${MediaQuery.MaxWidth.xl} { - max-width: 1140px; - } - `; - } - }} - ${MediaQuery.MaxWidth.md} { - max-width: 720px; - } - ${MediaQuery.MaxWidth.sm} { - width: 100%; - padding: 0; - max-width: unset; - } - - ${(props) => { - switch (props.$type) { - case "grid": - return css` - column-gap: 2rem; - display: grid; - grid-template-columns: repeat(12, minmax(0, 1fr)); - - ${MediaQuery.MaxWidth.md} { - column-gap: 1.5rem; - grid-template-columns: repeat(8, minmax(0, 1fr)); - } - - ${MediaQuery.MaxWidth.sm} { - column-gap: 1rem; - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - `; - case "flex-column": - return css` - display: flex; - flex-direction: column; - `; - case "flex": - default: - return css` - display: flex; - `; - } - }} -`; diff --git a/src/layout/types.ts b/src/layout/types.ts index 7bec2f333..c13679fa4 100644 --- a/src/layout/types.ts +++ b/src/layout/types.ts @@ -2,7 +2,7 @@ export interface CommonLayoutProps extends React.HTMLAttributes { children: React.ReactNode; "data-testid"?: string | undefined; - stretch?: boolean; + stretch?: boolean | undefined; } export type ContainerType = "flex" | "flex-column" | "grid"; diff --git a/tests/layout/layout-container.spec.tsx b/tests/layout/layout-container.spec.tsx deleted file mode 100644 index 21bc44841..000000000 --- a/tests/layout/layout-container.spec.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { render } from "@testing-library/react"; -import "jest-styled-components"; -import { ThemeProvider } from "styled-components"; -import { ThemeSpec } from "../../src/theme/types"; -import { Container } from "../../src/layout/container"; - -const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", -}; - -describe("Container Component", () => { - it("should render with flex layout by default", () => { - const { container } = render( - - Content - - ); - - expect(container.firstChild).toHaveStyleRule("display", "flex"); - }); - - it("should render with flex-column layout when type is 'flex-column'", () => { - const { container } = render( - - Content - - ); - - expect(container.firstChild).toHaveStyleRule("display", "flex"); - expect(container.firstChild).toHaveStyleRule( - "flex-direction", - "column" - ); - }); - - it("should render with grid layout when type is 'grid'", () => { - const { container } = render( - - Content - - ); - - expect(container.firstChild).toHaveStyleRule("display", "grid"); - expect(container.firstChild).toHaveStyleRule( - "grid-template-columns", - "repeat(12,minmax(0,1fr))" - ); - }); - - it("should apply stretch styles when 'stretch' prop is true", () => { - const { container } = render( - - Content - - ); - - expect(container.firstChild).toHaveStyleRule("padding", "0 3rem"); - expect(container.firstChild).toHaveStyleRule("width", "auto"); - }); - - it("should apply responsive styles based on media queries", () => { - const { container } = render( - - Content - - ); - - // Check styles for xl-max media query - expect(container.firstChild).toHaveStyleRule("max-width", "1140px", { - media: `screen and (max-width: 1440px)`, - }); - - expect(container.firstChild).toHaveStyleRule("max-width", "720px", { - media: `screen and (max-width: 767px)`, - }); - - expect(container.firstChild).toHaveStyleRule("width", "100%", { - media: `screen and (max-width: 420px)`, - }); - expect(container.firstChild).toHaveStyleRule("padding", "0", { - media: `screen and (max-width: 420px)`, - }); - expect(container.firstChild).toHaveStyleRule("max-width", "unset", { - media: `screen and (max-width: 420px)`, - }); - }); - - it("should apply responsive grid styles based on media queries", () => { - const { container } = render( - - Content - - ); - - // Check grid styles for md-max media query - expect(container.firstChild).toHaveStyleRule("column-gap", "1.5rem", { - media: `screen and (max-width: 767px)`, - }); - expect(container.firstChild).toHaveStyleRule( - "grid-template-columns", - "repeat(8,minmax(0,1fr))", - { - media: `screen and (max-width: 767px)`, - } - ); - - expect(container.firstChild).toHaveStyleRule("column-gap", "1rem", { - media: `screen and (max-width: 420px)`, - }); - expect(container.firstChild).toHaveStyleRule( - "grid-template-columns", - "repeat(4,minmax(0,1fr))", - { - media: `screen and (max-width: 420px)`, - } - ); - }); -}); diff --git a/tests/layout/layout-content.spec.tsx b/tests/layout/layout-content.spec.tsx deleted file mode 100644 index 5b576462d..000000000 --- a/tests/layout/layout-content.spec.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { render } from "@testing-library/react"; -import "jest-styled-components"; -import { ThemeProvider } from "styled-components"; -import { ThemeSpec } from "../../src/theme/types"; -import { Content } from "../../src/layout/content"; - -const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", -}; -// Test it out on the browser -describe("Content Component", () => { - it("should render correctly with default props", () => { - const { container, getByTestId } = render( - - Test Content - - ); - - // Verify that the Section and Container components are rendered - const section = getByTestId("content"); - const containerElement = getByTestId("content-container"); - - expect(section).toBeInTheDocument(); - expect(containerElement).toBeInTheDocument(); - - // Verify default styling - expect(section).toHaveStyleRule("display", "block"); - expect(containerElement).toHaveStyleRule("display", "flex"); - }); - - it("should apply stretch styles when 'stretch' prop is true", () => { - const { getByTestId } = render( - - Test Content - - ); - - const section = getByTestId("content"); - const containerElement = getByTestId("content-container"); - - // Verify stretch styles on Section - expect(section).toHaveStyleRule("padding", "0 1.5rem", { - media: `screen and (max-width: 1440px)`, - }); - - // Verify stretch styles on Container - expect(containerElement).toHaveStyleRule("padding", "0 3rem"); - }); - - it("should render Container with flex-column layout when type is 'flex-column'", () => { - const { getByTestId } = render( - - Test Content - - ); - - const containerElement = getByTestId("content-container"); - - // Verify that Container has flex-column layout - expect(containerElement).toHaveStyleRule("display", "flex"); - expect(containerElement).toHaveStyleRule("flex-direction", "column"); - }); - - it("should render Container with grid layout when type is 'grid'", () => { - const { getByTestId } = render( - - Test Content - - ); - - const containerElement = getByTestId("content-container"); - - // Verify that Container has grid layout - expect(containerElement).toHaveStyleRule("display", "grid"); - expect(containerElement).toHaveStyleRule( - "grid-template-columns", - "repeat(12,minmax(0,1fr))" - ); - }); - - it("should apply default padding when 'stretch' prop is not true", () => { - const { getByTestId } = render( - - Test Content - - ); - - const section = getByTestId("content"); - const containerElement = getByTestId("content-container"); - - // Verify default padding styles on Section - expect(section).toHaveStyleRule("padding", "0 1.5rem"); - - // Verify default padding styles on Container - expect(containerElement).toHaveStyleRule("padding", "0 0.75rem"); - expect(containerElement).toHaveStyleRule("max-width", "1320px"); - }); -}); diff --git a/tests/layout/layout-section.spec.tsx b/tests/layout/layout-section.spec.tsx deleted file mode 100644 index cd2a8b302..000000000 --- a/tests/layout/layout-section.spec.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { render } from "@testing-library/react"; -import "jest-styled-components"; -import { ThemeProvider } from "styled-components"; -import { ThemeSpec } from "../../src/theme/types"; -import { Section } from "../../src/layout/section"; - -const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", -}; - -describe("Section Component", () => { - it("should render with default block display and apply default padding when 'stretch' prop is not provided", () => { - const { container } = render( - -
    Content
    -
    - ); - - expect(container.firstChild).toHaveStyleRule("display", "block"); - expect(container.firstChild).toHaveStyleRule("padding", "0 1.5rem"); - expect(container.firstChild).toHaveStyleRule( - "padding-left", - "1.5rem !important" - ); - expect(container.firstChild).toHaveStyleRule( - "padding-right", - "1.5rem !important" - ); - }); - - it("should apply stretch styles when 'stretch' prop is true", () => { - const { container } = render( - -
    Content
    -
    - ); - - expect(container.firstChild).toHaveStyleRule("padding", "0 1.5rem", { - media: `screen and (max-width: 1440px)`, - }); - expect(container.firstChild).toHaveStyleRule( - "padding-left", - "1.5rem !important", - { - media: `screen and (max-width: 1440px)`, - } - ); - expect(container.firstChild).toHaveStyleRule( - "padding-right", - "1.5rem !important", - { - media: `screen and (max-width: 1440px)`, - } - ); - }); - - it("should apply media query styles correctly for default", () => { - const { container } = render( - -
    Content
    -
    - ); - - expect(container.firstChild).toHaveStyleRule("padding", "0 1.5rem"); - expect(container.firstChild).toHaveStyleRule( - "padding-left", - "1.5rem !important" - ); - expect(container.firstChild).toHaveStyleRule( - "padding-right", - "1.5rem !important" - ); - }); -}); From 1d7b2de167ab7c74e30f7653472fbfb6c0b747e5 Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Fri, 27 Sep 2024 10:56:23 +0800 Subject: [PATCH 0496/1949] [BOOKINGSG-6090][JZ|FY] Apply PR comments --- src/date-navigator/date-navigator.tsx | 52 +++++++++----------- src/date-navigator/types.ts | 1 + src/util/calendar-helper.ts | 40 --------------- src/util/time-helper.ts | 41 +++++++++++++++ tests/date-navigator/date-navigator.spec.tsx | 29 +++++------ 5 files changed, 79 insertions(+), 84 deletions(-) diff --git a/src/date-navigator/date-navigator.tsx b/src/date-navigator/date-navigator.tsx index 6d546f23b..25b28586e 100644 --- a/src/date-navigator/date-navigator.tsx +++ b/src/date-navigator/date-navigator.tsx @@ -15,7 +15,12 @@ import { DateNavigatorProps } from "./types"; export const DateNavigator = ({ selectedDate, - ...optionalProps + minDate, + maxDate, + isLoading, + onLeftArrowClick, + onRightArrowClick, + ...otherProps }: DateNavigatorProps) => { // ============================================================================= // CONST, STATE, REF @@ -30,32 +35,25 @@ export const DateNavigator = ({ : DateHelper.toDayjs(selectedDate).format("dddd"); // ============================================================================= - // EVENT HANDLERS + // HELPER FUNCTIONS // ============================================================================= const isLeftArrowDisabled = () => { - if (!optionalProps.minDate) { + if (!minDate) { return false; } return ( - CalendarHelper.isDisabledDay( - date, - undefined, - optionalProps.minDate - ) || DateHelper.isSame(date, optionalProps.minDate) + CalendarHelper.isDisabledDay(date, undefined, minDate) || + DateHelper.isSame(date, minDate) ); }; const isRightArrowDisabled = () => { - if (!optionalProps.maxDate) { + if (!maxDate) { return false; } return ( - CalendarHelper.isDisabledDay( - date, - undefined, - undefined, - optionalProps.maxDate - ) || DateHelper.isSame(date, optionalProps.maxDate) + CalendarHelper.isDisabledDay(date, undefined, undefined, maxDate) || + DateHelper.isSame(date, maxDate) ); }; @@ -63,19 +61,15 @@ export const DateNavigator = ({ // RENDER FUNCTIONS // ============================================================================= return ( - - {optionalProps.onLeftArrowClick && ( + + {onLeftArrowClick && ( optionalProps.onLeftArrowClick(selectedDate)} + aria-label="Previous day" + onClick={() => onLeftArrowClick(selectedDate)} > @@ -96,16 +90,14 @@ export const DateNavigator = ({ {dayText} - {optionalProps.onRightArrowClick && ( + {onRightArrowClick && ( - optionalProps.onRightArrowClick(selectedDate) - } + aria-label="Next day" + onClick={() => onRightArrowClick(selectedDate)} > diff --git a/src/date-navigator/types.ts b/src/date-navigator/types.ts index 44fcc54d7..626800034 100644 --- a/src/date-navigator/types.ts +++ b/src/date-navigator/types.ts @@ -1,4 +1,5 @@ export interface DateNavigatorProps { + id?: string | undefined; className?: string | undefined; "data-testid"?: string | undefined; selectedDate: string; diff --git a/src/util/calendar-helper.ts b/src/util/calendar-helper.ts index 07cbc6918..45c1afba3 100644 --- a/src/util/calendar-helper.ts +++ b/src/util/calendar-helper.ts @@ -12,46 +12,6 @@ dayjs.extend(isSameOrAfter); dayjs.extend(customParseFormat); dayjs.extend(timezone); export namespace CalendarHelper { - /** - * Rounds time to the nearest hour, e.g 6:30 will be clamped to 6:00 - * @param time the input time in HH:mm format - * @param toNextHour to clamp to next hour instead, e.g. 6:30 will be clamped to 7:00 - * @returns - */ - export const roundToNearestHour = (time: string, toNextHour?: boolean) => { - const formattedTime = dayjs(time, "HH:mm"); - const roundedTime = - formattedTime.minute() === 0 - ? formattedTime - : toNextHour - ? formattedTime.minute(0).add(1, "hour") - : formattedTime.minute(0); - return roundedTime.format("HH:mm"); - }; - - export const generateHourlyIntervals = ( - startTime: string, - endTime: string, - generatedFormat = "ha" - ) => { - const format = "HH:mm"; - let start = dayjs(startTime, format); - let end = dayjs(endTime, format); - - if (start.isSame(end)) { - end = end.add(1, "day"); - } - - const intervals: string[] = []; - - while (start.isBefore(end)) { - intervals.push(start.format(generatedFormat)); - start = start.add(1, "hour"); - } - - return intervals; - }; - export const generateDays = (calendarDate: Dayjs): Dayjs[][] => { const firstDayOfTheMonth = calendarDate.startOf("month"); diff --git a/src/util/time-helper.ts b/src/util/time-helper.ts index 70d9f7012..a075b7034 100644 --- a/src/util/time-helper.ts +++ b/src/util/time-helper.ts @@ -1,3 +1,4 @@ +import dayjs from "dayjs"; import { StringHelper } from "./string-helper"; // ============================================================================= @@ -27,6 +28,46 @@ interface TimeValuesPlain { // HELPER FUNCTIONS // ============================================================================= export namespace TimeHelper { + /** + * Rounds time to the nearest hour, e.g 6:30 will be clamped to 6:00 + * @param time the input time in HH:mm format + * @param toNextHour to clamp to next hour instead, e.g. 6:30 will be clamped to 7:00 + * @returns + */ + export const roundToNearestHour = (time: string, toNextHour?: boolean) => { + const formattedTime = dayjs(time, "HH:mm"); + const roundedTime = + formattedTime.minute() === 0 + ? formattedTime + : toNextHour + ? formattedTime.minute(0).add(1, "hour") + : formattedTime.minute(0); + return roundedTime.format("HH:mm"); + }; + + export const generateHourlyIntervals = ( + startTime: string, + endTime: string, + generatedFormat = "ha" + ) => { + const format = "HH:mm"; + let start = dayjs(startTime, format); + let end = dayjs(endTime, format); + + if (start.isSame(end)) { + end = end.add(1, "day"); + } + + const intervals: string[] = []; + + while (start.isBefore(end)) { + intervals.push(start.format(generatedFormat)); + start = start.add(1, "hour"); + } + + return intervals; + }; + export const getTimeValues = ( format: TimeFormat, value?: string diff --git a/tests/date-navigator/date-navigator.spec.tsx b/tests/date-navigator/date-navigator.spec.tsx index 01ab10d45..55d5e089d 100644 --- a/tests/date-navigator/date-navigator.spec.tsx +++ b/tests/date-navigator/date-navigator.spec.tsx @@ -13,8 +13,8 @@ describe("DateNavigator", () => { jest.useRealTimers(); }); - it("should render a simple date displaying the selectedDate prop without navigation arrows", () => { - const { rerender } = render(); + it("should render current date as today", () => { + render(); expect(screen.getByText("5 September 2024")).toBeVisible(); expect(screen.getByText("Today")).toBeVisible(); expect( @@ -23,9 +23,11 @@ describe("DateNavigator", () => { expect( screen.queryByTestId("date-navigator-right-arrow-btn") ).not.toBeInTheDocument(); + }); + it("should render other date in full", () => { const tomorrow = "2024-09-06"; - rerender(); + render(); expect(screen.getByText("6 September 2024")).toBeVisible(); expect(screen.getByText("Friday")).toBeVisible(); expect( @@ -36,10 +38,6 @@ describe("DateNavigator", () => { ).not.toBeInTheDocument(); }); - it("should render the new date if it changes on rerender", () => { - render(); - }); - it("should render a date navigator with navigation arrows", () => { const onRightArrowClick = jest.fn(); const onLeftArrowClick = jest.fn(); @@ -85,32 +83,35 @@ describe("DateNavigator", () => { expect(rightArrowButton).toBeDisabled(); }); - it("should disable the corresponding buttons when the current date is ", () => { + it("should disable the left arrow button when the current date is at minDate", () => { const onRightArrowClick = jest.fn(); const onLeftArrowClick = jest.fn(); const minDate = "2024-08-05"; - const maxDate = "2024-10-05"; - const { rerender } = render( + render( ); const leftArrowButton = screen.getByTestId( "date-navigator-left-arrow-btn" ); expect(leftArrowButton).toBeDisabled(); - rerender( + }); + + it("should disable the right arrow button when the current date is at maxDate", () => { + const onRightArrowClick = jest.fn(); + const onLeftArrowClick = jest.fn(); + const maxDate = "2024-10-05"; + render( + /> ); const rightArrowButton = screen.getByTestId( "date-navigator-right-arrow-btn" From 7baa6d0d0622f62517e82b40619034ad6eb2960c Mon Sep 17 00:00:00 2001 From: Tan Jing Zhi Date: Fri, 27 Sep 2024 11:00:06 +0800 Subject: [PATCH 0497/1949] [BOOKINGSG-6090][JZ|FY] Update props table --- stories/date-navigator/props-table.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/stories/date-navigator/props-table.tsx b/stories/date-navigator/props-table.tsx index 8310cacec..5fb194308 100644 --- a/stories/date-navigator/props-table.tsx +++ b/stories/date-navigator/props-table.tsx @@ -4,6 +4,11 @@ import { ApiTableSectionProps } from "../storybook-common/api-table/types"; const DATA: ApiTableSectionProps[] = [ { attributes: [ + { + name: "id", + description: "The identifier of the component", + propTypes: ["string"], + }, { name: "data-testid", description: "The test identifier of the component", From 3440a6dc0ae34e2288d1eb0c0b787f107610e9af Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Fri, 27 Sep 2024 13:56:40 +0800 Subject: [PATCH 0498/1949] [CCUBE-1554][MAHI]Change codemod to include hyperlink usage as well and extract constants to make code neater and following naming convention --- .../data.ts | 0 codemods/migrate-media-query/index.ts | 136 ++++++++++++++++++ codemods/migrate-mediaquery/index.ts | 95 ------------ codemods/migrate-text/data.ts | 10 +- codemods/migrate-text/index.ts | 119 ++++++++++----- .../test-data.ts | 0 .../transformer.spec.tsx | 2 +- tests/codemod/migrate-text/test-data.ts | 8 +- 8 files changed, 236 insertions(+), 134 deletions(-) rename codemods/{migrate-mediaquery => migrate-media-query}/data.ts (100%) create mode 100644 codemods/migrate-media-query/index.ts delete mode 100644 codemods/migrate-mediaquery/index.ts rename tests/codemod/{migrate-mediaQuery => migrate-media-query}/test-data.ts (100%) rename tests/codemod/{migrate-mediaQuery => migrate-media-query}/transformer.spec.tsx (98%) diff --git a/codemods/migrate-mediaquery/data.ts b/codemods/migrate-media-query/data.ts similarity index 100% rename from codemods/migrate-mediaquery/data.ts rename to codemods/migrate-media-query/data.ts diff --git a/codemods/migrate-media-query/index.ts b/codemods/migrate-media-query/index.ts new file mode 100644 index 000000000..e56910c7e --- /dev/null +++ b/codemods/migrate-media-query/index.ts @@ -0,0 +1,136 @@ +import { API, FileInfo, JSCodeshift } from "jscodeshift"; +import { mediaQueryMap } from "./data"; + +// ======= Constants ======= // +// Import Paths +const importPathV2Media = "@lifesg/react-design-system/v2_media"; +const importPathDesignSystem = "@lifesg/react-design-system"; +const importPathTheme = "@lifesg/react-design-system/theme"; + +// Import Specifiers +const specifierV2MediaQuery = "V2_MediaQuery"; +const specifierMediaQuery = "MediaQuery"; +const specifierV2MediaWidths = "V2_MediaWidths"; + +// Member Expression Properties +const memberExpMaxWidth = "MaxWidth"; +const memberExpMinWidth = "MinWidth"; + +// Deprecated Warning +const deprecatedUsageWarning = `\x1b[31mDeprecated usage detected: V2_MediaWidths is deprecated and needs adjustment.\x1b[0m`; + +// Identifier Names +const identifierMediaQuery = "MediaQuery"; + +// ======= Transformer Function ======= // +export default function transformer(file: FileInfo, api: API) { + const j: JSCodeshift = api.jscodeshift; + const source = j(file.source); + + let isMediaQueryImportUpdated = false; + let isV2MediaWidthsUsed = false; + + // Change Import Declarations + source.find(j.ImportDeclaration).forEach((path) => { + const importPath = path.node.source.value; + + if ( + importPath === importPathV2Media || + importPath === importPathDesignSystem + ) { + const specifiers = path.node.specifiers; + let hasMediaQuerySpecifier = false; + + if (specifiers && specifiers.length > 0) { + specifiers.forEach((specifier) => { + if (j.ImportSpecifier.check(specifier)) { + // Handle V2_MediaQuery + if (specifier.imported.name === specifierV2MediaQuery) { + specifier.imported.name = specifierMediaQuery; + if ( + specifier.local && + specifier.local.name === specifierV2MediaQuery + ) { + specifier.local.name = specifierMediaQuery; + } + hasMediaQuerySpecifier = true; + } + + // Detect usage of V2_MediaWidths + if ( + specifier.imported.name === specifierV2MediaWidths + ) { + isV2MediaWidthsUsed = true; + } + } + }); + + // If MediaQuery was imported, set flag to update usages + if (hasMediaQuerySpecifier) { + isMediaQueryImportUpdated = true; + } + + // Update import path + if (importPath === importPathV2Media) { + path.node.source.value = importPathTheme; + } + } + } + }); + + // Handle Deprecated V2_MediaWidths Usage + if (isV2MediaWidthsUsed) { + let hasLoggedV2MediaWidthsWarning = false; + + source + .find(j.Identifier, { name: specifierV2MediaWidths }) + .forEach((path) => { + if (!hasLoggedV2MediaWidthsWarning) { + console.error( + `File: ${file.path}\n${deprecatedUsageWarning}` + ); + hasLoggedV2MediaWidthsWarning = true; + } + }); + } + + // Update MediaQuery Imports and Usages + if (isMediaQueryImportUpdated) { + // Rename all instances of V2_MediaQuery to MediaQuery + source + .find(j.Identifier, { name: specifierV2MediaQuery }) + .forEach((path) => { + path.node.name = specifierMediaQuery; + }); + + // Update Member Expressions related to MediaQuery + source.find(j.MemberExpression).forEach((path) => { + const object = path.node.object; + const property = path.node.property; + + if ( + j.MemberExpression.check(object) && + j.Identifier.check(object.object) && + object.object.name === identifierMediaQuery && + j.Identifier.check(object.property) && + (object.property.name === memberExpMaxWidth || + object.property.name === memberExpMinWidth) && + j.Identifier.check(property) + ) { + const queryType = object.property.name; + const mediaKey = property.name; + + // Check and replace mediaKey using mediaQueryMap + if ( + mediaQueryMap[queryType] && + mediaQueryMap[queryType][mediaKey] + ) { + const newMediaKey = mediaQueryMap[queryType][mediaKey]; + property.name = newMediaKey; + } + } + }); + } + + return source.toSource(); +} diff --git a/codemods/migrate-mediaquery/index.ts b/codemods/migrate-mediaquery/index.ts deleted file mode 100644 index 93218a2d8..000000000 --- a/codemods/migrate-mediaquery/index.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { API, FileInfo, JSCodeshift } from "jscodeshift"; -import { mediaQueryMap } from "./data"; - -export default function transformer(file: FileInfo, api: API, options: any) { - const j: JSCodeshift = api.jscodeshift; - const source = j(file.source); - - let isV2MediaQueryImport = false; - let isV2MediaWidthsUsed = false; - - source.find(j.ImportDeclaration).forEach((path) => { - const importPath = path.node.source.value; - - if (importPath === "@lifesg/react-design-system/v2_media") { - isV2MediaQueryImport = true; - - // loop over specifiers to rename V2_MediaQuery - if (path.node.specifiers && path.node.specifiers.length > 0) { - path.node.specifiers.forEach((specifier) => { - if (j.ImportSpecifier.check(specifier)) { - if (specifier.imported.name === "V2_MediaQuery") { - specifier.imported.name = "MediaQuery"; - if ( - specifier.local && - specifier.local.name === "V2_MediaQuery" - ) { - specifier.local.name = "MediaQuery"; - } - } else if ( - specifier.imported.name === "V2_MediaWidths" - ) { - isV2MediaWidthsUsed = true; - } - } - }); - - // change the import source path - path.node.source.value = "@lifesg/react-design-system/theme"; - } - } - }); - - if (isV2MediaWidthsUsed) { - let hasLoggedV2MediaWidthsWarning = false; - - source - .find(j.Identifier, { name: "V2_MediaWidths" }) - .forEach((path) => { - if (!hasLoggedV2MediaWidthsWarning) { - console.error( - `\x1b[31mDeprecated usage detected: V2_MediaWidths is deprecated and needs adjustment. File: ${file.path}\x1b[0m` - ); - hasLoggedV2MediaWidthsWarning = true; - } - }); - } - - if (isV2MediaQueryImport) { - // change all instances of V2_MediaQuery - source.find(j.Identifier, { name: "V2_MediaQuery" }).forEach((path) => { - path.node.name = "MediaQuery"; - }); - - // for nested member expression - source.find(j.MemberExpression).forEach((path) => { - const object = path.node.object; - const property = path.node.property; - - // checking the obj - if ( - j.MemberExpression.check(object) && // ensure obj is a MemberExpression - j.Identifier.check(object.object) && - object.object.name === "MediaQuery" && // check if MediaQuery - j.Identifier.check(object.property) && // max,min width - (object.property.name === "MaxWidth" || - object.property.name === "MinWidth") && - j.Identifier.check(property) - ) { - const queryType = object.property.name; - const mediaKey = property.name; - - // check if the mediaKey exists in the mediaQueryMap - if ( - mediaQueryMap[queryType] && - mediaQueryMap[queryType][mediaKey] - ) { - const newMediaKey = mediaQueryMap[queryType][mediaKey]; - property.name = newMediaKey; - } - } - }); - } - - return source.toSource(); -} diff --git a/codemods/migrate-text/data.ts b/codemods/migrate-text/data.ts index a301729fe..c19fb09c0 100644 --- a/codemods/migrate-text/data.ts +++ b/codemods/migrate-text/data.ts @@ -7,10 +7,12 @@ export const textComponentMap = { H2: "HeaderMD", H3: "HeaderSM", H4: "HeaderXS", - H5: "HeaderXS", - H6: "HeaderXS", + H5: "BodyMD", + H6: "BodySM", DBody: "HeaderSM", Body: "BodyBL", - BodySmall: "BodyLG", - XSmall: "LinkSM", + BodySmall: "BodyMD", + XSmall: "BodyXS", + "Hyperlink.Default": "LinkBL", + "Hyperlink.Small": "LinkSM", }; diff --git a/codemods/migrate-text/index.ts b/codemods/migrate-text/index.ts index c0695d50d..9a8250ab7 100644 --- a/codemods/migrate-text/index.ts +++ b/codemods/migrate-text/index.ts @@ -1,57 +1,110 @@ import { API, FileInfo, JSCodeshift } from "jscodeshift"; import { textComponentMap } from "./data"; -export default function transformer(file: FileInfo, api: API, options: any) { +// ======= Constants ======= // + +// Import Paths +const importPathV2Text = "@lifesg/react-design-system/v2_text"; +const importPathLib = "@lifesg/react-design-system"; +const importPathTypography = "@lifesg/react-design-system/typography"; + +// Import Specifiers +const specifierV2Text = "V2_Text"; +const specifierTypography = "Typography"; + +// JSX Identifiers +const jsxIdentifierV2Text = "V2_Text"; +const jsxIdentifierTypography = "Typography"; + +// ======= Transformer Function ======= // + +export default function transformer(file: FileInfo, api: API) { const j: JSCodeshift = api.jscodeshift; const source = j(file.source); let isLifesgImport = false; - // Check import declarations + // Process Import Declarations source.find(j.ImportDeclaration).forEach((path) => { const importPath = path.node.source.value; - // If the import is from lifesg ds , set to true - if (importPath === "@lifesg/react-design-system/v2_text") { - isLifesgImport = true; + // Check if the import is from the target design system path + if (importPath === importPathV2Text || importPath === importPathLib) { + // Iterate over each specifier in the import declaration + path.node.specifiers?.forEach((specifier) => { + if ( + j.ImportSpecifier.check(specifier) && + specifier.imported.name === specifierV2Text + ) { + // Rename imported specifier from V2_Text to Typography + specifier.imported.name = specifierTypography; - // Check if specifiers exist and iterate over them - if (path.node.specifiers && path.node.specifiers.length > 0) { - path.node.specifiers.forEach((specifier) => { + // Rename local specifier if it matches V2_Text if ( - j.ImportSpecifier.check(specifier) && - specifier.imported.name === "V2_Text" + specifier.local && + specifier.local.name === specifierV2Text ) { - specifier.imported.name = "Typography"; - if ( - specifier.local && - specifier.local.name === "V2_Text" - ) { - specifier.local.name = "Typography"; - } - - // Update the import path - path.node.source.value = - "@lifesg/react-design-system/typography"; + specifier.local.name = specifierTypography; } - }); - } + + // Update the import path to the new typography module + path.node.source.value = importPathTypography; + isLifesgImport = true; + } + }); } }); - // change if import from @lifesg/react-design-system + // Helper Function to Replace Member Expressions + const replaceWithNewComponent = (path: any, newComponentValue: string) => { + path.replace( + j.memberExpression( + j.identifier(jsxIdentifierTypography), + j.identifier(newComponentValue) + ) + ); + }; + if (isLifesgImport) { - // update JSX and identifiers - source.find(j.JSXMemberExpression).forEach((path) => { - const { object, property } = path.node; + // Rename Identifiers from V2_Text to Typography + source + .find(j.Identifier, { name: jsxIdentifierV2Text }) + .forEach((path) => { + path.node.name = jsxIdentifierTypography; + }); + + // Update Member Expressions + source.find(j.MemberExpression).forEach((path) => { + let currentPath = path.node; + const propertyNameParts: string[] = []; + let startsWithTypography = false; + + // Traverse the member expression to collect property names + while (j.MemberExpression.check(currentPath)) { + const property = currentPath.property; + const object = currentPath.object; + + if (j.Identifier.check(property)) { + propertyNameParts.unshift(property.name); + } - // Change V2_text to typography - if (j.JSXIdentifier.check(object) && object.name === "V2_Text") { - object.name = "Typography"; + if (j.MemberExpression.check(object)) { + currentPath = object; + } else if (j.Identifier.check(object)) { + if (object.name === jsxIdentifierTypography) { + startsWithTypography = true; + } + break; + } else { + break; + } + } - // Map properties (e.g., Body -> BodyBL) - if (textComponentMap[property.name]) { - property.name = textComponentMap[property.name]; + if (startsWithTypography) { + const propertyName = propertyNameParts.join("."); + const newTypographyValue = textComponentMap[propertyName]; + if (newTypographyValue) { + replaceWithNewComponent(path, newTypographyValue); } } }); diff --git a/tests/codemod/migrate-mediaQuery/test-data.ts b/tests/codemod/migrate-media-query/test-data.ts similarity index 100% rename from tests/codemod/migrate-mediaQuery/test-data.ts rename to tests/codemod/migrate-media-query/test-data.ts diff --git a/tests/codemod/migrate-mediaQuery/transformer.spec.tsx b/tests/codemod/migrate-media-query/transformer.spec.tsx similarity index 98% rename from tests/codemod/migrate-mediaQuery/transformer.spec.tsx rename to tests/codemod/migrate-media-query/transformer.spec.tsx index 5e34ec2cc..0f8c1f220 100644 --- a/tests/codemod/migrate-mediaQuery/transformer.spec.tsx +++ b/tests/codemod/migrate-media-query/transformer.spec.tsx @@ -24,7 +24,7 @@ describe("Codemod Transformer for V2_Layout to Layout", () => { // Execute the jscodeshift command for the codemod execSync( - `jscodeshift --parser=tsx -t ./codemods/migrate-mediaquery ${outputPath}` + `jscodeshift --parser=tsx -t ./codemods/migrate-media-query ${outputPath}` ); // Check the transformed code diff --git a/tests/codemod/migrate-text/test-data.ts b/tests/codemod/migrate-text/test-data.ts index 7e9e5e64b..ad65dc912 100644 --- a/tests/codemod/migrate-text/test-data.ts +++ b/tests/codemod/migrate-text/test-data.ts @@ -2,10 +2,13 @@ export const inputCode = ` import { V2_Text } from "@lifesg/react-design-system/v2_text"; +import { V2_Layout } from "@lifesg/react-design-system/v2_layout"; const ExampleComponent = () => (
    + Test This is body text + This is body text This is a heading This is smaller body text @@ -29,12 +32,15 @@ export default ExampleComponent; export const expectedOutputCode = ` import { Typography } from "@lifesg/react-design-system/typography"; +import { V2_Layout } from "@lifesg/react-design-system/v2_layout"; const ExampleComponent = () => (
    + Test This is body text + This is body text This is a heading - This is smaller body text + This is smaller body text Lorem ipsum dolor sit amet, consectetur adipiscing elit. From 980bcf260c6e5899a7f8f2ae60e470dec0806deb Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 27 Sep 2024 15:13:06 +0800 Subject: [PATCH 0499/1949] [V3][RL] Bump v3.0.0-alpha.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 81d8fa739..dda0e49f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.3", + "version": "3.0.0-alpha.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.3", + "version": "3.0.0-alpha.1", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index e3129d10b..595b6f151 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.7.0-canary.3", + "version": "3.0.0-alpha.1", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From e11c09cdb74dd70fbb525c577b2ad4cb0a365e0e Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 27 Sep 2024 15:13:44 +0800 Subject: [PATCH 0500/1949] [V3][RL] Remove dependency --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 595b6f151..43d3b2f1b 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "dependencies": { "@floating-ui/dom": "^1.5.4", "@floating-ui/react": "^0.26.6", - "@lifesg/react-design-system": "^2.7.0-canary.3", "fabric": "^5.3.0", "immer": "^10.0.2", "react-slider": "^2.0.6", From 9398a39ae40e6f30f7aee98820157688380516d8 Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Fri, 27 Sep 2024 15:57:37 +0800 Subject: [PATCH 0501/1949] [CCUBE-1545][MAHI]Adjust typings and props for link and also remove calculation for paragraph display --- src/theme/typography/types.ts | 12 ++++ src/typography/helper.ts | 61 +++---------------- src/typography/types.ts | 36 ++--------- src/typography/typography.tsx | 13 +--- .../Typography-Link.stories.tsx | 6 +- tests/typography/typography.spec.tsx | 54 ---------------- 6 files changed, 30 insertions(+), 152 deletions(-) diff --git a/src/theme/typography/types.ts b/src/theme/typography/types.ts index 855f409a5..3a85f1d89 100644 --- a/src/theme/typography/types.ts +++ b/src/theme/typography/types.ts @@ -7,6 +7,18 @@ export type TypographyCollectionMap = { export type TypographySetOptions = Partial; +export type TypographySizeType = + | "header-xxl" + | "header-xl" + | "header-lg" + | "header-md" + | "header-sm" + | "header-xs" + | "body-baseline" + | "body-lg" + | "body-md" + | "body-sm"; + export type TypographySet = { "header-xxl-light": CSSProp | string; "header-xxl-regular": CSSProp | string; diff --git a/src/typography/helper.ts b/src/typography/helper.ts index f59eb0edb..c984e03a6 100644 --- a/src/typography/helper.ts +++ b/src/typography/helper.ts @@ -1,71 +1,24 @@ import { css } from "styled-components"; -import { TypographyProps, TypographySizeType, TypographyWeight } from "./types"; -import { Colour, Font, Typography } from "../theme"; +import { TypographyProps, TypographyWeight } from "./types"; +import { Colour, Typography } from "../theme"; import { StyledComponentProps } from "../theme/helpers"; - -const getResolvedTypographyWeight = ( - weight: TypographyWeight, - props: StyledComponentProps -): string => { - const weightMap: Record = { - 300: "light", - 400: "regular", - 600: "semibold", - 700: "bold", - }; - - // If resolvedWeight is a string that is a number for eg "400", convert it to a number - const numericWeight = - typeof weight === "string" && !isNaN(Number(weight)) - ? Number(weight) - : weight; - - // Map it to its string equivalent - const mappedWeight = weightMap[numericWeight as number] || numericWeight; - const finalWeight = Font[`weight-${mappedWeight}`]; - - // If final weight is a function, resolve it with props - return typeof finalWeight === "function" ? finalWeight(props) : finalWeight; -}; +import { TypographySizeType } from "../theme/typography/types"; export const getTypographyStyle = ( type: TypographySizeType, - weight: TypographyWeight, + weight: TypographyWeight | ((props: StyledComponentProps) => string), paragraph = false ) => { return (props: any) => { - const resolvedWeight = getResolvedTypographyWeight(weight, props); + const resolvedWeight = + typeof weight === "function" ? weight(props) : weight; // to make it eg: header-xxl-light const typographyKey = `${type}-${resolvedWeight.toLowerCase()}`; - // to get the font size from Font token eg header-size-lg - const retrieveSize = (type: string) => { - const [firstPart, secondPart] = type.split("-"); - return `${firstPart}-size-${secondPart}`; - }; - - const fontValue = Font[retrieveSize(type)]; - - // Check if function if so resolve with props - const fontSize = - typeof fontValue === "function" ? fontValue(props) : fontValue; - - // Make it a int for calc - const fontSizeValue = parseFloat(fontSize); - const fontSizeUnit = fontSize.replace(fontSizeValue.toString(), ""); - - // Add extra margin for paragraphs - const getMarginBottomStyle = () => { - const marginBottomScale = paragraph ? 1.05 : 0; - return css` - margin-bottom: ${fontSizeValue * marginBottomScale}${fontSizeUnit}; - `; - }; - return css` ${Typography[typographyKey]} - ${getMarginBottomStyle()} + ${paragraph ? "margin-bottom: 1.05em;" : "margin-bottom: 0;"} `; }; }; diff --git a/src/typography/types.ts b/src/typography/types.ts index 22282a3d7..899af4043 100644 --- a/src/typography/types.ts +++ b/src/typography/types.ts @@ -1,34 +1,7 @@ -export type TypographySizeType = - | "header-xxl" - | "header-xl" - | "header-lg" - | "header-md" - | "header-sm" - | "header-xs" - | "body-baseline" - | "body-lg" - | "body-md" - | "body-sm"; - -export interface TypographyStyleSpec { - fontSize?: number | undefined; - fontWeight?: number | undefined; - lineHeight?: number | undefined; - letterSpacing?: number | undefined; -} - -export type TypographyWeight = - | "regular" - | "semibold" - | "bold" - | "light" - | 400 - | 600 - | 700 - | 300; +export type TypographyWeight = "regular" | "semibold" | "bold" | "light"; export interface TypographyProps extends React.HTMLAttributes { - // Can be any weight such as regular or 400 + //Weight prop such as regular, bold weight?: TypographyWeight | undefined; // For consumer to choose if they want the text to be inline for example inline?: boolean | undefined; @@ -36,7 +9,8 @@ export interface TypographyProps extends React.HTMLAttributes { paragraph?: boolean | undefined; } -export interface LinkProps extends TypographyProps { +export interface LinkProps extends React.HTMLAttributes { // If the link is external - external?: boolean; + weight?: TypographyWeight | undefined; + external?: boolean | undefined; } diff --git a/src/typography/typography.tsx b/src/typography/typography.tsx index 20993733c..4afc7fa32 100644 --- a/src/typography/typography.tsx +++ b/src/typography/typography.tsx @@ -1,12 +1,9 @@ import styled, { css } from "styled-components"; -import { - createTypographyStyles, - getDisplayStyle, - getTypographyStyle, -} from "./helper"; +import { createTypographyStyles, getTypographyStyle } from "./helper"; import { Colour } from "../theme"; -import { LinkProps, TypographyProps, TypographySizeType } from "./types"; +import { LinkProps, TypographyProps } from "./types"; import { ExternalIcon } from "@lifesg/react-icons/external"; +import { TypographySizeType } from "../theme/typography/types"; export namespace Typography { const createHeader = ( @@ -61,8 +58,6 @@ export namespace Typography { color: ${Colour["text-hover"]}; } } - - ${getDisplayStyle(props.inline, props.paragraph)} `} `; @@ -88,8 +83,6 @@ export namespace Typography { export const LinkSM = createLinkComponent("body-sm"); } -console.log("Hello"); - // FOR LINK : export const StyledExternalIcon = styled(ExternalIcon)` height: 1em; diff --git a/stories/typography-test/Typography-Link.stories.tsx b/stories/typography-test/Typography-Link.stories.tsx index 1f067864d..95187ebfd 100644 --- a/stories/typography-test/Typography-Link.stories.tsx +++ b/stories/typography-test/Typography-Link.stories.tsx @@ -8,15 +8,15 @@ export default { export const LinkBL_Regular = () => ( <> - This is a baseline link + This is a baseline link. ); export const LinkLG_Bold_Inline = () => ( <> - - This is a bold link with inline display + + This is a bold link. ); diff --git a/tests/typography/typography.spec.tsx b/tests/typography/typography.spec.tsx index 9fe929b00..d2f525faf 100644 --- a/tests/typography/typography.spec.tsx +++ b/tests/typography/typography.spec.tsx @@ -17,18 +17,6 @@ describe("Typography Components", () => { }; describe("Body Text", () => { - it("renders BodyBL with correct text", () => { - const { getByText } = render( - - - This is body text - - - ); - - expect(getByText("This is body text")).toBeInTheDocument(); - }); - it("renders BodyLG with correct text", () => { const { getByText } = render( @@ -40,43 +28,9 @@ describe("Typography Components", () => { expect(getByText("This is large body text")).toBeInTheDocument(); }); - - it("renders BodyMD with correct text", () => { - const { getByText } = render( - - This is medium body text - - ); - - expect(getByText("This is medium body text")).toBeInTheDocument(); - }); }); describe("Link Components", () => { - it("renders LinkBL with correct text", () => { - const { getByText } = render( - - - This is a baseline link - - - ); - - expect(getByText("This is a baseline link")).toBeInTheDocument(); - }); - - it("renders LinkLG with correct text", () => { - const { getByText } = render( - - - This is a large link - - - ); - - expect(getByText("This is a large link")).toBeInTheDocument(); - }); - it("renders external LinkSM with external icon", () => { const { getByText, container } = render( @@ -105,13 +59,5 @@ describe("Typography Components", () => { expect(getByText("Hello World")).toBeInTheDocument(); }); - - it("renders HeaderXL with correct text", () => { - const { getByText } = render( - Hello World - ); - - expect(getByText("Hello World")).toBeInTheDocument(); - }); }); }); From 69a80477d0c610bcbd1311e5959e00b695bb571b Mon Sep 17 00:00:00 2001 From: Gundu Mahidhar Reddy Date: Fri, 27 Sep 2024 18:28:58 +0800 Subject: [PATCH 0502/1949] [CCUBE-1554][MAHI]Fix naming convention and refactor logic for migrate-media --- codemods/migrate-media-query/index.ts | 119 ++++++++++++++------------ codemods/migrate-text/index.ts | 50 ++++++----- 2 files changed, 93 insertions(+), 76 deletions(-) diff --git a/codemods/migrate-media-query/index.ts b/codemods/migrate-media-query/index.ts index e56910c7e..d5febb793 100644 --- a/codemods/migrate-media-query/index.ts +++ b/codemods/migrate-media-query/index.ts @@ -2,105 +2,114 @@ import { API, FileInfo, JSCodeshift } from "jscodeshift"; import { mediaQueryMap } from "./data"; // ======= Constants ======= // -// Import Paths -const importPathV2Media = "@lifesg/react-design-system/v2_media"; -const importPathDesignSystem = "@lifesg/react-design-system"; -const importPathTheme = "@lifesg/react-design-system/theme"; -// Import Specifiers -const specifierV2MediaQuery = "V2_MediaQuery"; -const specifierMediaQuery = "MediaQuery"; -const specifierV2MediaWidths = "V2_MediaWidths"; +const IMPORT_PATHS = { + V2_MEDIA: "@lifesg/react-design-system/v2_media", + DESIGN_SYSTEM: "@lifesg/react-design-system", + THEME: "@lifesg/react-design-system/theme", +}; -// Member Expression Properties -const memberExpMaxWidth = "MaxWidth"; -const memberExpMinWidth = "MinWidth"; +const IMPORT_SPECIFIERS = { + V2_MEDIA_QUERY: "V2_MediaQuery", + MEDIA_QUERY: "MediaQuery", + V2_MEDIA_WIDTHS: "V2_MediaWidths", +}; -// Deprecated Warning -const deprecatedUsageWarning = `\x1b[31mDeprecated usage detected: V2_MediaWidths is deprecated and needs adjustment.\x1b[0m`; +const MEMBER_EXPRESSION_PROPERTIES = { + MAX_WIDTH: "MaxWidth", + MIN_WIDTH: "MinWidth", +}; -// Identifier Names -const identifierMediaQuery = "MediaQuery"; +const WARNINGS = { + DEPRECATED_USAGE: `\x1b[31mDeprecated usage detected: V2_MediaWidths is deprecated and needs adjustment.\x1b[0m`, +}; + +const IDENTIFIERS = { + MEDIA_QUERY: "MediaQuery", +}; // ======= Transformer Function ======= // export default function transformer(file: FileInfo, api: API) { const j: JSCodeshift = api.jscodeshift; const source = j(file.source); - let isMediaQueryImportUpdated = false; - let isV2MediaWidthsUsed = false; + let IS_MEDIA_QUERY_IMPORT_UPDATED = false; + let IS_V2_MEDIA_WIDTHS_USED = false; - // Change Import Declarations + // Process Import Declarations source.find(j.ImportDeclaration).forEach((path) => { const importPath = path.node.source.value; if ( - importPath === importPathV2Media || - importPath === importPathDesignSystem + importPath === IMPORT_PATHS.V2_MEDIA || + importPath === IMPORT_PATHS.DESIGN_SYSTEM ) { const specifiers = path.node.specifiers; - let hasMediaQuerySpecifier = false; + let HAS_MEDIA_QUERY_SPECIFIER = false; if (specifiers && specifiers.length > 0) { specifiers.forEach((specifier) => { if (j.ImportSpecifier.check(specifier)) { // Handle V2_MediaQuery - if (specifier.imported.name === specifierV2MediaQuery) { - specifier.imported.name = specifierMediaQuery; + if ( + specifier.imported.name === + IMPORT_SPECIFIERS.V2_MEDIA_QUERY + ) { + specifier.imported.name = + IMPORT_SPECIFIERS.MEDIA_QUERY; if ( specifier.local && - specifier.local.name === specifierV2MediaQuery + specifier.local.name === + IMPORT_SPECIFIERS.V2_MEDIA_QUERY ) { - specifier.local.name = specifierMediaQuery; + specifier.local.name = + IMPORT_SPECIFIERS.MEDIA_QUERY; } - hasMediaQuerySpecifier = true; + HAS_MEDIA_QUERY_SPECIFIER = true; } // Detect usage of V2_MediaWidths if ( - specifier.imported.name === specifierV2MediaWidths + specifier.imported.name === + IMPORT_SPECIFIERS.V2_MEDIA_WIDTHS ) { - isV2MediaWidthsUsed = true; + IS_V2_MEDIA_WIDTHS_USED = true; } } }); // If MediaQuery was imported, set flag to update usages - if (hasMediaQuerySpecifier) { - isMediaQueryImportUpdated = true; + if (HAS_MEDIA_QUERY_SPECIFIER) { + IS_MEDIA_QUERY_IMPORT_UPDATED = true; } - // Update import path - if (importPath === importPathV2Media) { - path.node.source.value = importPathTheme; + // Update import path if necessary + if (importPath === IMPORT_PATHS.V2_MEDIA) { + path.node.source.value = IMPORT_PATHS.THEME; } } } }); // Handle Deprecated V2_MediaWidths Usage - if (isV2MediaWidthsUsed) { - let hasLoggedV2MediaWidthsWarning = false; - - source - .find(j.Identifier, { name: specifierV2MediaWidths }) - .forEach((path) => { - if (!hasLoggedV2MediaWidthsWarning) { - console.error( - `File: ${file.path}\n${deprecatedUsageWarning}` - ); - hasLoggedV2MediaWidthsWarning = true; - } - }); + if (IS_V2_MEDIA_WIDTHS_USED) { + const hasV2MediaWidths = + source.find(j.Identifier, { + name: IMPORT_SPECIFIERS.V2_MEDIA_WIDTHS, + }).length > 0; + + if (hasV2MediaWidths) { + console.error(`File: ${file.path}\n${WARNINGS.DEPRECATED_USAGE}`); + } } // Update MediaQuery Imports and Usages - if (isMediaQueryImportUpdated) { + if (IS_MEDIA_QUERY_IMPORT_UPDATED) { // Rename all instances of V2_MediaQuery to MediaQuery source - .find(j.Identifier, { name: specifierV2MediaQuery }) + .find(j.Identifier, { name: IMPORT_SPECIFIERS.V2_MEDIA_QUERY }) .forEach((path) => { - path.node.name = specifierMediaQuery; + path.node.name = IMPORT_SPECIFIERS.MEDIA_QUERY; }); // Update Member Expressions related to MediaQuery @@ -111,10 +120,12 @@ export default function transformer(file: FileInfo, api: API) { if ( j.MemberExpression.check(object) && j.Identifier.check(object.object) && - object.object.name === identifierMediaQuery && + object.object.name === IDENTIFIERS.MEDIA_QUERY && j.Identifier.check(object.property) && - (object.property.name === memberExpMaxWidth || - object.property.name === memberExpMinWidth) && + (object.property.name === + MEMBER_EXPRESSION_PROPERTIES.MAX_WIDTH || + object.property.name === + MEMBER_EXPRESSION_PROPERTIES.MIN_WIDTH) && j.Identifier.check(property) ) { const queryType = object.property.name; @@ -125,8 +136,8 @@ export default function transformer(file: FileInfo, api: API) { mediaQueryMap[queryType] && mediaQueryMap[queryType][mediaKey] ) { - const newMediaKey = mediaQueryMap[queryType][mediaKey]; - property.name = newMediaKey; + const NEW_MEDIA_KEY = mediaQueryMap[queryType][mediaKey]; + property.name = NEW_MEDIA_KEY; } } }); diff --git a/codemods/migrate-text/index.ts b/codemods/migrate-text/index.ts index 9a8250ab7..f5430b27e 100644 --- a/codemods/migrate-text/index.ts +++ b/codemods/migrate-text/index.ts @@ -3,18 +3,21 @@ import { textComponentMap } from "./data"; // ======= Constants ======= // -// Import Paths -const importPathV2Text = "@lifesg/react-design-system/v2_text"; -const importPathLib = "@lifesg/react-design-system"; -const importPathTypography = "@lifesg/react-design-system/typography"; - -// Import Specifiers -const specifierV2Text = "V2_Text"; -const specifierTypography = "Typography"; - -// JSX Identifiers -const jsxIdentifierV2Text = "V2_Text"; -const jsxIdentifierTypography = "Typography"; +const IMPORT_PATHS = { + V2_TEXT: "@lifesg/react-design-system/v2_text", + DESIGN_SYSTEM: "@lifesg/react-design-system", + TYPOGRAPHY: "@lifesg/react-design-system/typography", +}; + +const IMPORT_SPECIFIERS = { + V2_TEXT: "V2_Text", + TYPOGRAPHY: "Typography", +}; + +const JSX_IDENTIFIERS = { + V2_TEXT: "V2_Text", + TYPOGRAPHY: "Typography", +}; // ======= Transformer Function ======= // @@ -29,26 +32,29 @@ export default function transformer(file: FileInfo, api: API) { const importPath = path.node.source.value; // Check if the import is from the target design system path - if (importPath === importPathV2Text || importPath === importPathLib) { + if ( + importPath === IMPORT_PATHS.V2_TEXT || + importPath === IMPORT_PATHS.DESIGN_SYSTEM + ) { // Iterate over each specifier in the import declaration path.node.specifiers?.forEach((specifier) => { if ( j.ImportSpecifier.check(specifier) && - specifier.imported.name === specifierV2Text + specifier.imported.name === IMPORT_SPECIFIERS.V2_TEXT ) { // Rename imported specifier from V2_Text to Typography - specifier.imported.name = specifierTypography; + specifier.imported.name = IMPORT_SPECIFIERS.TYPOGRAPHY; // Rename local specifier if it matches V2_Text if ( specifier.local && - specifier.local.name === specifierV2Text + specifier.local.name === IMPORT_SPECIFIERS.V2_TEXT ) { - specifier.local.name = specifierTypography; + specifier.local.name = IMPORT_SPECIFIERS.TYPOGRAPHY; } // Update the import path to the new typography module - path.node.source.value = importPathTypography; + path.node.source.value = IMPORT_PATHS.TYPOGRAPHY; isLifesgImport = true; } }); @@ -59,7 +65,7 @@ export default function transformer(file: FileInfo, api: API) { const replaceWithNewComponent = (path: any, newComponentValue: string) => { path.replace( j.memberExpression( - j.identifier(jsxIdentifierTypography), + j.identifier(JSX_IDENTIFIERS.TYPOGRAPHY), j.identifier(newComponentValue) ) ); @@ -68,9 +74,9 @@ export default function transformer(file: FileInfo, api: API) { if (isLifesgImport) { // Rename Identifiers from V2_Text to Typography source - .find(j.Identifier, { name: jsxIdentifierV2Text }) + .find(j.Identifier, { name: JSX_IDENTIFIERS.V2_TEXT }) .forEach((path) => { - path.node.name = jsxIdentifierTypography; + path.node.name = JSX_IDENTIFIERS.TYPOGRAPHY; }); // Update Member Expressions @@ -91,7 +97,7 @@ export default function transformer(file: FileInfo, api: API) { if (j.MemberExpression.check(object)) { currentPath = object; } else if (j.Identifier.check(object)) { - if (object.name === jsxIdentifierTypography) { + if (object.name === JSX_IDENTIFIERS.TYPOGRAPHY) { startsWithTypography = true; } break; From 5d255988aaffd7f9493ae0e12ce02ed1ea8731f6 Mon Sep 17 00:00:00 2001 From: Yip Jun Han Date: Mon, 30 Sep 2024 03:40:20 +0800 Subject: [PATCH 0503/1949] [BOOKINGSG-6120][JH] fixes/changes: - external error to hide dropdown as well - invalid time range validation to keep values instead of auto clearing - trigger blur event when clicking outside the input on the error message --- .../combobox-picker/combobox-picker.tsx | 34 +++++------ .../time-range-picker.spec.tsx | 57 ++++++++++++++----- 2 files changed, 57 insertions(+), 34 deletions(-) diff --git a/src/time-range-picker/combobox-picker/combobox-picker.tsx b/src/time-range-picker/combobox-picker/combobox-picker.tsx index 04f0cd559..85259c875 100644 --- a/src/time-range-picker/combobox-picker/combobox-picker.tsx +++ b/src/time-range-picker/combobox-picker/combobox-picker.tsx @@ -16,7 +16,6 @@ import { TimeRangePickerProps, TimeRangePickerValue } from "../types"; type TimeRangeInputType = "start" | "end"; interface TimeChangeOptions { goToNextInput?: boolean | undefined; - skipRangeCheck?: boolean | undefined; triggerOnBlur?: boolean | undefined; } @@ -94,6 +93,11 @@ export const ComboboxPicker = ({ // Validation for keyboard input useEffect(() => { + if (error) { + setDropdownOpen(false); + return; + } + const start = parseInput(startTimeVal); const end = parseInput(endTimeVal); @@ -121,7 +125,7 @@ export const ComboboxPicker = ({ // Hide dropdown so error message is visible setDropdownOpen(false); - }, [startTimeVal, endTimeVal, parseInput]); + }, [startTimeVal, endTimeVal, parseInput, error]); // ============================================================================= // EVENT HANDLERS @@ -150,12 +154,12 @@ export const ComboboxPicker = ({ if (activeTimeSelector === "start") { handleStartTime(startTimeVal); } else if (activeTimeSelector === "end") { - handleEndTime(endTimeVal); + // Let handleBlur call handleTimeChange instead + if (dropdownOpen) handleEndTime(endTimeVal); endInputRef.current.blur(); } break; case "Tab": - // No input-specific behaviors, use native tab interaction handleTimeChange(startTimeVal, endTimeVal, {}); break; default: @@ -168,10 +172,7 @@ export const ComboboxPicker = ({ }; const handleEndTime = (input: string) => { - handleTimeChange(startTimeVal, input, { - skipRangeCheck: true, - triggerOnBlur: true, - }); + handleTimeChange(startTimeVal, input, { triggerOnBlur: true }); }; const handleTimeChange = ( @@ -179,24 +180,16 @@ export const ComboboxPicker = ({ endInput: string, { goToNextInput, // Used by handleStart to move to end input automatically - skipRangeCheck, // Used by handleEnd to preserve invalid end value triggerOnBlur, // Used by handleEnd/handleClear to trigger onBlur }: TimeChangeOptions ) => { const start = parseInput(startInput) ?? initialStartTimeVal; const end = parseInput(endInput) ?? initialEndTimeVal; - // If start time is after end time, clear end time - const isInvalidRange = - !skipRangeCheck && - TimeHelper.timeToMinutes(start) > TimeHelper.timeToMinutes(end); - setEndTimeVal(isInvalidRange ? "" : end); setStartTimeVal(start); + setEndTimeVal(end); - const timeValue: TimeRangePickerValue = { - start, - end: isInvalidRange ? "" : end, - }; + const timeValue: TimeRangePickerValue = { start, end }; // Trigger onChange if values have changed if (start !== initialStartTimeVal || end !== initialEndTimeVal) { @@ -248,9 +241,8 @@ export const ComboboxPicker = ({ if ( nodeRef.current && !nodeRef.current.contains(event.relatedTarget) && - !dropdownOpen + !dropdownOpen // Necessary because dropdown floating ui is not a child ) { - // Call only when blur triggered while dropdown is dismissed handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true }); } }; @@ -406,7 +398,7 @@ export const ComboboxPicker = ({ ); return ( - + { }); describe("validation errors", () => { - it("should show error if start time is after end time", () => { + it("should show error if start time is after end time", async () => { + const user = userEvent.setup(); render( { expect( screen.queryByText("End time must be after start time") ).toBeInTheDocument(); + + // Invalid values should persist + await act(async () => + user.click(screen.getByLabelText(END_LABEL)) + ); + await act(async () => await user.keyboard("{Enter}")); + expect(screen.getByLabelText(START_LABEL)).toHaveValue( + "3:00pm" + ); + expect(screen.getByLabelText(END_LABEL)).toHaveValue("2:00pm"); + expect( + screen.queryByText("End time must be after start time") + ).toBeInTheDocument(); }); it("should show error if start input cannot be parsed", async () => { @@ -427,8 +441,7 @@ describe("TimeRangePicker", () => { ); - await user.keyboard("{Tab}"); - expect(screen.getByTestId("before")).toHaveFocus(); + screen.getByTestId("before").focus(); // Tab to start (onFocus) await act(async () => { @@ -438,7 +451,6 @@ describe("TimeRangePicker", () => { await waitFor(() => expect(screen.getByLabelText(START_LABEL)).toHaveFocus() ); - expect(mockOnBlur).toHaveBeenCalledTimes(0); expect(mockOnFocus).toHaveBeenCalledTimes(1); // Tab to end @@ -446,16 +458,12 @@ describe("TimeRangePicker", () => { await user.keyboard("{Tab}{5}"); }); expect(screen.getByLabelText(END_LABEL)).toHaveFocus(); - expect(mockOnBlur).toHaveBeenCalledTimes(0); - expect(mockOnFocus).toHaveBeenCalledTimes(1); // Tab to clear await act(async () => { await user.keyboard("{Tab}"); }); expect(screen.queryByLabelText("Clear")).toHaveFocus(); - expect(mockOnBlur).toHaveBeenCalledTimes(0); - expect(mockOnFocus).toHaveBeenCalledTimes(1); // Tab to dropdown await act(async () => { @@ -465,7 +473,6 @@ describe("TimeRangePicker", () => { screen.getByRole("option", { name: "5:00pm" }) ).toHaveFocus(); expect(mockOnBlur).toHaveBeenCalledTimes(0); - expect(mockOnFocus).toHaveBeenCalledTimes(1); // Tab to after (onBlur) await act(async () => { @@ -477,22 +484,46 @@ describe("TimeRangePicker", () => { expect( screen.queryByTestId(DROPDOWN_TESTID) ).not.toBeInTheDocument(); + }); + + it("should call onFocus and onBlur when cycling back through the tab sequence", async () => { + const user = userEvent.setup(); + const mockOnFocus = jest.fn(); + + render( + <> + + - - -); - -export const FlexContent = () => ( - - -

    Header Test

    -

    - This is some testing text in the paragraph tag. -

    - Placeholder - -
    -
    -); - -export const GridNormalContent = () => ( - - -

    Header Test

    -

    This is some testing text in the paragraph tag.

    - Placeholder - -
    -
    -); - -export const GridContentWithSpan = () => ( - - -

    Header Test

    -

    - This is some testing text in the paragraph tag. -

    - Placeholder - -
    -
    -); - -export const StretchContent = () => ( - - -

    Header Test

    -

    - This is some testing text in the paragraph tag. -

    - Placeholder - -
    -
    -); diff --git a/stories/layout-test/Section.stories.tsx b/stories/layout-test/Section.stories.tsx deleted file mode 100644 index d5410fe17..000000000 --- a/stories/layout-test/Section.stories.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { ThemeProvider } from "styled-components"; -import { Section } from "../../src/layout/section"; -import { mockTheme } from "./mock-theme"; - -export default { - title: "Layout-Test/Section", - component: Section, -}; - -export const Default = () => ( - -
    -

    This is a section with default props.

    -
    -
    -); - -export const Stretched = () => ( - -
    -

    This section is stretched.

    -
    -
    -); diff --git a/stories/layout-test/mock-theme.ts b/stories/layout-test/mock-theme.ts deleted file mode 100644 index b65375fa5..000000000 --- a/stories/layout-test/mock-theme.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ThemeSpec } from "../../src/theme/types"; - -export const mockTheme: ThemeSpec = { - colourScheme: "lifesg", - fontScheme: "lifesg", - animationScheme: "lifesg", - borderScheme: "lifesg", - spacingScheme: "lifesg", - radiusScheme: "lifesg", - breakpointScheme: "lifesg", -}; From 1bc50cba9eb17b8a520700cc1f0d0b6477d5c637 Mon Sep 17 00:00:00 2001 From: roll Date: Sun, 6 Oct 2024 20:07:09 +0800 Subject: [PATCH 0539/1949] [V3][RL] Add border token docs --- .../theme/border/a-border-introduction.mdx | 52 ++++++ stories/theme/border/b-border-lifesg.mdx | 18 +++ .../theme/doc-elements/doc-border-display.tsx | 151 ++++++++++++++++++ stories/theme/doc-elements/index.ts | 1 + 4 files changed, 222 insertions(+) create mode 100644 stories/theme/border/a-border-introduction.mdx create mode 100644 stories/theme/border/b-border-lifesg.mdx create mode 100644 stories/theme/doc-elements/doc-border-display.tsx diff --git a/stories/theme/border/a-border-introduction.mdx b/stories/theme/border/a-border-introduction.mdx new file mode 100644 index 000000000..7a235ef72 --- /dev/null +++ b/stories/theme/border/a-border-introduction.mdx @@ -0,0 +1,52 @@ +import { Meta } from "@storybook/blocks"; +import { DocInfo, DocNote } from "stories/storybook-common"; + + + +# Border + +```tsx +import { Border } from "@lifesg/react-design-system/theme"; +``` + +The **border** tokens define the style and width of element borders. + +## Collections + +[LifeSG](/docs/foundations-border-lifesg--docs) + +## Usage + +Apply the tokens when defining borders. + +```tsx +import { Border } from "@lifesg/react-design-system/theme"; +import styled, { css } from "styled-components"; + +const SolidBorder = styled.div` + border: ${Border["width-010"]} ${Border.solid}; +`; + +const DashedBorder = styled.div` + ${Border["dashed-default"]}; +`; +``` + +## Overriding + +Even though you will rarely need to override the border style properties, the +ability to do so is supported. + +```tsx +import { LifeSGTheme } from "@lifesg/react-design-system/theme"; + +const customTheme: ThemeSpec = { + ...LifeSGTheme, + overrides: { + border: { + "width-010": 10, // specify a custom pixel-based value + solid: "dotted", // specify a custom border style + }, + }, +}; +``` diff --git a/stories/theme/border/b-border-lifesg.mdx b/stories/theme/border/b-border-lifesg.mdx new file mode 100644 index 000000000..d9805b82e --- /dev/null +++ b/stories/theme/border/b-border-lifesg.mdx @@ -0,0 +1,18 @@ +import { Meta } from "@storybook/blocks"; +import { LifeSGTheme } from "src/theme"; +import { BorderDisplay } from "../doc-elements"; + + + +# LifeSG border + +This is the border set used when the `borderScheme` is `"lifesg"`. + +```tsx +const theme: ThemeSpec = { + borderScheme: "lifesg", + // ...other specifications +}; +``` + + diff --git a/stories/theme/doc-elements/doc-border-display.tsx b/stories/theme/doc-elements/doc-border-display.tsx new file mode 100644 index 000000000..ca3d0d827 --- /dev/null +++ b/stories/theme/doc-elements/doc-border-display.tsx @@ -0,0 +1,151 @@ +import { getBorder } from "src/theme/border/theme-helper"; +import { BorderSet, ThemeSpec } from "src/theme/types"; +import styled, { ThemeProvider, useTheme } from "styled-components"; +import { Border } from "../../../src/theme"; + +interface BorderDisplayProps { + theme: ThemeSpec; +} + +export const BorderDisplay = ({ theme }: BorderDisplayProps) => { + return ( + + + +
    Token
    +
    Value
    +
    +
    + + + + + +
    +
    + ); +}; + +interface BorderCollectionProps { + token: keyof BorderSet; +} + +const BorderWidthCollection = ({ token }: BorderCollectionProps) => { + const theme = useTheme(); + const value = getBorder(token)()({ theme }); + + return ( + +
    + {token} +
    +
    {value}
    +
    + +
    +
    + ); +}; + +const BorderStyleCollection = ({ token }: BorderCollectionProps) => { + const theme = useTheme(); + const value = getBorder(token)()({ theme }); + + return ( + +
    + {token} +
    +
    {value}
    +
    + +
    +
    + ); +}; + +const DashedBorderStyleCollection = () => { + return ( + +
    + dashed-default +
    +
    + {"(thickness, color) => style"} +
    +
    + +
    +
    + ); +}; + +// ============================================================================= +// STYLE INTERFACE +// ============================================================================= +interface BorderWidthProps { + $size: string; +} + +interface BorderStyleProps { + $style: string; +} + +// ============================================================================= +// STYLING +// ============================================================================= +const Display = styled.div` + display: grid; + grid-template-columns: max-content max-content minmax(250px, 1fr); + flex-wrap: wrap; + + margin-bottom: 2.5rem; + + &:last-child { + margin-bottom: 1rem; + } + + overflow-x: auto; +`; + +const Row = styled.div` + display: grid; + grid-column: 1 / -1; + grid-template-columns: subgrid; + justify-items: flex-start; + align-items: flex-start; + gap: 0 3rem; + margin-bottom: 2rem; +`; + +const HeaderRow = styled(Row)` + margin-bottom: 1rem; + font-weight: bold; + padding-bottom: 0.5rem; + border-bottom: 1px solid #dde1e2; +`; + +const BorderWidthExample = styled.div` + height: 24px; + width: 48px; + border: ${(props) => props.$size} solid tomato; +`; + +const BorderStyleExample = styled.div` + height: 24px; + width: 48px; + border: 1px ${(props) => props.$style} tomato; +`; + +const DashedBorderExample = styled.div` + height: 24px; + width: 48px; + ${Border["dashed-default"](1, "tomato")} +`; + +const Divider = styled.div` + grid-column: 1 / -1; + height: 1px; + background: #dde1e2; + margin-bottom: 2rem; +`; diff --git a/stories/theme/doc-elements/index.ts b/stories/theme/doc-elements/index.ts index f56c74428..a5c9ffdcc 100644 --- a/stories/theme/doc-elements/index.ts +++ b/stories/theme/doc-elements/index.ts @@ -1,3 +1,4 @@ +export * from "./doc-border-display"; export * from "./doc-breakpoint-display"; export * from "./doc-motion-display"; export * from "./doc-primitive-colour-display"; From 95f25eab777b116196689e966dc5bd5b28d5dd85 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Mon, 7 Oct 2024 12:00:30 +0800 Subject: [PATCH 0540/1949] [V3][RL] Use new stylesheet with font face declaration --- .storybook/preview-head.html | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html index 66a8e681d..74e25d862 100644 --- a/.storybook/preview-head.html +++ b/.storybook/preview-head.html @@ -2,12 +2,10 @@ rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" /> - From db9a36cf86bdf030cc0eceafbac71b15871212f2 Mon Sep 17 00:00:00 2001 From: roll Date: Sun, 15 Dec 2024 23:37:00 +0800 Subject: [PATCH 0756/1949] [V3][RL] Fix font weights --- src/accordion/accordion-item.tsx | 2 ++ src/accordion/accordion.tsx | 1 + src/drawer/drawer.tsx | 7 ++++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/accordion/accordion-item.tsx b/src/accordion/accordion-item.tsx index 9efbd3ad8..b765bb4ba 100644 --- a/src/accordion/accordion-item.tsx +++ b/src/accordion/accordion-item.tsx @@ -123,6 +123,7 @@ function Component( case "small": return ( @@ -132,6 +133,7 @@ function Component( default: return ( diff --git a/src/accordion/accordion.tsx b/src/accordion/accordion.tsx index 0c045df90..f137612a1 100644 --- a/src/accordion/accordion.tsx +++ b/src/accordion/accordion.tsx @@ -51,6 +51,7 @@ const AccordionBase = ({ > {title && ( <Title + weight="bold" $showInMobile={showTitleInMobile} data-testid="accordion-title" > diff --git a/src/drawer/drawer.tsx b/src/drawer/drawer.tsx index 5e3054ec1..9aa04faeb 100644 --- a/src/drawer/drawer.tsx +++ b/src/drawer/drawer.tsx @@ -71,7 +71,12 @@ export const Drawer = ({ {...otherProps} > <Header> - <Heading id={id} ref={initialFocusRef} tabIndex={-1}> + <Heading + id={id} + ref={initialFocusRef} + tabIndex={-1} + weight="bold" + > {heading} </Heading> <CloseButton // second element for tab focus order From 5bc277f4d2efe9780eb3540e5284484b80449dc1 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Mon, 16 Dec 2024 21:18:34 +0800 Subject: [PATCH 0757/1949] [MISC][RL] Give more control over LocalNavDropdown custom render --- src/local-nav/internal-types.tsx | 24 ++++++++++++-- .../local-nav-dropdown/local-nav-dropdown.tsx | 33 ++++++++++--------- .../local-nav-menu/local-nav-menu.tsx | 4 +-- src/local-nav/types.ts | 33 +++++++++++++++---- 4 files changed, 68 insertions(+), 26 deletions(-) diff --git a/src/local-nav/internal-types.tsx b/src/local-nav/internal-types.tsx index 25fc36e55..bc56234c2 100644 --- a/src/local-nav/internal-types.tsx +++ b/src/local-nav/internal-types.tsx @@ -1,13 +1,31 @@ -import { LocalNavItemProps } from "./types"; +import { + LocalNavDropdownItemRenderProps, + LocalNavItemProps, + LocalNavMenuItemRenderProps, +} from "./types"; -export interface LocalNavItemComponentProps { +interface LocalNavItemBaseComponentProps { handleClick: React.MouseEventHandler<HTMLLIElement>; isSelected: boolean; item: LocalNavItemProps; +} + +export interface LocalNavMenuItemComponentProps + extends LocalNavItemBaseComponentProps { + renderItem?: + | (( + item: LocalNavItemProps, + renderProps: LocalNavMenuItemRenderProps + ) => React.ReactNode) + | undefined; +} + +export interface LocalNavDropdownItemComponentProps + extends LocalNavItemBaseComponentProps { renderItem?: | (( item: LocalNavItemProps, - renderProps: { selected: boolean } + renderProps: LocalNavDropdownItemRenderProps ) => React.ReactNode) | undefined; } diff --git a/src/local-nav/local-nav-dropdown/local-nav-dropdown.tsx b/src/local-nav/local-nav-dropdown/local-nav-dropdown.tsx index 22d6177de..49c8852c2 100644 --- a/src/local-nav/local-nav-dropdown/local-nav-dropdown.tsx +++ b/src/local-nav/local-nav-dropdown/local-nav-dropdown.tsx @@ -1,6 +1,6 @@ /* eslint-disable react/display-name */ import React, { useEffect, useImperativeHandle, useRef, useState } from "react"; -import { LocalNavItemComponentProps } from "../internal-types"; +import { LocalNavDropdownItemComponentProps } from "../internal-types"; import { LocalNavDropdownProps, LocalNavItemProps } from "../types"; import { Backdrop, @@ -201,24 +201,28 @@ const Component = ( isSelected, item, renderItem, - }: LocalNavItemComponentProps) => { + }: LocalNavDropdownItemComponentProps) => { const { id, title } = item; - const renderTitle = () => { - if (renderItem) { - return renderItem(item, { selected: isSelected }); - } + if (renderItem) { return ( - <> - {isSelected && <StyledTickIcon />} - <LabelText $isSelected={isSelected}>{title}</LabelText> - </> + <li id={id} onClick={handleClick}> + {renderItem(item, { + selected: isSelected, + stickied: isStickied, + })} + </li> ); - }; + } return ( - <NavItem id={id} $isSelected={isSelected} onClick={handleClick}> - {renderTitle()} + <NavItem + id={id} + $isSelected={isSelected && isStickied} + onClick={handleClick} + > + {isSelected && <StyledTickIcon />} + <LabelText $isSelected={isSelected}>{title}</LabelText> </NavItem> ); }; @@ -255,8 +259,7 @@ const Component = ( renderDropdownNavItem({ handleClick: (e) => handleNavItemClick(e, item, i), - isSelected: - i === selectedItemIndex && isStickied, + isSelected: i === selectedItemIndex, item, renderItem, }) diff --git a/src/local-nav/local-nav-menu/local-nav-menu.tsx b/src/local-nav/local-nav-menu/local-nav-menu.tsx index 522e14191..8f122872e 100644 --- a/src/local-nav/local-nav-menu/local-nav-menu.tsx +++ b/src/local-nav/local-nav-menu/local-nav-menu.tsx @@ -1,6 +1,6 @@ /* eslint-disable react/display-name */ import React from "react"; -import { LocalNavItemComponentProps } from "../internal-types"; +import { LocalNavMenuItemComponentProps } from "../internal-types"; import { LocalNavMenuProps } from "../types"; import { Nav, NavItem, TextLabel } from "./local-nav-menu.styles"; @@ -36,7 +36,7 @@ const Component = ( isSelected, item, renderItem, - }: LocalNavItemComponentProps) => { + }: LocalNavMenuItemComponentProps) => { const { id, title } = item; const renderTitle = () => { diff --git a/src/local-nav/types.ts b/src/local-nav/types.ts index 761f217aa..e3cf9a6af 100644 --- a/src/local-nav/types.ts +++ b/src/local-nav/types.ts @@ -3,10 +3,6 @@ export interface LocalNavItemProps { id?: string | undefined; } -export interface LocalNavItemRenderProps { - selected: boolean; -} - interface BaseLocalNavProps { className?: string | undefined; id?: string | undefined; @@ -18,16 +14,41 @@ interface BaseLocalNavProps { ) => void; items: LocalNavItemProps[]; selectedItemIndex?: number | undefined; +} + +// ============================================================================= +// NAV MENU +// ============================================================================= + +export interface LocalNavMenuItemRenderProps { + selected: boolean; +} + +export interface LocalNavMenuProps extends BaseLocalNavProps { renderItem?: | (( item: LocalNavItemProps, - renderProps: LocalNavItemRenderProps + renderProps: LocalNavMenuItemRenderProps ) => React.ReactNode) | undefined; } -export interface LocalNavMenuProps extends BaseLocalNavProps {} +// ============================================================================= +// NAV DROPDOWN +// ============================================================================= + +export interface LocalNavDropdownItemRenderProps { + selected: boolean; + stickied: boolean; +} + export interface LocalNavDropdownProps extends BaseLocalNavProps { defaultLabel: string | React.ReactNode; stickyOffset?: number | undefined; + renderItem?: + | (( + item: LocalNavItemProps, + renderProps: LocalNavDropdownItemRenderProps + ) => React.ReactNode) + | undefined; } From c47e9f64b5db604007cad58542912acb5cb89224 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Mon, 16 Dec 2024 17:47:18 +0800 Subject: [PATCH 0758/1949] [CCUBE-1629][RL] Migrate LocalNav components --- .../local-nav-dropdown.styles.tsx | 144 ++++++++++-------- .../local-nav-dropdown/local-nav-dropdown.tsx | 21 ++- .../local-nav-menu/local-nav-menu.styles.tsx | 13 +- 3 files changed, 101 insertions(+), 77 deletions(-) diff --git a/src/local-nav/local-nav-dropdown/local-nav-dropdown.styles.tsx b/src/local-nav/local-nav-dropdown/local-nav-dropdown.styles.tsx index d677d2381..cf2a34642 100644 --- a/src/local-nav/local-nav-dropdown/local-nav-dropdown.styles.tsx +++ b/src/local-nav/local-nav-dropdown/local-nav-dropdown.styles.tsx @@ -1,8 +1,7 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import { TickIcon } from "@lifesg/react-icons/tick"; import styled, { css } from "styled-components"; -import { V2_Color } from "../../v2_color"; -import { V2_Text } from "../../v2_text/text"; +import { Colour, Font, Motion, Radius } from "../../theme"; // ============================================================================= // STYLE INTERFACES, transient props are denoted with $ @@ -13,6 +12,7 @@ interface DropdownNavStyleProps { $stickyOffset: number; $sideMargin?: number; } + interface NavItemListStyleProps { $viewportHeight?: number; } @@ -26,79 +26,96 @@ interface DropdownExpandedProps { interface NavIconStyleProps extends DropdownExpandedProps {} interface NavLabelStyleProps extends DropdownExpandedProps {} + // ============================================================================= // STYLING // ============================================================================= -// use #rrggbbaa format for color (D9 is 0.85 alpha) -// LINK: https://rgbacolorpicker.com/rgba-to-hex -export const Backdrop = styled.div` - position: fixed; - top: 0; - right: 0; - left: 0; - bottom: 0; - background-color: ${V2_Color.Neutral[1]}D9; - z-index: -1; -`; - -export const LabelText = styled(V2_Text.BodySmall)<NavItemStyleProps>` - margin: 0; - ${(props) => - props.$isSelected && - css` - color: ${V2_Color.Primary}; - `} -`; -export const StyledTickIcon = styled(TickIcon)` - color: ${V2_Color.Primary}; - margin: 0 8px; -`; +// ----------------------------------------------------------------------------- +// NAV SELECT +// ----------------------------------------------------------------------------- -export const NavIcon = styled(ChevronDownIcon)<NavIconStyleProps>` - color: ${V2_Color.Primary}; - transition: transform 250ms ease-in-out; +export const NavSelectIcon = styled(ChevronDownIcon)<NavIconStyleProps>` + color: ${Colour["icon"]}; + transition: transform ${Motion["duration-250"]} ${Motion["ease-default"]}; transform: rotate(${(props) => (props.$isDropdownExpanded ? 180 : 0)}deg); `; -export const NavLabel = styled.div<NavLabelStyleProps>` +export const NavSelect = styled.div<NavLabelStyleProps>` cursor: pointer; - background: ${V2_Color.Neutral[8]}; + background: ${Colour["bg"]}; padding: 12px 16px; - box-shadow: 0px 0px 1px 1px ${V2_Color.Neutral[5]}; overflow: hidden; - border-radius: ${(props) => - props.$isDropdownExpanded ? "4px 4px 0 0" : "4px"}; + box-shadow: 0 0 1px 1px ${Colour["border"]}; + border-radius: ${Radius["sm"]}; + ${(props) => + props.$isDropdownExpanded && + css` + border-bottom-left-radius: ${Radius["none"]}; + border-bottom-right-radius: ${Radius["none"]}; + `} display: flex; justify-content: space-between; align-items: center; - transition: all 200ms linear; + transition: all ${Motion["duration-250"]} ${Motion["ease-default"]}; `; +// ----------------------------------------------------------------------------- +// NAV ITEMS +// ----------------------------------------------------------------------------- + export const NavItem = styled.li<NavItemStyleProps>` padding: ${(props) => props.$isSelected ? "12px 8px 12px 0" : "12px 8px 12px 32px"}; background: ${(props) => - props.$isSelected ? V2_Color.Accent.Light[5] : V2_Color.Neutral[8]}; - position: relative; /* Ensures that the tick mark is positioned relative to the selected item */ + props.$isSelected ? Colour["bg-primary-subtlest"] : Colour["bg"]}; + /* Ensures that the tick mark is positioned relative to the selected item */ + position: relative; display: flex; - align-items: center; /* Vertically align text and tick */ + /* Vertically align text and tick */ + align-items: center; `; export const NavItemList = styled.ul<NavItemListStyleProps>` - transition: all 300ms; + transition: all ${Motion["duration-250"]} ${Motion["ease-default"]}; transform-origin: top; list-style-type: none; - padding: 0px 8px 0px 8px; + padding: 0 8px; margin: 0; - background: ${V2_Color.Neutral[8]}; + background: ${Colour["bg"]}; cursor: pointer; - box-shadow: 0px 0px 1px 1px ${V2_Color.Neutral[5]}; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; - overflow-y: auto; /* Enables vertical scrolling */ - max-height: ${(props) => - props.$viewportHeight}px; /* Set a max height for the dropdown list */ + box-shadow: 0 0 1px 1px ${Colour["border"]}; + border-bottom-right-radius: ${Radius["sm"]}; + border-bottom-left-radius: ${Radius["sm"]}; + /* Enables vertical scrolling */ + overflow-y: auto; + /* Set a max height for the dropdown list */ + max-height: ${(props) => props.$viewportHeight}px; +`; + +export const NavItemLabel = styled.div<NavItemStyleProps>` + ${Font["body-baseline-regular"]} + color: ${(props) => + props.$isSelected ? Colour["text-selected"] : Colour["text"]}; +`; + +export const StyledTickIcon = styled(TickIcon)` + color: ${Colour["icon-selected"]}; + margin: 0 8px; +`; + +// ----------------------------------------------------------------------------- +// MAIN +// ----------------------------------------------------------------------------- + +export const Backdrop = styled.div` + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + background-color: ${Colour["overlay-strong"]}; + z-index: -1; `; export const NavWrapper = styled.nav<DropdownNavStyleProps>` @@ -108,21 +125,20 @@ export const NavWrapper = styled.nav<DropdownNavStyleProps>` width: 100%; z-index: 10; - ${(props) => - props.$isStickied && - `${NavLabel} { - ${props.$sideMargin && `margin: 0 -${props.$sideMargin}px;`} - padding: 12px 16px; - border-radius: 0; - } - - ${NavItemList} { - ${props.$sideMargin && `margin-left: -${props.$sideMargin}px;`} - ${props.$sideMargin && `margin-right: -${props.$sideMargin}px;`} - border-radius-bottom-left: 4px; - border-radius-bottom-right: 4px; - - } - - `} + ${({ $isStickied, $sideMargin }) => + $isStickied && + css` + ${NavSelect} { + ${$sideMargin && `margin: 0 -${$sideMargin}px;`} + padding: 12px 16px; + border-radius: ${Radius.none}; + } + + ${NavItemList} { + ${$sideMargin && `margin-left: -${$sideMargin}px;`} + ${$sideMargin && `margin-right: -${$sideMargin}px;`} + border-radius-bottom-left: ${Radius.sm}; + border-radius-bottom-right: ${Radius.sm}; + } + `} `; diff --git a/src/local-nav/local-nav-dropdown/local-nav-dropdown.tsx b/src/local-nav/local-nav-dropdown/local-nav-dropdown.tsx index 22d6177de..b198ad3b5 100644 --- a/src/local-nav/local-nav-dropdown/local-nav-dropdown.tsx +++ b/src/local-nav/local-nav-dropdown/local-nav-dropdown.tsx @@ -4,14 +4,15 @@ import { LocalNavItemComponentProps } from "../internal-types"; import { LocalNavDropdownProps, LocalNavItemProps } from "../types"; import { Backdrop, - LabelText, - NavIcon, NavItem, + NavItemLabel, NavItemList, - NavLabel, + NavSelect, + NavSelectIcon, NavWrapper, StyledTickIcon, } from "./local-nav-dropdown.styles"; +import { Typography } from "../../typography"; const Component = ( { @@ -211,7 +212,9 @@ const Component = ( return ( <> {isSelected && <StyledTickIcon />} - <LabelText $isSelected={isSelected}>{title}</LabelText> + <NavItemLabel $isSelected={isSelected}> + {title} + </NavItemLabel> </> ); }; @@ -235,15 +238,17 @@ const Component = ( data-testid={navTestId} className={className} > - <NavLabel + <NavSelect ref={dropdownRef} onClick={handleToggleDropdown} data-testid={`${navTestId}-label`} $isDropdownExpanded={isDropdownExpanded} > - <LabelText weight="semibold">{labelText}</LabelText> - <NavIcon $isDropdownExpanded={isDropdownExpanded} /> - </NavLabel> + <Typography.BodyBL weight="semibold"> + {labelText} + </Typography.BodyBL> + <NavSelectIcon $isDropdownExpanded={isDropdownExpanded} /> + </NavSelect> {isDropdownExpanded && ( <NavItemList data-testid={`${navTestId}-dropdown-list`} diff --git a/src/local-nav/local-nav-menu/local-nav-menu.styles.tsx b/src/local-nav/local-nav-menu/local-nav-menu.styles.tsx index 6e16412c9..74a02b301 100644 --- a/src/local-nav/local-nav-menu/local-nav-menu.styles.tsx +++ b/src/local-nav/local-nav-menu/local-nav-menu.styles.tsx @@ -1,6 +1,6 @@ import styled from "styled-components"; -import { V2_Color } from "../../v2_color"; -import { V2_Text } from "../../v2_text/text"; +import { Colour } from "../../theme"; +import { Typography } from "../../typography"; // ============================================================================= // STYLE INTERFACES, transient props are denoted with $ @@ -19,7 +19,8 @@ export const Nav = styled.ul` padding: 0; margin-top: 0; `; -export const TextLabel = styled(V2_Text.Body)<NavItemStyleProps>` + +export const TextLabel = styled(Typography.BodyBL)<NavItemStyleProps>` margin: 0; `; @@ -37,11 +38,13 @@ export const NavItem = styled.li<NavItemStyleProps>` height: 100%; top: 0; background-color: ${(props) => - props.$isSelected ? V2_Color.Primary : V2_Color.Accent.Light[5]}; + props.$isSelected + ? Colour["bg-primary"] + : Colour["bg-primary-subtler"]}; transition: all 250ms linear; } &:hover { - background-color: ${V2_Color.Accent.Light[6]}; + background-color: ${Colour["bg-hover-subtle"]}; } `; From af9faec7ceab394111e19ff0bbb5a498bd7403fb Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Wed, 18 Dec 2024 00:59:49 +0800 Subject: [PATCH 0759/1949] [CCUBE-1629][RL] Add new border width token --- src/theme/border/specs/lifesg-border-set.ts | 1 + src/theme/border/theme-helper.ts | 3 ++- src/theme/border/types.ts | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/theme/border/specs/lifesg-border-set.ts b/src/theme/border/specs/lifesg-border-set.ts index 8642b0971..4ed1824ba 100644 --- a/src/theme/border/specs/lifesg-border-set.ts +++ b/src/theme/border/specs/lifesg-border-set.ts @@ -6,6 +6,7 @@ import { ColourSemantic } from "../../colour-semantic/theme-helper"; export const LifeSgBorderSet: BorderSet = { "width-010": 1, "width-020": 2, + "width-040": 4, solid: "solid", diff --git a/src/theme/border/theme-helper.ts b/src/theme/border/theme-helper.ts index 48f644875..4f2313dfc 100644 --- a/src/theme/border/theme-helper.ts +++ b/src/theme/border/theme-helper.ts @@ -1,8 +1,8 @@ import { css } from "styled-components"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { BorderScheme, ThemeCollectionSpec } from "../types"; -import { BorderCollectionMap, BorderSet } from "./types"; import { LifeSgBorderSet } from "./specs/lifesg-border-set"; +import { BorderCollectionMap, BorderSet } from "./types"; const BorderSpec: ThemeCollectionSpec<BorderCollectionMap, BorderScheme> = { collections: { @@ -57,6 +57,7 @@ export const getBorder = (key: keyof BorderSet) => { export const BorderValues = { "width-010": getBorder("width-010"), "width-020": getBorder("width-020"), + "width-040": getBorder("width-040"), solid: getBorder("solid"), "dashed-default": getBorder("dashed-default"), }; diff --git a/src/theme/border/types.ts b/src/theme/border/types.ts index dbc268a53..d52b691d4 100644 --- a/src/theme/border/types.ts +++ b/src/theme/border/types.ts @@ -5,6 +5,7 @@ import { StyledComponentProps } from "../helpers"; export interface BorderSet { "width-010": number; "width-020": number; + "width-040": number; solid: string; "dashed-default": ( thickness?: number | ((props: StyledComponentProps) => number), From 581597eb04eb06370b65e04ff2c68846ee5d36a7 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Mon, 16 Dec 2024 17:58:47 +0800 Subject: [PATCH 0760/1949] [CCUBE-1629][RL] Migrate FullscreenImageCarousel components --- .../fullscreen-image-carousel.style.tsx | 92 ++++++++++--------- .../fullscreen-image-carousel.tsx | 32 ++++--- 2 files changed, 68 insertions(+), 56 deletions(-) diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx index b572ee986..cd116cf02 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.style.tsx @@ -1,9 +1,8 @@ import styled, { css } from "styled-components"; -import { V2_Color } from "../v2_color"; -import { V2_MediaQuery } from "../v2_media"; import { ClickableIcon } from "../shared/clickable-icon"; import { ImagePlaceholder } from "../shared/image-placeholder"; -import { V2_Text } from "../v2_text"; +import { Border, Colour, MediaQuery, Radius } from "../theme"; +import { Typography } from "../typography"; import { StatefulImage } from "./stateful-image"; // ============================================================================= @@ -23,10 +22,15 @@ interface ThumbnailItemStyleProps { const IconButton = styled(ClickableIcon)` padding: 0; border-radius: 100%; - background: ${V2_Color.Neutral[8]}; - color: ${V2_Color.Primary}; + background: ${Colour["bg"]}; + color: ${Colour["icon-primary"]}; height: 2.5rem; width: 2.5rem; + + svg { + height: 1.5rem; + width: 1.5rem; + } `; export const CloseButton = styled(IconButton)` @@ -35,15 +39,10 @@ export const CloseButton = styled(IconButton)` right: 3rem; z-index: 5; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { top: 1.25rem; right: 1.25rem; } - - svg { - height: 1.5rem; - width: 1.5rem; - } `; export const MagnifierButton = styled(IconButton)` @@ -52,15 +51,10 @@ export const MagnifierButton = styled(IconButton)` right: 6.5rem; z-index: 5; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { top: 1.25rem; right: 4.75rem; } - - svg { - height: 1.5rem; - width: 1.5rem; - } `; export const ArrowButton = styled(IconButton)<ArrowButtonStyleProps>` @@ -73,7 +67,7 @@ export const ArrowButton = styled(IconButton)<ArrowButtonStyleProps>` props.$position === "left" && css` left: 3rem; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { left: 1.25rem; } `} @@ -82,15 +76,10 @@ export const ArrowButton = styled(IconButton)<ArrowButtonStyleProps>` props.$position === "right" && css` right: 3rem; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { right: 1.25rem; } `} - - svg { - height: 1.25rem; - width: 1.25rem; - } `; export const ImageGalleryContainer = styled.div` @@ -168,13 +157,13 @@ export const BoxChip = styled.div` z-index: 3; `; -export const Chip = styled(V2_Text.XSmall)` +export const Chip = styled(Typography.BodyXS)` display: inline-flex; padding: 0.25rem 1rem; justify-content: center; align-items: center; - border-radius: 20px; - background-color: ${V2_Color.Neutral[8]}; + border-radius: ${Radius.full}; + background-color: ${Colour["bg"]}; text-align: center; `; @@ -186,10 +175,10 @@ export const ThumbnailContainer = styled.div` flex-shrink: 0; display: flex; overflow: auto; - background-color: ${V2_Color.Neutral[1]}; + background-color: ${Colour["bg-inverse"]}; padding: 1.5rem 1rem; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { padding: 1rem 1.25rem; } `; @@ -204,37 +193,58 @@ export const ThumbnailWrapper = styled.div` margin-right: auto; `; +export const ThumbnailItemContainer = styled.div` + display: flex; + align-items: center; + justify-content: center; + height: 6.25rem; + width: 6.25rem; + + ${MediaQuery.MaxWidth.sm} { + height: 4rem; + width: 4rem; + } +`; + export const ThumbnailItem = styled.div<ThumbnailItemStyleProps>` cursor: pointer; - background-color: ${V2_Color.Neutral[1]}; - border-radius: 10px; + background-color: ${Colour["bg-inverse"]}; + border-radius: ${Radius["md"]}; + border: ${Border["solid"]} transparent; + box-sizing: content-box; flex-shrink: 0; overflow: hidden; - border: 1px solid transparent; display: flex; align-items: center; justify-content: center; - height: 6.25rem; - width: 6.25rem; + height: 5.75rem; + width: 5.75rem; - ${V2_MediaQuery.MaxWidth.mobileL} { - height: 4rem; - width: 4rem; + ${MediaQuery.MaxWidth.sm} { + height: 3.75rem; + width: 3.75rem; } ${(props) => props.$active ? css` - border: 4px solid ${V2_Color.Primary}; + border-width: ${Border["width-040"]}; + border-color: ${Colour["border-selected"]}; - ${V2_MediaQuery.MaxWidth.mobileL} { - border: 2px solid ${V2_Color.Primary}; + ${MediaQuery.MaxWidth.sm} { + border-width: ${Border["width-020"]}; + } + + :hover { + border-color: ${Colour["border-selected-hover"]}; } ` : css` + border-width: ${Border["width-010"]}; + :hover { - border: 1px solid ${V2_Color.Neutral[5]}; + border-color: ${Colour["border-hover"]}; } `}; `; diff --git a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx index cb9b0ba6a..3886a2381 100644 --- a/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx +++ b/src/fullscreen-image-carousel/fullscreen-image-carousel.tsx @@ -36,6 +36,7 @@ import { ThumbnailContainer, ThumbnailImage, ThumbnailItem, + ThumbnailItemContainer, ThumbnailWrapper, } from "./fullscreen-image-carousel.style"; import { @@ -244,21 +245,22 @@ export const Component = ( {items.map((item, index) => { const src = item.thumbnailSrc ?? item.src; return ( - <ThumbnailItem - data-testid="thumbnail-item" - key={index} - $active={index === currentSlide} - onClick={() => goToSlide(index)} - ref={(el) => - (thumbnailRefs.current[index] = el) - } - > - <ThumbnailImage - src={src} - alt={`Thumbnail ${index + 1}`} - fit="cover" - /> - </ThumbnailItem> + <ThumbnailItemContainer key={index}> + <ThumbnailItem + data-testid="thumbnail-item" + $active={index === currentSlide} + onClick={() => goToSlide(index)} + ref={(el) => + (thumbnailRefs.current[index] = el) + } + > + <ThumbnailImage + src={src} + alt={`Thumbnail ${index + 1}`} + fit="cover" + /> + </ThumbnailItem> + </ThumbnailItemContainer> ); })} </ThumbnailWrapper> From e874069ea6df5ac01a52a070b50b8efae594296d Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Mon, 16 Dec 2024 19:13:37 +0800 Subject: [PATCH 0761/1949] [CCUBE-1629][MAHI|RL] Migrate Sidenav component --- src/shared/input-wrapper/index.ts | 1 + src/shared/styles/index.ts | 8 ++ src/sidenav/sidenav-drawer-item.styles.tsx | 83 +++++++--------- src/sidenav/sidenav-drawer-item.tsx | 8 +- src/sidenav/sidenav-drawer-subitem.styles.tsx | 35 +++---- src/sidenav/sidenav-drawer-subitem.tsx | 2 +- src/sidenav/sidenav-group.styles.tsx | 6 +- src/sidenav/sidenav-item.styles.tsx | 98 +++++++++---------- src/sidenav/sidenav-item.tsx | 1 - src/sidenav/sidenav.styles.tsx | 21 ++-- 10 files changed, 116 insertions(+), 147 deletions(-) create mode 100644 src/shared/input-wrapper/index.ts create mode 100644 src/shared/styles/index.ts diff --git a/src/shared/input-wrapper/index.ts b/src/shared/input-wrapper/index.ts new file mode 100644 index 000000000..1ebe7c515 --- /dev/null +++ b/src/shared/input-wrapper/index.ts @@ -0,0 +1 @@ +export * from "./input-wrapper"; diff --git a/src/shared/styles/index.ts b/src/shared/styles/index.ts new file mode 100644 index 000000000..972eb372e --- /dev/null +++ b/src/shared/styles/index.ts @@ -0,0 +1,8 @@ +import { css } from "styled-components"; + +export const lineClampCss = (lines: number) => css` + display: -webkit-box; + -webkit-line-clamp: ${lines}; + -webkit-box-orient: vertical; + overflow: hidden; +`; diff --git a/src/sidenav/sidenav-drawer-item.styles.tsx b/src/sidenav/sidenav-drawer-item.styles.tsx index 1dd735cc5..ce3d1e4e3 100644 --- a/src/sidenav/sidenav-drawer-item.styles.tsx +++ b/src/sidenav/sidenav-drawer-item.styles.tsx @@ -1,9 +1,9 @@ -import styled, { css } from "styled-components"; import { ChevronUpIcon } from "@lifesg/react-icons/chevron-up"; -import { Button } from "../button"; -import { V2_Color } from "../v2_color"; -import { V2_TextStyleHelper } from "../v2_text"; import { animated } from "react-spring"; +import styled, { css } from "styled-components"; +import { BasicButton } from "../shared/input-wrapper"; +import { lineClampCss } from "../shared/styles"; +import { Colour, Font, Motion, Radius } from "../theme"; //============================================================================= // STYLE INTERFACE @@ -22,41 +22,34 @@ interface IconStyleProp { //============================================================================= export const Container = styled(animated.li)``; -export const LinkButton = styled(Button.Default)<LinkButtonStyleProp>` - justify-content: flex-start; +export const LinkButton = styled(BasicButton)<LinkButtonStyleProp>` + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + width: 100%; - height: unset; padding: 0.75rem 1rem; - border-radius: 8px; - - span { - width: 100%; - display: flex; - flex-direction: row; - justify-content: space-between; - ${V2_TextStyleHelper.getFontFamily("H5", "semibold")} - font-size: 1rem !important; - color: ${V2_Color.Neutral[1]} !important; - } + border-radius: ${Radius["md"]}; - :hover, - :focus { - background-color: ${V2_Color.Accent.Light[4]}; - - span { - ${(props) => - props.$noChildren && - css` - color: ${V2_Color.Primary} !important; - `} - } - } + ${Font["body-md-semibold"]} + color: ${Colour.text}; ${(props) => - props.$highlight && - css` - background-color: ${V2_Color.Accent.Light[4]}; - `} + props.$noChildren + ? css` + :hover, + :focus { + background: ${Colour["bg-hover"]}; + color: ${Colour["text-hover"]}; + } + ` + : css` + :hover, + :focus { + background: ${Colour["bg-hover-strong"]}; + } + `} `; export const DrawerSubitemContainer = styled(animated.div)` @@ -64,26 +57,16 @@ export const DrawerSubitemContainer = styled(animated.div)` overflow: hidden; `; -export const IconElement = styled.div` - align-self: center; - padding-left: 0.5rem; -`; - export const ChevronIcon = styled(ChevronUpIcon)<IconStyleProp>` - display: flex; - flex-direction: column; - justify-content: center; - color: ${V2_Color.Neutral[3]}; + flex-shrink: 0; + color: ${Colour.icon}; transform: rotate(${(props) => (props.$expanded ? 0 : 180)}deg); - transition: transform 300ms ease-in-out; + transition: transform ${Motion["duration-150"]} ${Motion["ease-default"]}; `; -export const TextElement = styled.div` - overflow: hidden; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - text-align: initial; +export const TextElement = styled.span` + ${lineClampCss(2)} + text-align: left; `; export const DrawerContent = styled(animated.ul)``; diff --git a/src/sidenav/sidenav-drawer-item.tsx b/src/sidenav/sidenav-drawer-item.tsx index 58d25bb92..40e861338 100644 --- a/src/sidenav/sidenav-drawer-item.tsx +++ b/src/sidenav/sidenav-drawer-item.tsx @@ -6,7 +6,6 @@ import { Container, DrawerContent, DrawerSubitemContainer, - IconElement, LinkButton, TextElement, } from "./sidenav-drawer-item.styles"; @@ -76,18 +75,13 @@ export const SidenavDrawerItem = ({ style={containerAnimationProps} > <LinkButton - styleType="link" type="button" onClick={handleOnClick} $highlight={highlight && expanded} $noChildren={!children} > <TextElement>{title}</TextElement> - {children && ( - <IconElement> - <ChevronIcon aria-hidden $expanded={expanded} /> - </IconElement> - )} + {children && <ChevronIcon aria-hidden $expanded={expanded} />} </LinkButton> <DrawerSubitemContainer style={contentAnimationProps}> <DrawerContent ref={childRef}>{children}</DrawerContent> diff --git a/src/sidenav/sidenav-drawer-subitem.styles.tsx b/src/sidenav/sidenav-drawer-subitem.styles.tsx index 572b61387..8f00d2594 100644 --- a/src/sidenav/sidenav-drawer-subitem.styles.tsx +++ b/src/sidenav/sidenav-drawer-subitem.styles.tsx @@ -1,37 +1,26 @@ import styled from "styled-components"; -import { Button } from "../button"; -import { V2_Color } from "../v2_color"; -import { V2_TextStyleHelper } from "../v2_text"; +import { Colour, Font, Radius } from "../theme"; +import { BasicButton } from "../shared/input-wrapper"; +import { lineClampCss } from "../shared/styles"; //============================================================================= // STYLING //============================================================================= export const Container = styled.li``; -export const LinkButton = styled(Button.Default)` +export const LinkButton = styled(BasicButton)` width: 100%; - height: unset; - justify-content: flex-start; - border-radius: 0.5rem; - outline-offset: -0.125rem; + padding: 0.75rem 1rem; + border-radius: ${Radius["md"]}; - span { - ${V2_TextStyleHelper.getFontFamily("H5", "regular")} - font-size: 1rem !important; - color: ${V2_Color.Neutral[1]} !important; - overflow: hidden; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - text-align: initial; - } + ${Font["body-md-regular"]} + color: ${Colour.text}; + ${lineClampCss(2)} + text-align: left; :hover, :focus { - background-color: ${V2_Color.Accent.Light[5]}; - span { - ${V2_TextStyleHelper.getFontFamily("H5", "semibold")} - color: ${V2_Color.Primary} !important; - } + background-color: ${Colour["bg-hover"]}; + color: ${Colour["text-hover"]}; } `; diff --git a/src/sidenav/sidenav-drawer-subitem.tsx b/src/sidenav/sidenav-drawer-subitem.tsx index 83164c3f1..a1d4dd813 100644 --- a/src/sidenav/sidenav-drawer-subitem.tsx +++ b/src/sidenav/sidenav-drawer-subitem.tsx @@ -36,7 +36,7 @@ export const SidenavDrawerSubitem = ({ // ========================================================================= return ( <Container {...otherProps}> - <LinkButton styleType="link" type="button" onClick={handleOnClick}> + <LinkButton type="button" onClick={handleOnClick}> {title} </LinkButton> </Container> diff --git a/src/sidenav/sidenav-group.styles.tsx b/src/sidenav/sidenav-group.styles.tsx index 98be24024..0d49c8e8e 100644 --- a/src/sidenav/sidenav-group.styles.tsx +++ b/src/sidenav/sidenav-group.styles.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { V2_Color } from "../v2_color"; +import { Colour } from "../theme"; //============================================================================= // STYLING @@ -13,8 +13,8 @@ export const Container = styled.ul` `; export const Divider = styled.li` - margin: 0.5rem 0; + margin-top: 1rem; width: 6.5rem; height: 1px; - background-color: ${V2_Color.Neutral[5]}; + background-color: ${Colour.border}; `; diff --git a/src/sidenav/sidenav-item.styles.tsx b/src/sidenav/sidenav-item.styles.tsx index 87ebc7570..2cc165dac 100644 --- a/src/sidenav/sidenav-item.styles.tsx +++ b/src/sidenav/sidenav-item.styles.tsx @@ -1,7 +1,8 @@ import styled, { css } from "styled-components"; -import { V2_Text, V2_TextStyleHelper } from "../v2_text"; -import { V2_Color } from "../v2_color"; -import { Button } from "../button"; +import { BasicButton } from "../shared/input-wrapper"; +import { lineClampCss } from "../shared/styles"; +import { Colour, Font, Motion, Radius } from "../theme"; +import { Typography } from "../typography"; //============================================================================= // STYLE INTERFACE @@ -17,67 +18,60 @@ export const Container = styled.li` width: 100%; `; -export const DefaultButton = styled(Button.Default)<StyleProps>` - width: 100%; - height: unset; - - span { - display: flex; - flex-direction: column; - align-items: center; +export const IconContainer = styled.span` + display: flex; + align-items: center; + justify-content: center; - svg { - height: 1.25rem; - width: 1.25rem; - margin-top: 0.25rem; - } + padding: 0.25rem 1rem; + border-radius: ${Radius.md}; + color: ${Colour["icon-primary"]}; + transition: ${Motion["duration-250"]} ${Motion["ease-default"]}; - span { - ${V2_TextStyleHelper.getFontFamily("XSmall", "regular")} - font-size: 0.75rem !important; - overflow: hidden; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - } + svg { + height: 1.25rem; + width: 1.25rem; } +`; - :hover, - :focus { - span { - div { - background-color: ${V2_Color.Accent.Light[5]}; - color: ${V2_Color.Primary} !important; - } +export const TitleText = styled(Typography.BodyXS)` + ${lineClampCss(2)} + margin-top: 0.25rem; + transition: ${Motion["duration-250"]} ${Motion["ease-default"]}; +`; - span { - ${V2_TextStyleHelper.getFontFamily("XSmall", "semibold")} - color: ${V2_Color.Primary} !important; - } +export const DefaultButton = styled(BasicButton)<StyleProps>` + width: 100%; + margin-top: 1rem; + cursor: pointer; + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + &:hover, + &:focus { + ${IconContainer} { + background-color: ${Colour["bg-hover"]}; + } + + ${TitleText} { + ${Font["body-xs-semibold"]} + color: ${Colour["text-hover"]}; } } ${(props) => props.$highlight && css` - span { - div { - background-color: ${V2_Color.Accent.Light[5]}; - } + ${IconContainer} { + background-color: ${Colour["bg-hover"]}; + } - span { - ${V2_TextStyleHelper.getFontFamily("XSmall", "semibold")} - color: ${V2_Color.Primary}; - } + ${TitleText} { + ${Font["body-xs-semibold"]} + color: ${Colour["text-selected"]}; } `} `; - -export const IconContainer = styled.div` - height: 1.75rem; - width: 3.25rem; - border-radius: 0.5rem; - margin-bottom: 0.25rem; -`; - -export const TitleText = styled(V2_Text.XSmall)``; diff --git a/src/sidenav/sidenav-item.tsx b/src/sidenav/sidenav-item.tsx index 590f8bebf..c2eeba2fe 100644 --- a/src/sidenav/sidenav-item.tsx +++ b/src/sidenav/sidenav-item.tsx @@ -70,7 +70,6 @@ export const SidenavItem = ({ return ( <Container> <DefaultButton - styleType="link" type="button" onClick={handleOnClick} onMouseEnter={handleMouseEnter} diff --git a/src/sidenav/sidenav.styles.tsx b/src/sidenav/sidenav.styles.tsx index 38217da50..e3d0a502d 100644 --- a/src/sidenav/sidenav.styles.tsx +++ b/src/sidenav/sidenav.styles.tsx @@ -1,7 +1,6 @@ import styled, { css } from "styled-components"; -import { V2_Color } from "../v2_color"; -import { V2_MediaQuery } from "../v2_media"; import { animated } from "react-spring"; +import { Border, Colour, MediaQuery, Radius } from "../theme"; //============================================================================= // STYLE INTERFACE @@ -29,8 +28,8 @@ const Container = styled.nav` align-items: center; overflow-y: auto; width: 8.5rem; - border: 1px solid ${V2_Color.Neutral[5]}; - background-color: ${V2_Color.Accent.Light[6]}; + border: ${Border["width-010"]} ${Border["solid"]} ${Colour.border}; + background-color: ${Colour["bg-primary-subtlest"]}; padding: 0.5rem 0 1.5rem 0; `; @@ -38,7 +37,7 @@ export const DesktopContainer = styled(Container)` height: 100vh; left: 0; top: 0; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { display: none; visibility: hidden; } @@ -47,7 +46,7 @@ export const DesktopContainer = styled(Container)` export const MobileContainer = styled(Container)` display: none; visibility: hidden; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { display: none; // NOTE: Since mobile view not supported yet } `; @@ -61,14 +60,16 @@ export const DesktopDrawer = styled(animated.ul)<DrawerStyleProps>` width: 15rem; z-index: 10; padding: 1rem 0.5rem; - background-color: ${V2_Color.Accent.Light[6]}; - border-radius: 0 8px 8px 0; - border: 1px solid ${V2_Color.Neutral[5]}; + background-color: ${Colour["bg-primary-subtlest"]}; + border-top-right-radius: ${Radius["md"]}; + border-bottom-right-radius: ${Radius["md"]}; + border: ${Border["width-010"]} ${Border["solid"]} ${Colour.border}; ${(props) => props.$showDrawer ? css` - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 4px + rgb(from ${Colour.Primitive["neutral-20"]} r g b / 25%); ` : css` border: 0; From 64fd6006fdc827b987a88f38c43c156d0943bbed Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Tue, 17 Dec 2024 09:37:38 +0800 Subject: [PATCH 0762/1949] [CCUBE-1629][RL] Migrate DataTable --- src/data-table/data-table.styles.tsx | 85 ++++++++++++++-------------- src/data-table/data-table.tsx | 44 +++++++------- 2 files changed, 68 insertions(+), 61 deletions(-) diff --git a/src/data-table/data-table.styles.tsx b/src/data-table/data-table.styles.tsx index 4e0b948c5..77e884708 100644 --- a/src/data-table/data-table.styles.tsx +++ b/src/data-table/data-table.styles.tsx @@ -1,8 +1,8 @@ import styled, { css } from "styled-components"; -import { V2_Color } from "../v2_color"; -import { ErrorDisplay } from "../error-display"; -import { V2_DesignToken } from "../v2_design-token"; -import { V2_Text } from "../v2_text"; +import { BasicButton } from "../shared/input-wrapper"; +import { lineClampCss } from "../shared/styles"; +import { Border, Colour, Font, Motion, Radius } from "../theme"; +import { Typography } from "../typography"; // ============================================================================= // STYLE INTERFACE, transient props are denoted with $ @@ -44,8 +44,8 @@ interface ActionBarProps { // ============================================================================= // STYLES CONSTANTS // ============================================================================= -const borderColor = V2_Color.Neutral[5]; -const fontColor = V2_Color.Neutral[1]; +const borderColor = Colour["border"]; +const fontColor = Colour["text"]; // ============================================================================= // STYLES @@ -54,8 +54,8 @@ export const TableWrapper = styled.div` overflow: auto; display: flex; flex-direction: column; - border: 1px solid ${borderColor}; - border-radius: 0.5rem; + border: ${Border["width-010"]} ${Border["solid"]} ${borderColor}; + border-radius: ${Radius["md"]}; // Hide scrollbar ::-webkit-scrollbar { @@ -103,7 +103,7 @@ export const TableBody = styled.tbody<TableBodyProps>` td { border-bottom: ${(props) => props.$showLastRowBottomBorder - ? `1px solid ${borderColor}` + ? `${Border["width-010"]} ${Border["solid"]} ${borderColor}` : "none"}; } } @@ -129,31 +129,44 @@ export const ActionBarWrapper = styled.div<ActionBarWrapperProps>` }}; `; +export const TextButton = styled(BasicButton)` + ${Font["body-md-semibold"]} + cursor: pointer; + color: ${Colour["text-primary"]}; + transition: ${Motion["duration-150"]} ${Motion["ease-default"]}; + padding: 0.75rem; + margin: -0.75rem 0; + + :hover { + color: ${Colour["text-hover"]}; + } +`; + export const ActionBar = styled.div<ActionBarProps>` overflow: hidden; display: flex; ${(props) => props.$float && - ` + css` transform: translateX(-0.5%) translateY(-2rem); - border-radius: 4px; + border-radius: ${Radius["sm"]}; box-shadow: 0 0 4px 0 rgba(40, 40, 40, 0.25); width: 101%; - border: 1px solid ${borderColor}; + border: ${Border["width-010"]} ${Border["solid"]} ${borderColor}; `} align-items: center; height: 3.5rem; padding: 1rem; - border-top: 1px solid ${borderColor}; - border-radius: 0 0 4px 4px; - background-color: ${V2_DesignToken.Table.Cell.Selected}; + border-top: ${Border["width-010"]} ${Border["solid"]} ${borderColor}; + border-radius: 0 0 ${Radius["sm"]} ${Radius["sm"]}; + background-color: ${Colour["bg-selected"]}; transition: all 300ms ease; `; export const HeaderRow = styled.tr` - background-color: ${V2_DesignToken.Table.Header}; + background-color: ${Colour["bg-stronger"]}; height: 6rem; - border-bottom: 1px solid ${borderColor}; + border-bottom: ${Border["width-010"]} ${Border["solid"]} ${borderColor}; `; export const HeaderCell = styled.th<HeaderCellProps>` @@ -163,7 +176,7 @@ export const HeaderCell = styled.th<HeaderCellProps>` cursor: ${(props) => (props.$clickable ? "pointer" : "default")}; vertical-align: middle; color: ${fontColor}; - border-bottom: 1px solid ${borderColor}; + border-bottom: ${Border["width-010"]} ${Border["solid"]} ${borderColor}; ${(props) => { if (props.$isCheckbox) { return css` @@ -179,7 +192,7 @@ export const HeaderCellWrapper = styled.div` align-items: center; svg { - color: ${V2_Color.Neutral[1]}; + color: ${fontColor}; margin-left: 0.5rem; } `; @@ -188,24 +201,24 @@ export const BodyRow = styled.tr<BodyRowProps>` background-color: ${(props) => { if (props.$isSelected) { return css` - ${V2_DesignToken.Table.Cell.Selected}; + ${Colour["bg-selected"]}; `; } else if (props.$alternating) { return css` - ${V2_DesignToken.Table.Cell.Primary}; + ${Colour["bg-strong"]}; `; } else { return css` - ${V2_DesignToken.Table.Cell.Secondary}; + ${Colour["bg"]}; `; } }}; - border-top: 1px solid ${borderColor}; + border-top: ${Border["width-010"]} ${Border["solid"]} ${borderColor}; &:hover { ${(props) => { - if (!props.$isSelected && props.$isSelectable) { + if (props.$isSelectable) { return css` - background-color: ${V2_DesignToken.Table.Cell.Hover}; + background-color: ${Colour["bg-hover-strong"]}; `; } }}; @@ -217,16 +230,12 @@ export const BodyCell = styled.td<BodyCellProps>` props.$isCheckbox ? "1.25rem 0.5rem 1.25rem 1.5rem" : "1.25rem 1rem"}; vertical-align: middle; color: ${fontColor}; - border-bottom: 1px solid ${borderColor}; + border-bottom: ${Border["width-010"]} ${Border["solid"]} ${borderColor}; `; -export const BodyCellContent = styled(V2_Text.Body)` - overflow: hidden; +export const BodyCellContent = styled(Typography.BodyBL)` + ${lineClampCss(2)} text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 2; - line-clamp: 2; - -webkit-box-orient: vertical; `; export const CheckBoxWrapper = styled.div` @@ -242,15 +251,9 @@ export const LoaderWrapper = styled.div` padding: 4rem 0; `; -export const ErrorDisplayElement = styled(ErrorDisplay)` - h3, - button { - margin-top: 2rem; - } - - p { - margin-top: 1rem; - } +export const ErrorDisplayTitle = styled(Typography.HeaderSM)` + margin-top: 2rem; + margin-bottom: 1rem; `; export const EmptyViewCell = styled.td` diff --git a/src/data-table/data-table.tsx b/src/data-table/data-table.tsx index aee6d0c05..dcb680d7c 100644 --- a/src/data-table/data-table.tsx +++ b/src/data-table/data-table.tsx @@ -1,6 +1,12 @@ +import { ArrowDownIcon, ArrowUpIcon } from "@lifesg/react-icons"; import { useCallback, useEffect, useRef, useState } from "react"; import { useInView } from "react-intersection-observer"; +import { useResizeDetector } from "react-resize-detector"; import { LoadingDotsSpinner } from "../animations"; +import { Checkbox } from "../checkbox"; +import { ErrorDisplay } from "../error-display"; +import { Typography } from "../typography"; +import { useEventListener } from "../util/use-event-listener"; import { ActionBar, ActionBarWrapper, @@ -9,7 +15,7 @@ import { BodyRow, CheckBoxWrapper, EmptyViewCell, - ErrorDisplayElement, + ErrorDisplayTitle, HeaderCell, HeaderCellWrapper, HeaderRow, @@ -18,14 +24,9 @@ import { TableBody, TableContainer, TableWrapper, + TextButton, } from "./data-table.styles"; import { DataTableProps, HeaderProps, RowProps } from "./types"; -import { ArrowDownIcon, ArrowUpIcon } from "@lifesg/react-icons"; -import { V2_Text } from "../v2_text"; -import { Checkbox } from "../checkbox"; -import { Button } from "../button"; -import { useEventListener } from "../util/use-event-listener"; -import { useResizeDetector } from "react-resize-detector"; export const DataTable = ({ id, @@ -236,7 +237,9 @@ export const DataTable = ({ > <HeaderCellWrapper> {typeof label === "string" ? ( - <V2_Text.H4 weight="bold">{label}</V2_Text.H4> + <Typography.BodyBL weight="bold"> + {label} + </Typography.BodyBL> ) : ( label )} @@ -276,7 +279,6 @@ export const DataTable = ({ <CheckBoxWrapper> {enableSelectAll && ( <Checkbox - displaySize="small" checked={isAllCheckboxSelected()} indeterminate={isIndeterminateCheckbox()} onClick={() => { @@ -354,7 +356,6 @@ export const DataTable = ({ > <CheckBoxWrapper> <Checkbox - displaySize="small" checked={isRowSelected(rowId)} onClick={() => { if (onSelect) { @@ -370,18 +371,22 @@ export const DataTable = ({ const renderBasicEmptyView = () => { return ( - <ErrorDisplayElement + <ErrorDisplay type={"no-item-found"} {...emptyView} title={ emptyView?.title ? ( typeof emptyView.title === "string" ? ( - <V2_Text.H3>{emptyView.title}</V2_Text.H3> + <ErrorDisplayTitle weight="bold"> + {emptyView.title} + </ErrorDisplayTitle> ) : ( emptyView.title ) ) : ( - <V2_Text.H3>{"No <items> found"}</V2_Text.H3> + <ErrorDisplayTitle weight="bold"> + {"No <items> found"} + </ErrorDisplayTitle> ) } description={ @@ -419,15 +424,14 @@ export const DataTable = ({ } $scrollable={scrollable} > - <V2_Text.H5 weight="semibold">{`${selectedIds.length} item${ + <Typography.BodyMD weight="semibold">{`${ + selectedIds.length + } item${ selectedIds.length > 1 ? "s" : "" - } selected`}</V2_Text.H5> - <Button.Small - styleType="link" - onClick={onClearSelectionClick} - > + } selected`}</Typography.BodyMD> + <TextButton type="button" onClick={onClearSelectionClick}> Clear selection - </Button.Small> + </TextButton> {actionBarContent} </ActionBar> </ActionBarWrapper> From 027d680c8df1c1dd5926bed6b8e253d9d5ec2025 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Tue, 17 Dec 2024 10:10:14 +0800 Subject: [PATCH 0763/1949] [CCUBE-1629][RL] Migrate PopoverInline --- src/popover-v2/popover-inline/popover-inline.styles.ts | 6 +++--- src/popover-v2/popover-trigger.tsx | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/popover-v2/popover-inline/popover-inline.styles.ts b/src/popover-v2/popover-inline/popover-inline.styles.ts index e0e7e26c6..7164af0b5 100644 --- a/src/popover-v2/popover-inline/popover-inline.styles.ts +++ b/src/popover-v2/popover-inline/popover-inline.styles.ts @@ -1,5 +1,5 @@ -import { V2_Color } from "../../v2_color"; import styled from "styled-components"; +import { Colour } from "../../theme"; import { PopoverInlineStyle } from "../types"; // ============================================================================= @@ -28,7 +28,7 @@ const getTextStyle = (style: PopoverInlineStyle) => { }; export const StyledText = styled.span<StyledTextProps>` - color: ${V2_Color.Primary}; + color: ${Colour["text-primary"]}; font-weight: 600; text-underline-position: under; @@ -36,7 +36,7 @@ export const StyledText = styled.span<StyledTextProps>` &:hover, &:focus-visible { - color: ${V2_Color.Secondary}; + color: ${Colour["text-hover"]}; ${({ $hoverStyle }) => getTextStyle($hoverStyle)} } diff --git a/src/popover-v2/popover-trigger.tsx b/src/popover-v2/popover-trigger.tsx index f21794a53..deaabd72f 100644 --- a/src/popover-v2/popover-trigger.tsx +++ b/src/popover-v2/popover-trigger.tsx @@ -14,8 +14,9 @@ import { } from "@floating-ui/react"; import { useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; -import { V2_MediaWidths } from "../v2_media"; +import { useTheme } from "styled-components"; import { useFloatingChild } from "../overlay/use-floating-context"; +import { Breakpoint } from "../theme"; import { PopoverV2 } from "./popover"; import { TriggerContainer } from "./popover-trigger.styles"; import { PopoverV2TriggerProps, PopoverV2TriggerType } from "./types"; @@ -39,9 +40,9 @@ export const PopoverTrigger = ({ const [visible, setVisible] = useState<boolean>(false); const nodeRef = useRef<HTMLDivElement>(); const popoverRef = useRef<HTMLDivElement>(); - const isMobile = useMediaQuery({ - maxWidth: V2_MediaWidths.mobileL, - }); + const theme = useTheme(); + const mobileBreakpoint = Breakpoint["sm-max"]({ theme }); + const isMobile = useMediaQuery({ maxWidth: mobileBreakpoint }); const { refs, floatingStyles, context } = useFloating({ open: visible, From ca7287fed7e0d47cb7577afa54b463ffc0238c08 Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Mon, 16 Dec 2024 00:34:11 +0800 Subject: [PATCH 0764/1949] [V3][RL] Update component docs --- stories/accordion/accordion.stories.tsx | 74 ++-- stories/accordion/doc-elements.tsx | 14 - stories/accordion/props-table.tsx | 11 +- .../box-container/box-container.stories.tsx | 32 +- stories/box-container/props-table.tsx | 4 +- stories/calendar/calendar.stories.tsx | 55 +-- stories/calendar/props-table.tsx | 4 +- stories/error-display/error-display.mdx | 2 - .../error-display/error-display.stories.tsx | 12 +- stories/error-display/props-table.tsx | 4 +- .../feedback-rating.stories.tsx | 11 +- stories/feedback-rating/props-table.tsx | 4 +- .../doc-elements.tsx | 2 +- .../fullscreen-image-carousel.stories.tsx | 27 +- .../fullscreen-image-carousel/props-table.tsx | 5 +- stories/link-list/link-list.mdx | 2 + stories/link-list/link-list.stories.tsx | 146 ++++---- stories/link-list/props-table.tsx | 4 +- stories/local-nav/doc-elements.tsx | 19 +- stories/local-nav/local-nav.stories.tsx | 53 ++- stories/local-nav/props-table.tsx | 6 +- stories/sidenav/props-table.tsx | 9 +- stories/sidenav/sidenav.stories.tsx | 7 +- stories/timeline/props-table.tsx | 18 +- stories/timeline/timeline.stories.tsx | 336 ++++++++---------- .../uneditable-section.stories.tsx | 22 +- 26 files changed, 420 insertions(+), 463 deletions(-) delete mode 100644 stories/accordion/doc-elements.tsx diff --git a/stories/accordion/accordion.stories.tsx b/stories/accordion/accordion.stories.tsx index 03c9faf9b..857dc9fb6 100644 --- a/stories/accordion/accordion.stories.tsx +++ b/stories/accordion/accordion.stories.tsx @@ -1,45 +1,45 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Accordion } from "src/accordion"; -import { V2_Text } from "src/v2_text"; +import { Typography } from "src/typography"; type Component = typeof Accordion; const meta: Meta<Component> = { - title: "Modules/Accordion", + title: "Content/Accordion", component: Accordion, }; export default meta; export const Default: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <Accordion title="My Accordion"> <Accordion.Item title="This is the first item" collapsible={false} > - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - </V2_Text.Body> + </Typography.BodyBL> </Accordion.Item> <Accordion.Item title="This is the second item"> { - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor  - <V2_Text.Hyperlink.Default + <Typography.LinkBL href="https://www.google.com" target="_blank" > see more here - </V2_Text.Hyperlink.Default> + </Typography.LinkBL> . - </V2_Text.Body> + </Typography.BodyBL> } </Accordion.Item> </Accordion> @@ -48,31 +48,31 @@ export const Default: StoryObj<Component> = { }; export const SmallAccordionItemTitle: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <Accordion title="Small Accordion item title"> <Accordion.Item title="This is the first item" type="small"> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - </V2_Text.Body> + </Typography.BodyBL> </Accordion.Item> <Accordion.Item title="This is the second item" type="small"> { - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor  - <V2_Text.Hyperlink.Default + <Typography.LinkBL href="https://www.google.com" target="_blank" > see more here - </V2_Text.Hyperlink.Default> + </Typography.LinkBL> . - </V2_Text.Body> + </Typography.BodyBL> } </Accordion.Item> </Accordion> @@ -81,30 +81,30 @@ export const SmallAccordionItemTitle: StoryObj<Component> = { }; export const TitleShownInMobile: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <Accordion title="Title in mobile too" showTitleInMobile> <Accordion.Item title="This is the first item"> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - </V2_Text.Body> + </Typography.BodyBL> </Accordion.Item> <Accordion.Item title="This is the second item"> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor  - <V2_Text.Hyperlink.Default + <Typography.LinkBL href="https://www.google.com" target="_blank" > see more here - </V2_Text.Hyperlink.Default> + </Typography.LinkBL> . - </V2_Text.Body> + </Typography.BodyBL> </Accordion.Item> </Accordion> ); @@ -112,30 +112,30 @@ export const TitleShownInMobile: StoryObj<Component> = { }; export const NoTitle: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <Accordion> <Accordion.Item title="This is the first item"> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - </V2_Text.Body> + </Typography.BodyBL> </Accordion.Item> <Accordion.Item title="This is the second item"> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor  - <V2_Text.Hyperlink.Default + <Typography.LinkBL href="https://www.google.com" target="_blank" > see more here - </V2_Text.Hyperlink.Default> + </Typography.LinkBL> . - </V2_Text.Body> + </Typography.BodyBL> </Accordion.Item> </Accordion> ); @@ -143,30 +143,30 @@ export const NoTitle: StoryObj<Component> = { }; export const NoExpandCollapseAll: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <Accordion title="No expand/collapse all" enableExpandAll={false}> <Accordion.Item title="This is the first item"> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - </V2_Text.Body> + </Typography.BodyBL> </Accordion.Item> <Accordion.Item title="This is the second item"> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor  - <V2_Text.Hyperlink.Default + <Typography.LinkBL href="https://www.google.com" target="_blank" > see more here - </V2_Text.Hyperlink.Default> + </Typography.LinkBL> . - </V2_Text.Body> + </Typography.BodyBL> </Accordion.Item> </Accordion> ); diff --git a/stories/accordion/doc-elements.tsx b/stories/accordion/doc-elements.tsx deleted file mode 100644 index c873a06e6..000000000 --- a/stories/accordion/doc-elements.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import styled from "styled-components"; - -// ============================================================================= -// STYLING -// ============================================================================= -export const Container = styled.div` - display: flex; - - button { - :not(:last-of-type) { - margin-right: 1.5rem; - } - } -`; diff --git a/stories/accordion/props-table.tsx b/stories/accordion/props-table.tsx index 280828bd2..fbad1337c 100644 --- a/stories/accordion/props-table.tsx +++ b/stories/accordion/props-table.tsx @@ -1,7 +1,10 @@ -import React from "react"; -import { ApiTable, code } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; -import { TabAttribute, Tabs } from "../storybook-common/tabs"; +import { + ApiTable, + ApiTableSectionProps, + TabAttribute, + Tabs, + code, +} from "stories/storybook-common"; const ACCORDION_DATA: ApiTableSectionProps[] = [ { diff --git a/stories/box-container/box-container.stories.tsx b/stories/box-container/box-container.stories.tsx index 292fd0c56..c42998551 100644 --- a/stories/box-container/box-container.stories.tsx +++ b/stories/box-container/box-container.stories.tsx @@ -1,29 +1,29 @@ import type { Meta, StoryObj } from "@storybook/react"; import { BoxContainer } from "src/box-container"; import { Button } from "src/button"; -import { V2_Text } from "src/v2_text"; +import { Typography } from "src/typography"; type Component = typeof BoxContainer; const meta: Meta<Component> = { - title: "Modules/BoxContainer", + title: "Content/BoxContainer", component: BoxContainer, }; export default meta; export const Default: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <BoxContainer title="This is the title"> <div style={{ padding: "2rem" }}> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - </V2_Text.Body> + </Typography.BodyBL> </div> </BoxContainer> ); @@ -32,17 +32,17 @@ export const Default: StoryObj<Component> = { export const NonCollapsible: StoryObj<Component> = { name: "Non-collapsible", - render: () => { + render: (_args) => { return ( <BoxContainer title="This is not collapsible" collapsible={false}> <div style={{ padding: "2rem" }}> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - </V2_Text.Body> + </Typography.BodyBL> </div> </BoxContainer> ); @@ -50,18 +50,18 @@ export const NonCollapsible: StoryObj<Component> = { }; export const WithDisplayState: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <> <BoxContainer title="Error icon" displayState="error"> <div style={{ padding: "2rem" }}> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - </V2_Text.Body> + </Typography.BodyBL> </div> </BoxContainer> <BoxContainer @@ -69,13 +69,13 @@ export const WithDisplayState: StoryObj<Component> = { displayState="warning" > <div style={{ padding: "2rem" }}> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - </V2_Text.Body> + </Typography.BodyBL> </div> </BoxContainer> </> @@ -84,7 +84,7 @@ export const WithDisplayState: StoryObj<Component> = { }; export const WithCustomCallToAction: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <BoxContainer title="This has a call to action button" @@ -94,13 +94,13 @@ export const WithCustomCallToAction: StoryObj<Component> = { } > <div style={{ padding: "2rem" }}> - <V2_Text.Body> + <Typography.BodyBL> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - </V2_Text.Body> + </Typography.BodyBL> </div> </BoxContainer> ); diff --git a/stories/box-container/props-table.tsx b/stories/box-container/props-table.tsx index 0a981cce6..861a9d7ef 100644 --- a/stories/box-container/props-table.tsx +++ b/stories/box-container/props-table.tsx @@ -1,6 +1,4 @@ -import React from "react"; -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; +import { ApiTable, ApiTableSectionProps } from "stories/storybook-common"; const DATA: ApiTableSectionProps[] = [ { diff --git a/stories/calendar/calendar.stories.tsx b/stories/calendar/calendar.stories.tsx index 38aae8baf..30b48134d 100644 --- a/stories/calendar/calendar.stories.tsx +++ b/stories/calendar/calendar.stories.tsx @@ -2,80 +2,63 @@ import type { Meta, StoryObj } from "@storybook/react"; import dayjs from "dayjs"; import { useState } from "react"; import { Calendar } from "src/calendar"; -import { FullWidthStoryContainer } from "../storybook-common"; type Component = typeof Calendar; const meta: Meta<Component> = { - title: "Modules/Calendar", + title: "Selection and input/Calendar", component: Calendar, }; export default meta; export const Default: StoryObj<Component> = { - render: () => { - return ( - <FullWidthStoryContainer> - <Calendar /> - </FullWidthStoryContainer> - ); + render: (_args) => { + return <Calendar />; }, }; export const WithDisabledDates: StoryObj<Component> = { - render: () => { + render: (_args) => { const [disabledDates] = useState([ dayjs().subtract(2, "days").format("YYYY-MM-DD"), dayjs().add(2, "days").format("YYYY-MM-DD"), ]); - return ( - <FullWidthStoryContainer> - <Calendar disabledDates={disabledDates} /> - </FullWidthStoryContainer> - ); + return <Calendar disabledDates={disabledDates} />; }, }; export const MinAndMaxDates: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( - <FullWidthStoryContainer> - <Calendar - minDate={dayjs().subtract(2, "days").format("YYYY-MM-DD")} - maxDate={dayjs().add(20, "days").format("YYYY-MM-DD")} - /> - </FullWidthStoryContainer> + <Calendar + minDate={dayjs().subtract(2, "days").format("YYYY-MM-DD")} + maxDate={dayjs().add(20, "days").format("YYYY-MM-DD")} + /> ); }, }; export const AllowDisabledSelection: StoryObj<Component> = { - render: () => { + render: (_args) => { const [disabledDates] = useState([ dayjs().date(10).format("YYYY-MM-DD"), dayjs().date(15).format("YYYY-MM-DD"), dayjs().date(25).format("YYYY-MM-DD"), ]); return ( - <FullWidthStoryContainer> - <Calendar - disabledDates={disabledDates} - minDate={dayjs().subtract(6, "weeks").format("YYYY-MM-DD")} - maxDate={dayjs().add(6, "weeks").format("YYYY-MM-DD")} - allowDisabledSelection - /> - </FullWidthStoryContainer> + <Calendar + disabledDates={disabledDates} + minDate={dayjs().subtract(6, "weeks").format("YYYY-MM-DD")} + maxDate={dayjs().add(6, "weeks").format("YYYY-MM-DD")} + allowDisabledSelection + /> ); }, }; export const ShowActiveMonthDaysOnly: StoryObj<Component> = { - render: () => { - return ( - <FullWidthStoryContainer> - <Calendar showActiveMonthDaysOnly={true} /> - </FullWidthStoryContainer> - ); + render: (_args) => { + return <Calendar showActiveMonthDaysOnly />; }, }; diff --git a/stories/calendar/props-table.tsx b/stories/calendar/props-table.tsx index dd9e09ea2..bfb49ce00 100644 --- a/stories/calendar/props-table.tsx +++ b/stories/calendar/props-table.tsx @@ -1,6 +1,4 @@ -import React from "react"; -import { ApiTable, code } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; +import { ApiTable, ApiTableSectionProps, code } from "stories/storybook-common"; const STRING_FORMAT = ( <> diff --git a/stories/error-display/error-display.mdx b/stories/error-display/error-display.mdx index fb59f9590..b80dca0ff 100644 --- a/stories/error-display/error-display.mdx +++ b/stories/error-display/error-display.mdx @@ -56,8 +56,6 @@ If you require customisations down to the style, you can use the relevant `data- | title | `"error-display-title"` | | description | `"error-display-description"` | -> **Note**: For the title and description, you will need to use the `!important` flag when modifying the size, line height and letter spacing - ```tsx // If you are using Styled Components diff --git a/stories/error-display/error-display.stories.tsx b/stories/error-display/error-display.stories.tsx index ff7ab42ce..2a49b0680 100644 --- a/stories/error-display/error-display.stories.tsx +++ b/stories/error-display/error-display.stories.tsx @@ -4,20 +4,20 @@ import { ErrorDisplay } from "src/error-display"; type Component = typeof ErrorDisplay; const meta: Meta<Component> = { - title: "Modules/ErrorDisplay", + title: "Core/ErrorDisplay", component: ErrorDisplay, }; export default meta; export const Default: StoryObj<Component> = { - render: () => { + render: (_args) => { return <ErrorDisplay type="404" />; }, }; export const WithActionButton: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <ErrorDisplay type="unsupported-browser" @@ -34,7 +34,7 @@ export const WithActionButton: StoryObj<Component> = { export const Maintenance: StoryObj<Component> = { name: "Custom attributes - Maintenance", - render: () => { + render: (_args) => { return ( <ErrorDisplay type="maintenance" @@ -46,7 +46,7 @@ export const Maintenance: StoryObj<Component> = { export const Inactivity: StoryObj<Component> = { name: "Custom attributes - Inactivity", - render: () => { + render: (_args) => { return ( <ErrorDisplay type="inactivity" @@ -57,7 +57,7 @@ export const Inactivity: StoryObj<Component> = { }; export const CustomError: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <ErrorDisplay type="404" diff --git a/stories/error-display/props-table.tsx b/stories/error-display/props-table.tsx index 244678bc2..0cda6af69 100644 --- a/stories/error-display/props-table.tsx +++ b/stories/error-display/props-table.tsx @@ -1,7 +1,5 @@ -import React from "react"; +import { ApiTable, ApiTableSectionProps } from "stories/storybook-common"; import styled from "styled-components"; -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; // ============================================================================= // CUSTOM STYLING diff --git a/stories/feedback-rating/feedback-rating.stories.tsx b/stories/feedback-rating/feedback-rating.stories.tsx index cb8bcc6e0..7ad20571f 100644 --- a/stories/feedback-rating/feedback-rating.stories.tsx +++ b/stories/feedback-rating/feedback-rating.stories.tsx @@ -7,7 +7,7 @@ import { ModalBoxDiv } from "./doc-elements"; type Component = typeof FeedbackRating; const meta: Meta<Component> = { - title: "Modules/FeedbackRating", + title: "Selection and input/FeedbackRating", component: FeedbackRating, }; @@ -20,13 +20,12 @@ export const Default: StoryObj<Component> = { const openModal = () => setShow(true); const closeModal = () => setShow(false); return ( - <div> + <> <Modal show={show} onOverlayClick={closeModal}> <Modal.Box onClose={closeModal}> <ModalBoxDiv> - <span>{`You have rated: ${rating} star${ - rating === 1 ? "" : "s" - }`}</span> + You have rated: {rating} star + {rating === 1 ? "" : "s"} </ModalBoxDiv> </Modal.Box> </Modal> @@ -35,7 +34,7 @@ export const Default: StoryObj<Component> = { onRatingChange={setRating} onSubmit={openModal} /> - </div> + </> ); }, }; diff --git a/stories/feedback-rating/props-table.tsx b/stories/feedback-rating/props-table.tsx index 6aa7f88e7..ebbdb6e00 100644 --- a/stories/feedback-rating/props-table.tsx +++ b/stories/feedback-rating/props-table.tsx @@ -1,6 +1,4 @@ -import React from "react"; -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; +import { ApiTable, ApiTableSectionProps } from "stories/storybook-common"; const DATA: ApiTableSectionProps[] = [ { diff --git a/stories/fullscreen-image-carousel/doc-elements.tsx b/stories/fullscreen-image-carousel/doc-elements.tsx index f12c7bc13..ef21ed440 100644 --- a/stories/fullscreen-image-carousel/doc-elements.tsx +++ b/stories/fullscreen-image-carousel/doc-elements.tsx @@ -1,4 +1,4 @@ -import { FullscreenCarouselItemProps } from "../../src/fullscreen-image-carousel"; +import { FullscreenCarouselItemProps } from "src/fullscreen-image-carousel"; const RESOLUTIONS = [ [1600, 900], diff --git a/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx b/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx index ec7c80088..9e9e31290 100644 --- a/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx +++ b/stories/fullscreen-image-carousel/fullscreen-image-carousel.stories.tsx @@ -2,23 +2,22 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; import { Button } from "src/button"; import { FullscreenImageCarousel } from "src/fullscreen-image-carousel"; -import { FullWidthStoryContainer } from "../storybook-common"; import { getImages } from "./doc-elements"; type Component = typeof FullscreenImageCarousel; const meta: Meta<Component> = { - title: "Modules/FullscreenImageCarousel", + title: "Content/FullscreenImageCarousel", component: FullscreenImageCarousel, }; export default meta; export const Default: StoryObj<Component> = { - render: () => { + render: (_args) => { const [show, setShow] = useState(false); return ( - <FullWidthStoryContainer> + <> <Button.Default onClick={() => { setShow((old) => !old); @@ -36,16 +35,16 @@ export const Default: StoryObj<Component> = { show={show} onClose={() => setShow(false)} /> - </FullWidthStoryContainer> + </> ); }, }; export const LoadingAndErrorStates: StoryObj<Component> = { - render: () => { + render: (_args) => { const [show, setShow] = useState(false); return ( - <FullWidthStoryContainer> + <> <Button.Default onClick={() => { setShow((old) => !old); @@ -61,16 +60,16 @@ export const LoadingAndErrorStates: StoryObj<Component> = { show={show} onClose={() => setShow(false)} /> - </FullWidthStoryContainer> + </> ); }, }; export const WithManyImages: StoryObj<Component> = { - render: () => { + render: (_args) => { const [show, setShow] = useState(false); return ( - <FullWidthStoryContainer> + <> <Button.Default onClick={() => { setShow((old) => !old); @@ -83,16 +82,16 @@ export const WithManyImages: StoryObj<Component> = { show={show} onClose={() => setShow(false)} /> - </FullWidthStoryContainer> + </> ); }, }; export const Configurable: StoryObj<Component> = { - render: () => { + render: (_args) => { const [show, setShow] = useState(false); return ( - <FullWidthStoryContainer> + <> <Button.Default onClick={() => { setShow((old) => !old); @@ -109,7 +108,7 @@ export const Configurable: StoryObj<Component> = { hideThumbnail onClose={() => setShow(false)} /> - </FullWidthStoryContainer> + </> ); }, }; diff --git a/stories/fullscreen-image-carousel/props-table.tsx b/stories/fullscreen-image-carousel/props-table.tsx index 026e54d5c..6d7bd0c7a 100644 --- a/stories/fullscreen-image-carousel/props-table.tsx +++ b/stories/fullscreen-image-carousel/props-table.tsx @@ -1,9 +1,8 @@ -import React from "react"; -import { ApiTable } from "../storybook-common/api-table"; import { + ApiTable, ApiTableAttributeRowProps, ApiTableSectionProps, -} from "../storybook-common/api-table/types"; +} from "stories/storybook-common"; const MODAL_PROPS: ApiTableAttributeRowProps[] = [ { diff --git a/stories/link-list/link-list.mdx b/stories/link-list/link-list.mdx index 55b79d970..e1e5b1673 100644 --- a/stories/link-list/link-list.mdx +++ b/stories/link-list/link-list.mdx @@ -16,6 +16,8 @@ import { LinkList } from "@lifesg/react-design-system/link-list"; <Canvas of={LinkListStories.Default} /> +<Canvas of={LinkListStories.Small} /> + ## Minimizing the list You are able to specify the number of items to show in the minimized view by using the `maxShown` property. Specifying diff --git a/stories/link-list/link-list.stories.tsx b/stories/link-list/link-list.stories.tsx index 7fbac72b0..78537ce32 100644 --- a/stories/link-list/link-list.stories.tsx +++ b/stories/link-list/link-list.stories.tsx @@ -1,95 +1,95 @@ import type { Meta, StoryObj } from "@storybook/react"; import { LinkList } from "src/link-list"; -import { StoryContainer } from "../storybook-common"; type Component = typeof LinkList; const meta: Meta<Component> = { - title: "Modules/LinkList", + title: "Navigation/LinkList", component: LinkList, }; export default meta; export const Default: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( - <StoryContainer> - <LinkList - items={[ - { - title: "LinkList with a default sized title", - href: "https://www.life.gov.sg", - target: "_blank", - }, - { - title: "Second item", - description: "This is the description", - href: "https://www.life.gov.sg", - target: "_blank", - }, - ]} - /> - <br /> - <br /> - <LinkList - style="small" - items={[ - { - title: "LinkList with a smaller sized title", - href: "https://www.life.gov.sg", - target: "_blank", - }, - { - title: "Second item", - description: "This is the description", - href: "https://www.life.gov.sg", - target: "_blank", - }, - ]} - /> - </StoryContainer> + <LinkList + items={[ + { + title: "LinkList with a default sized title", + href: "https://www.life.gov.sg", + target: "_blank", + }, + { + title: "Second item", + description: "This is the description", + href: "https://www.life.gov.sg", + target: "_blank", + }, + ]} + /> + ); + }, +}; + +export const Small: StoryObj<Component> = { + render: (_args) => { + return ( + <LinkList + style="small" + items={[ + { + title: "LinkList with a smaller sized title", + href: "https://www.life.gov.sg", + target: "_blank", + }, + { + title: "Second item", + description: "This is the description", + href: "https://www.life.gov.sg", + target: "_blank", + }, + ]} + /> ); }, }; export const MinimizedList: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( - <StoryContainer> - <LinkList - style="small" - maxShown={2} - items={[ - { - title: "First item", - href: "https://www.life.gov.sg", - target: "_blank", - }, - { - title: "Second item", - description: "This is the description", - href: "https://www.life.gov.sg", - target: "_blank", - }, - { - title: "Third item", - description: "Lorem ipsum dolar sit amet", - href: "https://www.google.com", - rel: "noreferrer", - target: "_blank", - }, - { - title: "Fourth item", - description: - "Ut enim ad minima veniam, quis nostrum exercitationem", - href: "https://www.google.com", - target: "_blank", - rel: "noreferrer", - }, - ]} - /> - </StoryContainer> + <LinkList + style="small" + maxShown={2} + items={[ + { + title: "First item", + href: "https://www.life.gov.sg", + target: "_blank", + }, + { + title: "Second item", + description: "This is the description", + href: "https://www.life.gov.sg", + target: "_blank", + }, + { + title: "Third item", + description: "Lorem ipsum dolar sit amet", + href: "https://www.google.com", + rel: "noreferrer", + target: "_blank", + }, + { + title: "Fourth item", + description: + "Ut enim ad minima veniam, quis nostrum exercitationem", + href: "https://www.google.com", + target: "_blank", + rel: "noreferrer", + }, + ]} + /> ); }, }; diff --git a/stories/link-list/props-table.tsx b/stories/link-list/props-table.tsx index 64e457e97..b27767b62 100644 --- a/stories/link-list/props-table.tsx +++ b/stories/link-list/props-table.tsx @@ -1,6 +1,4 @@ -import React from "react"; -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; +import { ApiTable, ApiTableSectionProps } from "stories/storybook-common"; const DATA: ApiTableSectionProps[] = [ { diff --git a/stories/local-nav/doc-elements.tsx b/stories/local-nav/doc-elements.tsx index 9bcb11ec2..661ab8cb2 100644 --- a/stories/local-nav/doc-elements.tsx +++ b/stories/local-nav/doc-elements.tsx @@ -1,5 +1,5 @@ -import { V2_MediaQuery } from "src/v2_media"; -import { V2_Text } from "src/v2_text"; +import { MediaQuery } from "src/theme"; +import { Typography } from "src/typography"; import styled from "styled-components"; export const Page = styled.div` @@ -9,7 +9,7 @@ export const Page = styled.div` gap: 1rem; grid-template-columns: 1fr 2fr; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { grid-template-columns: 1fr; } @@ -17,14 +17,17 @@ export const Page = styled.div` padding: 1rem; } `; +Page.displayName = "Page"; const renderSection = (index: number) => ( <div> - <V2_Text.H2 style={{ margin: "1rem 0" }}>Title {index}</V2_Text.H2> - <V2_Text.Body style={{ margin: "1rem 0" }}> + <Typography.HeaderMD style={{ margin: "1rem 0" }}> + Title {index} + </Typography.HeaderMD> + <Typography.BodyBL style={{ margin: "1rem 0" }}> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a tortor vitae magna sagittis bibendum. - </V2_Text.Body> + </Typography.BodyBL> </div> ); @@ -37,12 +40,12 @@ export const Content = () => ( ); export const TopContent = () => ( - <V2_Text.Body style={{ margin: "1rem 0" }}> + <Typography.BodyBL style={{ margin: "1rem 0" }}> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a tortor vitae magna sagittis bibendum. Proin dui risus, rhoncus eget ligula non, tincidunt volutpat erat. Suspendisse vitae mauris pharetra, ullamcorper massa id, luctus elit. Aliquam at vestibulum nisi. In hac habitasse platea dictumst. Vestibulum sit amet mollis justo, in iaculis sem. Vivamus eu blandit sem. - </V2_Text.Body> + </Typography.BodyBL> ); diff --git a/stories/local-nav/local-nav.stories.tsx b/stories/local-nav/local-nav.stories.tsx index 95d82be47..c6c05aec9 100644 --- a/stories/local-nav/local-nav.stories.tsx +++ b/stories/local-nav/local-nav.stories.tsx @@ -6,14 +6,15 @@ import { LocalNavItemProps, LocalNavMenu, } from "src/local-nav"; -import { V2_MediaWidths } from "src/v2_media"; +import { Breakpoint } from "src/theme"; +import { useTheme } from "styled-components"; import { Content, Page, TopContent } from "./doc-elements"; type MenuComponent = typeof LocalNavMenu; type DropdownComponent = typeof LocalNavDropdown; const meta: Meta = { - title: "Modules/LocalNav", + title: "Navigation/LocalNav", }; export default meta; @@ -25,7 +26,7 @@ const NAV_ITEMS = [ ]; export const Menu: StoryObj<MenuComponent> = { - render: () => { + render: (_args) => { const [selectedIndex, setSelectedIndex] = useState(-1); const handleNavItemClick = ( @@ -49,7 +50,7 @@ export const Menu: StoryObj<MenuComponent> = { }; export const MenuWithCustomTitle: StoryObj<MenuComponent> = { - render: () => { + render: (_args) => { const [selectedIndex, setSelectedIndex] = useState(-1); const handleNavItemClick = ( @@ -72,15 +73,15 @@ export const MenuWithCustomTitle: StoryObj<MenuComponent> = { style={{ padding: "8px 16px", fontWeight: selected ? "bold" : "normal", - color: selected ? "red" : "green", + color: selected ? "tomato" : "darkcyan", display: "flex", alignItems: "center", }} > + {item.title} {selected && ( - <span style={{ marginRight: "8px" }}>✔</span> + <span style={{ marginLeft: "8px" }}>✔</span> )} - {item.title} </div> )} /> @@ -89,7 +90,7 @@ export const MenuWithCustomTitle: StoryObj<MenuComponent> = { }; export const Dropdown: StoryObj<DropdownComponent> = { - render: () => { + render: (_args) => { const [selectedIndex, setSelectedIndex] = useState(-1); const contentRef = useRef<HTMLDivElement>(null); @@ -139,8 +140,9 @@ export const Dropdown: StoryObj<DropdownComponent> = { }; export const DropdownWithCustomTitle: StoryObj<DropdownComponent> = { - render: () => { + render: (_args) => { const [selectedIndex, setSelectedIndex] = useState(-1); + const contentRef = useRef<HTMLDivElement>(null); const handleNavItemClick = ( e: React.MouseEvent, @@ -148,10 +150,23 @@ export const DropdownWithCustomTitle: StoryObj<DropdownComponent> = { index: number ) => { setSelectedIndex(index); + + // Scroll to the selected section + const section = NAV_ITEMS[index]; + if (section) { + const element = contentRef.current?.children[index]; + if (element) { + const top = + element.getBoundingClientRect().top + + window.scrollY - + 200; + window.scrollTo({ top, behavior: "smooth" }); + } + } }; return ( - <div> + <div style={{ height: "200vh", padding: "2rem" }}> <TopContent /> <LocalNavDropdown defaultLabel="Initial" @@ -164,28 +179,36 @@ export const DropdownWithCustomTitle: StoryObj<DropdownComponent> = { style={{ padding: "8px 16px", fontWeight: selected ? "bold" : "normal", - color: selected ? "red" : "green", + color: selected ? "tomato" : "darkcyan", display: "flex", alignItems: "center", }} > + {item.title} {selected && ( - <span style={{ marginRight: "8px" }}>✔</span> + <span style={{ marginLeft: "8px" }}>✔</span> )} - {item.title} </div> )} /> + <div style={{ padding: "1rem" }} ref={contentRef}> + <Content /> + </div> </div> ); }, + parameters: { + layout: "fullscreen", + docs: { story: { inline: false, iframeHeight: 500 } }, + }, }; export const CombinedUsage: StoryObj = { - render: () => { + render: (_args) => { const [selectedIndex, setSelectedIndex] = useState(undefined); + const theme = useTheme(); const isMobile = useMediaQuery({ - maxWidth: V2_MediaWidths.mobileL, + maxWidth: Breakpoint["sm-max"]({ theme }), }); const handleNavItemClick = ( diff --git a/stories/local-nav/props-table.tsx b/stories/local-nav/props-table.tsx index 26034231f..a8b936690 100644 --- a/stories/local-nav/props-table.tsx +++ b/stories/local-nav/props-table.tsx @@ -1,8 +1,10 @@ -import { ApiTable, TabAttribute, Tabs } from "../storybook-common"; import { + ApiTable, ApiTableAttributeRowProps, ApiTableSectionProps, -} from "../storybook-common/api-table/types"; + TabAttribute, + Tabs, +} from "stories/storybook-common"; const COMMON_ATTRIBUTES: ApiTableAttributeRowProps[] = [ { diff --git a/stories/sidenav/props-table.tsx b/stories/sidenav/props-table.tsx index e242fa3a5..fa5a625f8 100644 --- a/stories/sidenav/props-table.tsx +++ b/stories/sidenav/props-table.tsx @@ -1,10 +1,11 @@ -import React from "react"; -import { ApiTable, code } from "../storybook-common/api-table"; import { + ApiTable, ApiTableAttributeRowProps, ApiTableSectionProps, -} from "../storybook-common/api-table/types"; -import { TabAttribute, Tabs } from "../storybook-common/tabs"; + TabAttribute, + Tabs, + code, +} from "stories/storybook-common"; const BASE_ATTRIBUTES: ApiTableAttributeRowProps[] = [ { diff --git a/stories/sidenav/sidenav.stories.tsx b/stories/sidenav/sidenav.stories.tsx index 58f5c1459..f3bb3d502 100644 --- a/stories/sidenav/sidenav.stories.tsx +++ b/stories/sidenav/sidenav.stories.tsx @@ -9,17 +9,18 @@ import { Sidenav } from "src/sidenav"; type Component = typeof Sidenav; const meta: Meta<Component> = { - title: "Modules/Sidenav", + title: "Navigation/Sidenav", component: Sidenav, parameters: { layout: "fullscreen", + docs: { story: { inline: false, iframeHeight: 600 } }, }, }; export default meta; export const Default: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <Sidenav fixed={false} /* For storybook purposes */> <Sidenav.Group separator={true}> @@ -53,7 +54,7 @@ export const Default: StoryObj<Component> = { }; export const SubitemDrawer: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <Sidenav fixed={false} /* For storybook purposes */> <Sidenav.Group separator={true}> diff --git a/stories/timeline/props-table.tsx b/stories/timeline/props-table.tsx index 878cb12a6..54f9eed3c 100644 --- a/stories/timeline/props-table.tsx +++ b/stories/timeline/props-table.tsx @@ -1,6 +1,8 @@ -import React from "react"; -import { ApiTable, code } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; +import { + ApiTable, + ApiTableSectionProps, + StorybookLink, +} from "stories/storybook-common"; const DATA: ApiTableSectionProps[] = [ { @@ -78,13 +80,9 @@ const DATA: ApiTableSectionProps[] = [ </> ), propTypes: ( - <a - href="https://designsystem.life.gov.sg/react/index.html?path=/docs/modules-pill--docs#component-api" - rel="noreferrer" - target="_blank" - > - PillProps[] - </a> + <StorybookLink path="/docs/feedback-indicators-pill--docs#component-api"> + <code>PillProps[]</code> + </StorybookLink> ), }, { diff --git a/stories/timeline/timeline.stories.tsx b/stories/timeline/timeline.stories.tsx index 4bb7c3719..e2b6c73ad 100644 --- a/stories/timeline/timeline.stories.tsx +++ b/stories/timeline/timeline.stories.tsx @@ -1,15 +1,14 @@ +import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; +import { PlusCircleFillIcon } from "@lifesg/react-icons/plus-circle-fill"; import type { Meta, StoryObj } from "@storybook/react"; import { Button } from "src/button"; -import { V2_Text } from "src/v2_text"; import { Timeline } from "src/timeline"; -import { StoryContainer } from "../storybook-common"; -import { PlaceholderIcon } from "@lifesg/react-icons/placeholder"; -import { PlusCircleFillIcon } from "@lifesg/react-icons/plus-circle-fill"; +import { Typography } from "src/typography"; type Component = typeof Timeline; const meta: Meta<Component> = { - title: "Modules/Timeline", + title: "Feedback indicators/Timeline", component: Timeline, }; @@ -18,119 +17,94 @@ export default meta; export const Default: StoryObj<Component> = { render: () => { return ( - <StoryContainer> - <Timeline - title="What's next" - items={[ - { - title: "Item 1", - content: ( - <> - <V2_Text.Body> - Just a regular text based item. Lorem - ipsum dolor sit amet, consectetur. - </V2_Text.Body> - </> - ), - }, - { - title: "Item 2", - content: ( - <> - <V2_Text.Body> - An example with a  - <V2_Text.Hyperlink.Small> - link - </V2_Text.Hyperlink.Small> - . - </V2_Text.Body> - </> - ), - }, - { - title: "Item 3", - content: ( - <> - <V2_Text.Body> - This one comes with an  - </V2_Text.Body> - <V2_Text.Hyperlink.Default - href="https://google.com.sg" - rel="noreferrer" - external - > - external link - </V2_Text.Hyperlink.Default> - . - </> - ), - }, - { - title: "Item 4", - content: ( - <> - <V2_Text.Body> - This item comes with an action button. - </V2_Text.Body> - <Button.Default - style={{ marginTop: "1rem" }} - onClick={() => { - alert("I was clicked"); - }} - > - Click me - </Button.Default> - </> - ), - }, - { - title: "Item 5", - content: ( - <V2_Text.Body> - This one comes with Pill DS icons. - </V2_Text.Body> - ), - statuses: [ - { - type: "outline", - colorType: "red", - children: "Status outline red", - icon: <PlusCircleFillIcon />, - }, - { - type: "solid", - colorType: "blue", - children: "Status solid blue", - icon: <PlaceholderIcon />, - }, - ], - }, - { - title: "Item 6", - content: ( - <V2_Text.Body> - This one comes with Pill DS icons with long - status text. - </V2_Text.Body> - ), - statuses: [ - { - type: "outline", - colorType: "red", - children: "Status outline red long text", - icon: <PlusCircleFillIcon />, - }, - { - type: "solid", - colorType: "blue", - children: "Status solid blue", - icon: <PlaceholderIcon />, - }, - ], - }, - ]} - /> - </StoryContainer> + <Timeline + title="What's next" + items={[ + { + title: "Item 1", + content: + "Just a regular text based item. Lorem ipsum dolor sit amet, consectetur.", + }, + { + title: "Item 2", + content: ( + <> + An example with a{" "} + <Typography.LinkMD>link</Typography.LinkMD>. + </> + ), + }, + { + title: "Item 3", + content: ( + <> + This one comes with an{" "} + <Typography.LinkMD + href="https://google.com.sg" + rel="noreferrer" + external + > + external link + </Typography.LinkMD> + . + </> + ), + }, + { + title: "Item 4", + content: ( + <> + This item comes with an action button.{" "} + <Button.Default + style={{ marginTop: "1rem" }} + onClick={() => { + alert("I was clicked"); + }} + > + Click me + </Button.Default> + </> + ), + }, + { + title: "Item 5", + content: "This one comes with the DS pills.", + statuses: [ + { + type: "outline", + colorType: "red", + children: "Status outline red", + icon: <PlusCircleFillIcon />, + }, + { + type: "solid", + colorType: "blue", + children: "Status solid blue", + icon: <PlaceholderIcon />, + }, + ], + }, + { + title: "Item 6", + content: + "This one comes with the DS pills containing long status text.", + statuses: [ + { + type: "outline", + colorType: "red", + children: "Status outline red long text", + icon: <PlusCircleFillIcon />, + }, + { + type: "solid", + colorType: "blue", + children: "Status solid blue", + icon: <PlaceholderIcon />, + }, + ], + }, + ]} + /> ); }, }; @@ -138,71 +112,67 @@ export const Default: StoryObj<Component> = { export const Variants: StoryObj<Component> = { render: () => { return ( - <StoryContainer> - <Timeline - title="What's next" - items={[ - { - title: "Item 1", - variant: "completed", - content: ( - <V2_Text.Body> - An example with <code>completed</code>{" "} - variant - </V2_Text.Body> - ), - }, - { - title: "Item 2", - variant: "current", - content: ( - <V2_Text.Body> - An example with <code>current</code> variant - </V2_Text.Body> - ), - }, - { - title: "Item 3", - variant: "upcoming-active", - content: ( - <V2_Text.Body> - An example with <code>upcoming-active</code>{" "} - variant - </V2_Text.Body> - ), - }, - { - title: "Item 4", - variant: "upcoming-inactive", - content: ( - <V2_Text.Body> - An example with{" "} - <code>upcoming-inactive</code> variant - </V2_Text.Body> - ), - }, - { - title: "Item 5", - variant: "error", - content: ( - <V2_Text.Body> - An example with <code>error</code> variant - </V2_Text.Body> - ), - }, - { - title: "Item 6", - variant: "disabled", - content: ( - <V2_Text.Body> - An example with <code>disabled</code>{" "} - variant - </V2_Text.Body> - ), - }, - ]} - /> - </StoryContainer> + <Timeline + title="What's next" + items={[ + { + title: "Item 1", + variant: "completed", + content: ( + <> + An example with <code>completed</code> variant + </> + ), + }, + { + title: "Item 2", + variant: "current", + content: ( + <> + An example with <code>current</code> variant + </> + ), + }, + { + title: "Item 3", + variant: "upcoming-active", + content: ( + <> + An example with <code>upcoming-active</code>{" "} + variant + </> + ), + }, + { + title: "Item 4", + variant: "upcoming-inactive", + content: ( + <> + An example with <code>upcoming-inactive</code>{" "} + variant + </> + ), + }, + { + title: "Item 5", + variant: "error", + content: ( + <> + An example with <code>error</code> variant + </> + ), + }, + { + title: "Item 6", + variant: "disabled", + content: ( + <> + An example with <code>disabled</code> variant + </> + ), + }, + ]} + /> ); }, }; diff --git a/stories/uneditable-section/uneditable-section.stories.tsx b/stories/uneditable-section/uneditable-section.stories.tsx index 116a8cb38..3e8f86cca 100644 --- a/stories/uneditable-section/uneditable-section.stories.tsx +++ b/stories/uneditable-section/uneditable-section.stories.tsx @@ -14,14 +14,14 @@ import { SAMPLE_ITEMS } from "./doc-elements"; type Component = typeof UneditableSection; const meta: Meta<Component> = { - title: "Modules/UneditableSection", + title: "Content/UneditableSection", component: UneditableSection, }; export default meta; export const Default: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <UneditableSection title="Your personal information" @@ -33,7 +33,7 @@ export const Default: StoryObj<Component> = { }; export const NoBackground: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <UneditableSection title="Your personal information" @@ -46,7 +46,7 @@ export const NoBackground: StoryObj<Component> = { }; export const WithMaskedItems: StoryObj<Component> = { - render: () => { + render: (_args) => { const ITEMS: UneditableSectionItemProps[] = [ { label: "Plain value", @@ -102,7 +102,7 @@ export const WithMaskedItems: StoryObj<Component> = { }; export const ControlledMaskUnmask: StoryObj<Component> = { - render: () => { + render: (_args) => { const [item, setItem] = useState<UneditableSectionItemProps>({ id: "item1", label: "This has controlled masking/unmasking of values", @@ -140,7 +140,7 @@ export const ControlledMaskUnmask: StoryObj<Component> = { }; export const MaskUnmaskWithLoading: StoryObj<Component> = { - render: () => { + render: (_args) => { const [item, setItem] = useState<UneditableSectionItemProps>({ id: "item1", label: "This has a loading display when unmasking", @@ -189,7 +189,7 @@ export const MaskUnmaskWithLoading: StoryObj<Component> = { }; export const MaskUnmaskWithError: StoryObj<Component> = { - render: () => { + render: (_args) => { const [item, setItem] = useState<UneditableSectionItemProps>({ id: "item1", label: "This has an error display when unmasking", @@ -238,7 +238,7 @@ export const MaskUnmaskWithError: StoryObj<Component> = { }; export const MaskUnmaskWithAlert: StoryObj<Component> = { - render: () => { + render: (_args) => { const ITEMS: UneditableSectionItemProps[] = [ { id: "item1", @@ -263,7 +263,7 @@ export const MaskUnmaskWithAlert: StoryObj<Component> = { }; export const WithCustomContent: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <UneditableSection title="Your personal information" @@ -290,7 +290,7 @@ export const WithCustomContent: StoryObj<Component> = { }; export const ComposingFromScratch: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <UneditableSection> <div @@ -363,7 +363,7 @@ export const ComposingFromScratch: StoryObj<Component> = { }; export const Stretch: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <BoxContainer title="Review" collapsible={false}> <UneditableSection From 540a5c17870da6bae5262a96b3a087666c5a557d Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Tue, 17 Dec 2024 10:06:05 +0800 Subject: [PATCH 0765/1949] [V3][RL] Update DataTable docs --- stories/data-table/data-table.stories.tsx | 18 +++++++----------- stories/data-table/doc-elements.tsx | 16 +++++++++++----- stories/data-table/props-table.tsx | 14 ++++++++------ 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/stories/data-table/data-table.stories.tsx b/stories/data-table/data-table.stories.tsx index b6ceeecc4..2dc7c403a 100644 --- a/stories/data-table/data-table.stories.tsx +++ b/stories/data-table/data-table.stories.tsx @@ -8,7 +8,7 @@ import { DATA_HEADERS, DATA_ROWS, generateRows } from "./row-data"; type Component = typeof DataTable; const meta: Meta<Component> = { - title: "Modules/DataTable", + title: "Content/DataTable", component: DataTable, }; @@ -180,15 +180,13 @@ export const MultiSelectionOfRows: StoryObj<Component> = { }; export const DisabledCheckboxes: StoryObj<Component> = { - render: () => { - const [selected, setSelected] = useState(["1", "3"]); - const [disabled, setDisabled] = useState(["1", "2"]); + render: (_args) => { return ( <DataTable headers={DATA_HEADERS} rows={DATA_ROWS} - selectedIds={selected} - disabledIds={disabled} + selectedIds={["1", "3"]} + disabledIds={["1", "2"]} enableMultiSelect /> ); @@ -196,7 +194,7 @@ export const DisabledCheckboxes: StoryObj<Component> = { }; export const AlternatingRows: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <DataTable headers={DATA_HEADERS} @@ -213,7 +211,6 @@ export const ActionBar: StoryObj<Component> = { render: () => { const [selected, setSelected] = useState(["1"]); const [rowCount, setRowCount] = useState(5); - const [height, setHeight] = useState("default"); const handleOnClickSelect = (rowId, isSelected) => { if (isSelected) { setSelected((selected) => [...selected, rowId]); @@ -231,7 +228,6 @@ export const ActionBar: StoryObj<Component> = { onRowCountChange={setRowCount} > <DataTable - key={height} headers={DATA_HEADERS} rows={generateRows(rowCount)} alternatingRows @@ -249,13 +245,13 @@ export const ActionBar: StoryObj<Component> = { }; export const NoRows: StoryObj<Component> = { - render: () => { + render: (_args) => { return <DataTable headers={DATA_HEADERS} />; }, }; export const LoadingState: StoryObj<Component> = { - render: () => { + render: (_args) => { return <DataTable headers={DATA_HEADERS} loadState="loading" />; }, }; diff --git a/stories/data-table/doc-elements.tsx b/stories/data-table/doc-elements.tsx index 54f321710..4b7c76fc6 100644 --- a/stories/data-table/doc-elements.tsx +++ b/stories/data-table/doc-elements.tsx @@ -1,7 +1,7 @@ import React, { useState } from "react"; +import { Toggle } from "src/toggle"; +import { Typography } from "src/typography"; import styled from "styled-components"; -import { Toggle } from "../../src/toggle"; -import { V2_Text } from "../../src/v2_text"; const Container = styled.div<{ $height: Height }>` #table-wrapper { @@ -40,8 +40,12 @@ export const DataTableWithCustomHeight = ({ return ( <Container $height={height} key={height}> <div> - <div>Modify the options to view the scroll behaviour</div> - <V2_Text.H6>Number of rows</V2_Text.H6> + <Typography.BodyBL> + Modify the options to view the scroll behaviour + </Typography.BodyBL> + <Typography.BodySM weight="semibold"> + Number of rows + </Typography.BodySM> <div> <input type="range" @@ -54,7 +58,9 @@ export const DataTableWithCustomHeight = ({ }} /> </div> - <V2_Text.H6>Table height</V2_Text.H6> + <Typography.BodySM weight="semibold"> + Table height + </Typography.BodySM> <ToggleContainer> <Toggle type="radio" diff --git a/stories/data-table/props-table.tsx b/stories/data-table/props-table.tsx index 824b75afb..9962f3252 100644 --- a/stories/data-table/props-table.tsx +++ b/stories/data-table/props-table.tsx @@ -1,6 +1,8 @@ -import React from "react"; -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; +import { + ApiTable, + ApiTableSectionProps, + StorybookLink, +} from "stories/storybook-common"; const DATA: ApiTableSectionProps[] = [ { @@ -69,9 +71,9 @@ const DATA: ApiTableSectionProps[] = [ name: "emptyView", description: "Override props for the empty view display", propTypes: ( - <a href="https://designsystem.life.gov.sg/react/index.html?path=/docs/modules-errordisplay--docs"> - ErrorDisplayAttributes - </a> + <StorybookLink path="/docs/core-errordisplay--docs#component-api"> + <code>ErrorDisplayAttributes</code> + </StorybookLink> ), }, { From 89eabfeaf6bc26494f526f0f0d4b9882bdffe136 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Tue, 17 Dec 2024 23:52:41 +0800 Subject: [PATCH 0766/1949] [V3][RL] Update PopoverInline docs --- .../popover-inline/popover-inline.stories.tsx | 47 ++++++++++--------- stories/popover-v2/popover.mdx | 2 +- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/stories/popover-v2/popover-inline/popover-inline.stories.tsx b/stories/popover-v2/popover-inline/popover-inline.stories.tsx index e92327c45..6926a00ed 100644 --- a/stories/popover-v2/popover-inline/popover-inline.stories.tsx +++ b/stories/popover-v2/popover-inline/popover-inline.stories.tsx @@ -1,87 +1,88 @@ import { ICircleFillIcon } from "@lifesg/react-icons"; import type { Meta, StoryObj } from "@storybook/react"; import { PopoverInline } from "src/popover-v2"; -import { V2_Text } from "src/v2_text"; +import { Typography } from "src/typography"; +import { StackDecorator } from "stories/storybook-common"; type Component = typeof PopoverInline; const meta: Meta<Component> = { - title: "Modules/PopoverV2/PopoverInline", + title: "Overlays/PopoverInline", component: PopoverInline, }; export default meta; export const InlineText: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <> - <V2_Text.H3> + <Typography.HeaderSM weight="semibold"> The{" "} <PopoverInline content="fox" popoverContent="It is quick and brown" />{" "} jumps over the dog - </V2_Text.H3> - <br /> - <V2_Text.Body> + </Typography.HeaderSM> + <Typography.BodyBL> The{" "} <PopoverInline content="fox" popoverContent="It is quick and brown" />{" "} jumps over the dog - </V2_Text.Body> + </Typography.BodyBL> </> ); }, + decorators: [StackDecorator()], }; export const InlineIcon: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <> - <V2_Text.H3> + <Typography.HeaderSM weight="semibold"> Get a free slice of pizza today{" "} <PopoverInline popoverContent="Terms and conditions apply" icon={<ICircleFillIcon />} /> - </V2_Text.H3> - <br /> - <V2_Text.Body> + </Typography.HeaderSM> + <Typography.BodyBL> Get a free slice of pizza today{" "} <PopoverInline popoverContent="Terms and conditions apply" icon={<ICircleFillIcon />} /> - </V2_Text.Body> + </Typography.BodyBL> </> ); }, + decorators: [StackDecorator()], }; export const InlineTextAndIcon: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( - <V2_Text.Body> + <Typography.BodyBL> Only available on{" "} <PopoverInline content="Fridays" popoverContent="Operating hours: 9am to 5pm" icon={<ICircleFillIcon />} ></PopoverInline> - </V2_Text.Body> + </Typography.BodyBL> ); }, }; export const UnderlineStyle: StoryObj<Component> = { - render: () => { + render: (_args) => { return ( <> - <V2_Text.Body> + <Typography.BodyBL> This is the{" "} <PopoverInline content="underlined style" @@ -90,9 +91,8 @@ export const UnderlineStyle: StoryObj<Component> = { underlineStyle="underline" underlineHoverStyle="underline" /> - </V2_Text.Body> - <br /> - <V2_Text.Body> + </Typography.BodyBL> + <Typography.BodyBL> This is the{" "} <PopoverInline content="dashed style" @@ -101,8 +101,9 @@ export const UnderlineStyle: StoryObj<Component> = { underlineStyle="underline-dashed" underlineHoverStyle="underline-dashed" /> - </V2_Text.Body> + </Typography.BodyBL> </> ); }, + decorators: [StackDecorator()], }; diff --git a/stories/popover-v2/popover.mdx b/stories/popover-v2/popover.mdx index 30a2d93c8..5d4904d74 100644 --- a/stories/popover-v2/popover.mdx +++ b/stories/popover-v2/popover.mdx @@ -14,7 +14,7 @@ This module contains: - PopoverV2 - the presentational component - PopoverTrigger - a utility component that handles triggering of the popover -- [PopoverInline](/docs/modules-popoverv2-popoverinline--docs) - a utility component that displays a text or icon-based trigger +- [PopoverInline](/docs/overlays-popoverinline--docs) - a utility component that displays a text or icon-based trigger ```tsx import { PopoverTrigger } from "@lifesg/react-design-system/popover-v2"; From 6aa1f5422c3a1bece55e35eb571685bf41373de8 Mon Sep 17 00:00:00 2001 From: Anu Mutyala <mutyala.lakshmi@ufinity.com> Date: Mon, 23 Dec 2024 10:25:23 +0800 Subject: [PATCH 0767/1949] [MISC][AM] update props table for local nav --- stories/local-nav/props-table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stories/local-nav/props-table.tsx b/stories/local-nav/props-table.tsx index 26034231f..4cb208173 100644 --- a/stories/local-nav/props-table.tsx +++ b/stories/local-nav/props-table.tsx @@ -41,7 +41,7 @@ const COMMON_ATTRIBUTES: ApiTableAttributeRowProps[] = [ name: "renderItem", description: "Function to customise the rendering of the nav item", propTypes: [ - "((item: LocalNavItemProps,renderProps: { selected: boolean }) => React.ReactNode", + "((item: LocalNavItemProps,renderProps: { selected: boolean, stickied: boolean }) => React.ReactNode", ], }, ]; From 442e69691ebaddd41f3b7d68219adc6c89e677b1 Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Wed, 31 Jul 2024 23:27:55 +0800 Subject: [PATCH 0768/1949] [FLOAT][RL] Create new nested dropdown with flattened hierarchy --- .../nested-dropdown-list-helpers.ts | 262 ++++++++ .../nested-dropdown-list.styles.tsx | 117 ++++ .../dropdown-list-v2/nested-dropdown-list.tsx | 556 ++++++++++++++++ src/shared/dropdown-list-v2/types.ts | 89 ++- .../form/form-nested-select/test.stories.tsx | 367 +++++++++++ .../nested-dropdown-list.spec.tsx | 618 ++++++++++++++++++ 6 files changed, 2000 insertions(+), 9 deletions(-) create mode 100644 src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts create mode 100644 src/shared/dropdown-list-v2/nested-dropdown-list.styles.tsx create mode 100644 src/shared/dropdown-list-v2/nested-dropdown-list.tsx create mode 100644 stories/form/form-nested-select/test.stories.tsx create mode 100644 tests/shared/dropdown-list-v2/nested-dropdown-list.spec.tsx diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts b/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts new file mode 100644 index 000000000..8c0c55330 --- /dev/null +++ b/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts @@ -0,0 +1,262 @@ +import { produce } from "immer"; +import isEqual from "lodash/isEqual"; +import { + NestedDropdownListItemProps, + NestedDropdownListLocalItem, +} from "./types"; + +/** + * builds a flattened representation of the tree + * the items are listed in their visual order + */ +export const flattenList = <T>( + nestedList: NestedDropdownListItemProps<T>[], + selectedKeyPaths: string[][], + multiSelect: boolean, + searchTerm: string, + initialExpanded: boolean +): NestedDropdownListLocalItem<T>[] => { + const items: NestedDropdownListLocalItem<T>[] = []; + + const flatten = ( + list: NestedDropdownListItemProps<T>[], + parentItem: NestedDropdownListLocalItem<T> + ) => { + const current: NestedDropdownListLocalItem<T>[] = []; + const hasNestedSiblings = !!list.find( + (option) => option.subItems?.length + ); + + for (let i = 0; i < list.length; i++) { + const option = list[i]; + const level = parentItem ? parentItem.level + 1 : 0; + const item: (typeof items)[number] = { + item: option, + index: items.length, + indexInParent: i, + parentSetSize: list.length, + keyPath: parentItem + ? [...parentItem.keyPath, option.key] + : [option.key], + parentIndex: parentItem ? parentItem.index : -1, + parentKeyPath: parentItem + ? [...parentItem.parentKeyPath, parentItem.item.key] + : [], + level, + visible: level === 0 || initialExpanded || parentItem.expanded, + expanded: initialExpanded, + checked: false, + hasSubItems: !!option.subItems?.length, + subItemIndexes: [], + hasNestedSiblings, + matched: searchTerm + ? option.label.toLowerCase().indexOf(searchTerm) !== -1 + : false, + hasMatchedSubItems: false, + }; + item.checked = !!selectedKeyPaths.find((keyPath) => + isEqual(keyPath, item.keyPath) + ); + current.push(item); + items.push(item); + + if (option.subItems?.length) { + const children = flatten(option.subItems, item); + + if (multiSelect && item.checked !== true) { + const allChildrenSelected = + children.filter((child) => child.checked === true) + .length === children.length; + const mixed = + children.filter((child) => child.checked !== false) + .length > 0; + + if (allChildrenSelected) { + item.checked = true; + } else if (mixed) { + item.checked = "mixed"; + } + } + + item.hasMatchedSubItems = children.some( + (child) => child.matched || child.hasMatchedSubItems + ); + item.subItemIndexes = children.map((child) => child.index); + } + } + return current; + }; + + flatten(nestedList, undefined); + + return items; +}; + +export const expandSelectedSubtrees = <T>( + list: NestedDropdownListLocalItem<T>[] +) => { + return produce(list, (draft) => { + const selectedItems = draft.filter((item) => item.checked === true); + for (const selectedItem of selectedItems) { + let parentIndex = selectedItem.parentIndex; + while (parentIndex >= 0) { + const parent = draft[parentIndex]; + parent.visible = true; + parent.expanded = true; + + for (const i of parent.subItemIndexes) { + draft[i].visible = true; + } + + parentIndex = parent.parentIndex; + } + } + }); +}; + +export const expandMatchedSubtrees = <T>( + list: NestedDropdownListLocalItem<T>[] +) => { + return produce(list, (draft) => { + for (const item of draft) { + if (item.matched) { + item.visible = true; + } + + if (item.hasMatchedSubItems) { + item.visible = true; + item.expanded = true; + + for (const i of item.subItemIndexes) { + draft[i].visible = true; + } + } + } + }); +}; + +export const expandFirstSubtree = <T>( + list: NestedDropdownListLocalItem<T>[] +) => { + return produce(list, (draft) => { + const firstSubtreeIndex = draft.findIndex((item) => item.hasSubItems); + if (firstSubtreeIndex < 0) { + return; + } + let index = firstSubtreeIndex; + let length = 0; + // find the first subtree + for (let i = index; i < draft.length; i++) { + const nextItemLength = draft[i].keyPath.length; + if (nextItemLength > length) { + length = nextItemLength; + } else if (nextItemLength < length) { + break; + } + + index = i; + draft[i].visible = true; + draft[i].expanded = true; + } + + // expand siblings of ancestors + for (let i = 0; i < draft.length; i++) { + const item = draft[i]; + const parentKeyPath = item.keyPath.slice(0, -1); + const ancestorKeyPath = draft[index].keyPath.slice( + 0, + parentKeyPath.length + ); + if (isEqual(parentKeyPath, ancestorKeyPath)) { + item.visible = true; + } + } + return draft; + }); +}; + +export const toggleSubtree = <T>( + list: NestedDropdownListLocalItem<T>[], + index: number, + expanded: boolean +) => { + return produce(list, (draft) => { + draft[index].expanded = expanded; + const keyPath = draft[index].keyPath; + for (let i = index + 1; i < draft.length; i++) { + const item = draft[i]; + const parent = draft[item.parentIndex]; + const ancestorKeyPath = item.keyPath.slice(0, keyPath.length); + if (isEqual(keyPath, ancestorKeyPath)) { + item.visible = expanded && parent.expanded && parent.visible; + } else { + // no more descendents + break; + } + } + }); +}; + +export const updateSelectedState = <T>( + list: NestedDropdownListLocalItem<T>[], + selectedKeyPaths: string[][], + multiSelect: boolean +) => { + return produce(list, (draft) => { + for (let i = draft.length - 1; i >= 0; i--) { + const item = draft[i]; + item.checked = !!selectedKeyPaths.find((keyPath) => + isEqual(keyPath, item.keyPath) + ); + + if (item.hasSubItems) { + if (multiSelect && item.checked !== true) { + const children = item.subItemIndexes.map( + (index) => draft[index] + ); + + const allChildrenSelected = + children.filter((child) => child.checked === true) + .length === children.length; + const mixed = + children.filter((child) => child.checked !== false) + .length > 0; + + if (allChildrenSelected) { + item.checked = true; + } else if (mixed) { + item.checked = "mixed"; + } + } + } + } + }); +}; + +export const findIndexFromStart = <T>( + arr: T[], + predicate: (e: T) => boolean, + start: number +): number => { + for (let i = start; i < arr.length; i++) { + if (predicate(arr[i])) { + return i; + } + } + + return -1; +}; + +export const findIndexFromEnd = <T>( + arr: T[], + predicate: (e: T) => boolean, + end: number +): number => { + for (let i = end; i >= 0; i--) { + if (predicate(arr[i])) { + return i; + } + } + + return -1; +}; diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list.styles.tsx b/src/shared/dropdown-list-v2/nested-dropdown-list.styles.tsx new file mode 100644 index 000000000..fbf29bff9 --- /dev/null +++ b/src/shared/dropdown-list-v2/nested-dropdown-list.styles.tsx @@ -0,0 +1,117 @@ +import { MinusSquareFillIcon } from "@lifesg/react-icons/minus-square-fill"; +import { TickIcon } from "@lifesg/react-icons/tick"; +import styled, { css } from "styled-components"; +import { Color } from "../../color"; + +// ============================================================================= +// STYLE INTERFACE +// ============================================================================= +interface ListItemStyleProps { + $active?: boolean; + $visible?: boolean; + $toggleable?: boolean; +} + +interface IndentStyleProps { + $level?: number; +} + +interface IndicatorStyleProps { + $hasNestedSiblings?: boolean; +} + +interface ExpandButtonStyleProps { + $expanded?: boolean; +} + +// ============================================================================= +// STYLING +// ============================================================================= + +// ----------------------------------------------------------------------------- +// LIST ITEM STYLES +// ----------------------------------------------------------------------------- + +export const ListItemContainer = styled.li<ListItemStyleProps>` + display: ${(props) => (props.$visible ? "flex" : "none")}; +`; + +export const ListItem = styled.div<ListItemStyleProps>` + flex: 1; + display: flex; + align-items: flex-start; + gap: 0.5rem; + padding: 0.75rem 0.5rem; + cursor: ${(props) => (props.$toggleable ? "default" : "pointer")}; + overflow: hidden; // required for label to truncate properly + + outline-color: ${Color.Accent.Light[3]}; + + ${(props) => + props.$active && + css` + background: ${Color.Accent.Light[5]}; + `} +`; + +export const Indent = styled.div<IndentStyleProps>` + height: 1px; + width: ${(props) => { + let total = 0; + for (let i = 0; i < props.$level; i++) { + total += 1.625; // expand button + total += 0.5; // space + } + return total; + }}rem; +`; + +export const ExpandButton = styled.div<ExpandButtonStyleProps>` + width: 1.625rem; + height: 1.625rem; + color: ${Color.Primary}; + cursor: pointer; + + svg { + width: 1.625rem; + height: 1.625rem; + transition: transform 250ms ease-in-out; + + ${(props) => { + if (props.$expanded) { + return css` + transform: rotate(90deg); + `; + } + }} + } +`; + +export const UnexpandableIndicator = styled.div` + width: 1.625rem; + height: 1.625rem; + margin-right: 0.5rem; +`; + +export const SelectionIndicator = styled.div<IndicatorStyleProps>` + flex-shrink: 0; + height: 1.625rem; + width: ${(props) => (props.$hasNestedSiblings ? "1.625rem" : "1rem")}; + + display: flex; + justify-content: center; +`; + +export const SelectedIndicator = styled(TickIcon)` + flex-shrink: 0; + height: 1.625rem; + width: 1rem; + color: ${Color.Primary}; +`; + +export const CheckboxMixedIndicator = styled(MinusSquareFillIcon)` + flex-shrink: 0; + height: 1.625rem; + width: 1.625rem; + color: ${Color.Primary}; +`; diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx new file mode 100644 index 000000000..6712614a1 --- /dev/null +++ b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx @@ -0,0 +1,556 @@ +import { CaretRightIcon } from "@lifesg/react-icons/caret-right"; +import { useEffect, useMemo, useRef, useState } from "react"; +import { Spinner } from "../../button/button.style"; +import { useEvent, useEventListener, useIsMounted } from "../../util"; +import { DropdownLabel } from "./dropdown-label"; +import { + CheckboxSelectedIndicator, + CheckboxUnselectedIndicator, + Container, + LabelIcon, + List, + ResultStateContainer, + ResultStateText, + SelectAllButton, + SelectAllContainer, + TryAgainButton, +} from "./dropdown-list.styles"; +import { DropdownSearch } from "./dropdown-search"; +import { + expandFirstSubtree, + expandMatchedSubtrees, + expandSelectedSubtrees, + findIndexFromEnd, + findIndexFromStart, + flattenList, + toggleSubtree, + updateSelectedState, +} from "./nested-dropdown-list-helpers"; +import { + CheckboxMixedIndicator, + ExpandButton, + Indent, + ListItem, + ListItemContainer, + SelectedIndicator, + SelectionIndicator, + UnexpandableIndicator, +} from "./nested-dropdown-list.styles"; +import { + NestedDropdownListItemProps, + NestedDropdownListLocalItem, + NestedDropdownListProps, +} from "./types"; + +export const NestedDropdownList = <T,>({ + listItems, + multiSelect, + selectedKeyPaths, + itemsLoadState = "success", + itemTruncationType = "end", + itemMaxLines = 2, + variant = "default", + listboxId, + width, + mode = "default", + selectableCategory: _selectableCategory, + onSelectItem, + onSelectAll, + onRetry, + /* DropdownSearchProps */ + enableSearch, + hideNoResultsDisplay, + searchPlaceholder = "Search", + searchFunction, + onSearch, +}: NestedDropdownListProps<T>) => { + // ========================================================================= + // CONST, STATE, REF + // ========================================================================= + const selectableCategory = multiSelect || _selectableCategory; + const [searchValue, setSearchValue] = useState<string>(""); + const searchTerm = searchValue.toLowerCase().trim(); + const [searchActive, setSearchActive] = useState<boolean>(false); + const nodeRef = useRef<HTMLDivElement>(); + const listRef = useRef<HTMLDivElement>(); + const listItemRefs = useRef<HTMLElement[]>([]); + const searchInputRef = useRef<HTMLInputElement>(); + const mounted = useIsMounted(); + + // maintaining a separate list for search and non-search as we need to + // preserve the original expanded state + const [unfilteredListItems, setUnfilteredListItems] = useState< + NestedDropdownListLocalItem<T>[] + >([]); + const [filteredListItems, setFilteredListItems] = useState< + NestedDropdownListLocalItem<T>[] + >([]); + + const maxLevel = useMemo(() => { + let currentMaxLevel = 0; + for (const item of unfilteredListItems) { + if (item.level > currentMaxLevel) { + currentMaxLevel = item.level; + } + } + return currentMaxLevel; + }, [unfilteredListItems]); + + // TODO: persist in context? + const [focusedIndex, setFocusedIndex] = useState(0); + + // ========================================================================= + // EVENT HANDLERS + // ========================================================================= + const handleKeyboardPress = (event: KeyboardEvent) => { + const activeList = searchActive + ? filteredListItems + : unfilteredListItems; + + switch (event.code) { + case "ArrowDown": { + event.preventDefault(); + const upcomingIndex = findIndexFromStart( + activeList, + (item) => item.visible, + focusedIndex + 1 + ); + if (upcomingIndex >= 0) { + setFocusedIndex(upcomingIndex); + listItemRefs.current[upcomingIndex].focus(); + } + break; + } + case "ArrowUp": { + event.preventDefault(); + const upcomingIndex = findIndexFromEnd( + activeList, + (item) => item.visible, + focusedIndex - 1 + ); + if (upcomingIndex >= 0) { + setFocusedIndex(upcomingIndex); + listItemRefs.current[upcomingIndex].focus(); + } else if (focusedIndex === 0 && searchInputRef.current) { + searchInputRef.current.focus(); + setFocusedIndex(-1); + } + break; + } + case "ArrowRight": { + event.preventDefault(); + toggleCategory(focusedIndex, true); + break; + } + case "ArrowLeft": { + event.preventDefault(); + toggleCategory(focusedIndex, false); + break; + } + case "Space": { + if ( + document.activeElement === + listItemRefs.current[focusedIndex] + ) { + event.preventDefault(); + const target = activeList[focusedIndex]; + if (target.hasSubItems && !selectableCategory) { + return; + } + onSelectItem?.(target.keyPath); + } + break; + } + } + }; + + const handleSearchInputChange = ( + event: React.ChangeEvent<HTMLInputElement> + ) => { + const value = event.target.value; + setSearchValue(value); + + if (value === "") { + setSearchActive(false); + } else if (value.trim().length >= 3) { + setSearchActive(true); + } + + onSearch?.(); + }; + + const handleOnClear = () => { + setSearchValue(""); + setSearchActive(false); + searchInputRef.current.focus(); + + onSearch?.(); + }; + + const handleTryAgain = () => { + onRetry?.(); + }; + + // ========================================================================= + // HELPER FUNCTIONS + // ========================================================================= + const flatten = useEvent( + ( + nestedList: NestedDropdownListItemProps<T>[], + initialExpanded: boolean + ): NestedDropdownListLocalItem<T>[] => { + return flattenList( + nestedList, + selectedKeyPaths, + multiSelect, + searchTerm, + initialExpanded + ); + } + ); + + const flattenDefaultMode = useEvent( + (nestedList: NestedDropdownListItemProps<T>[]) => { + if (selectedKeyPaths.length) { + return expandSelectedSubtrees(flatten(nestedList, false)); + } else { + return expandFirstSubtree(flatten(nestedList, false)); + } + } + ); + + const filter = useEvent((nestedList: NestedDropdownListItemProps<T>[]) => { + const filterMatchedItems = (list: NestedDropdownListItemProps<T>[]) => { + const matchedItems: NestedDropdownListItemProps<T>[] = []; + for (const item of list) { + const match = + item.label.toLowerCase().indexOf(searchTerm) !== -1; + + if (match) { + matchedItems.push(item); + continue; + } + + if (item.subItems) { + const matchedSubItems = filterMatchedItems(item.subItems); + if (matchedSubItems.length > 0) { + matchedItems.push({ + ...item, + subItems: matchedSubItems, + }); + continue; + } + } + } + return matchedItems; + }; + return filterMatchedItems(nestedList); + }); + + const toggleCategory = (index: number, nextExpanded: boolean) => { + const activeList = searchActive + ? filteredListItems + : unfilteredListItems; + + const list = toggleSubtree(activeList, index, nextExpanded); + setFocusedIndex(index); + + if (searchActive) { + setFilteredListItems(list); + } else { + setUnfilteredListItems(list); + } + }; + + // ========================================================================= + // EFFECTS + // ========================================================================= + useEventListener("keydown", handleKeyboardPress); + + useEffect(() => { + let list: NestedDropdownListLocalItem<T>[]; + if (mode === "default") { + list = flattenDefaultMode(listItems); + } else if (mode === "expand") { + list = flatten(listItems, true); + } else if (mode === "collapse") { + list = flatten(listItems, false); + } + setUnfilteredListItems(list); + }, [flatten, flattenDefaultMode, listItems, mode]); + + useEffect(() => { + // update paths + setUnfilteredListItems((unfilteredListItems) => + updateSelectedState( + unfilteredListItems, + selectedKeyPaths, + multiSelect + ) + ); + }, [multiSelect, selectedKeyPaths]); + + useEffect(() => { + if (searchActive && searchValue.trim().length >= 3) { + const filteredListItems = filter(listItems); + const list = expandMatchedSubtrees( + flatten(filteredListItems, false) + ); + + setFilteredListItems(list); + } + }, [filter, flatten, listItems, searchActive, searchValue]); + + useEffect(() => { + if (mounted) { + // only run on mount + return; + } + + // Focus search input if there is one + if (searchInputRef.current) { + setFocusedIndex(-1); + setTimeout(() => searchInputRef.current?.focus(), 200); // wait for animation + } else if (listItemRefs.current[focusedIndex]) { + // Else focus on the specified element + setTimeout(() => listItemRefs.current[focusedIndex]?.focus(), 200); + } else { + // Else focus on the first list item + setFocusedIndex(0); + setTimeout(() => listItemRefs.current[0]?.focus(), 200); + } + }, [focusedIndex, mounted, setFocusedIndex]); + + // ========================================================================= + // RENDER FUNCTIONS + // ========================================================================= + const renderSearchInput = () => { + if ((enableSearch || searchFunction) && itemsLoadState === "success") { + return ( + <DropdownSearch + ref={searchInputRef} + onChange={handleSearchInputChange} + value={searchValue} + placeholder={searchPlaceholder} + data-testid="search-input" + aria-label="Enter text to search" + onClear={handleOnClear} + variant={variant} + /> + ); + } + }; + + const renderSelectAll = () => { + if ( + multiSelect && + filteredListItems.length > 0 && + !searchValue && + itemsLoadState === "success" + ) { + return ( + <SelectAllContainer> + <SelectAllButton + onClick={onSelectAll} + type="button" + $variant={variant} + > + {selectedKeyPaths.length === 0 + ? "Select all" + : "Clear all"} + </SelectAllButton> + </SelectAllContainer> + ); + } + }; + + const renderNoResults = () => { + if ( + !hideNoResultsDisplay && + searchActive && + filteredListItems.length === 0 && + itemsLoadState === "success" + ) { + return ( + <ResultStateContainer data-testid="list-no-results"> + <LabelIcon $variant={variant} /> + <ResultStateText $variant={variant}> + No results found. + </ResultStateText> + </ResultStateContainer> + ); + } + }; + + const renderLoading = () => { + if (onRetry && itemsLoadState === "loading") { + const spinnerSize = variant === "small" ? 16 : 18; + + return ( + <ResultStateContainer data-testid="list-loading"> + <Spinner $buttonStyle="secondary" size={spinnerSize} /> + <ResultStateText $variant={variant}> + Loading... + </ResultStateText> + </ResultStateContainer> + ); + } + }; + + const renderTryAgain = () => { + if (onRetry && itemsLoadState === "fail") { + return ( + <ResultStateContainer data-testid="list-fail"> + <LabelIcon + data-testid="load-error-icon" + $variant={variant} + /> + <ResultStateText $variant={variant}> + Failed to load. + </ResultStateText> +   + <TryAgainButton + onClick={handleTryAgain} + type="button" + $variant={variant} + > + Try again. + </TryAgainButton> + </ResultStateContainer> + ); + } + }; + const renderSelectionIcon = (listItem: NestedDropdownListLocalItem<T>) => { + if (multiSelect) { + switch (listItem.checked) { + case "mixed": + return <CheckboxMixedIndicator aria-hidden />; + case true: + return <CheckboxSelectedIndicator aria-hidden />; + default: + return <CheckboxUnselectedIndicator aria-hidden />; + } + } + + if (listItem.hasSubItems) { + // no icon needed + return; + } + + return ( + <SelectionIndicator + $hasNestedSiblings={ + listItem.hasNestedSiblings || listItem.level === 0 + } + > + {listItem.checked && <SelectedIndicator aria-hidden />} + </SelectionIndicator> + ); + }; + + const renderItems = () => { + const activeList = searchActive + ? filteredListItems + : unfilteredListItems; + return activeList.map((listItem, i) => { + const { + item, + level, + visible, + expanded, + keyPath, + checked, + hasSubItems, + indexInParent, + parentSetSize, + } = listItem; + const active = focusedIndex === i; + const toggleable = hasSubItems && !selectableCategory; + + return ( + <ListItemContainer + key={`[${keyPath.join("---")}]`} + $visible={visible} + > + {maxLevel > 0 && <Indent $level={level} />} + {maxLevel > 0 && !hasSubItems && multiSelect && ( + <UnexpandableIndicator /> + )} + <ListItem + aria-checked={checked} + aria-expanded={hasSubItems ? expanded : undefined} + aria-level={level + 1} + aria-posinset={indexInParent + 1} + aria-setsize={parentSetSize} + data-testid="list-item" + onClick={(e) => { + e.stopPropagation(); + if (toggleable) { + toggleCategory(i, !expanded); + } else { + onSelectItem?.(keyPath); + } + }} + ref={(node) => (listItemRefs.current[i] = node)} + role="treeitem" + tabIndex={active ? 0 : -1} + $active={active} + $toggleable={toggleable} + > + {hasSubItems && ( + // not an actual button, only required for visual display + <ExpandButton + data-testid="toggle-category-button" + onClick={(e) => { + e.stopPropagation(); + toggleCategory(i, !expanded); + }} + $expanded={expanded} + > + <CaretRightIcon /> + </ExpandButton> + )} + {renderSelectionIcon(listItem)} + <DropdownLabel + label={item.label} + selected={!!checked} + sublabel={undefined} + truncationType={itemTruncationType} + maxLines={itemMaxLines} + ></DropdownLabel> + </ListItem> + </ListItemContainer> + ); + }); + }; + + const renderList = () => { + return ( + <List> + {renderSearchInput()} + {renderSelectAll()} + {renderNoResults()} + {renderLoading()} + {renderTryAgain()} + <div + aria-multiselectable={multiSelect} + id={listboxId} + ref={listRef} + role="tree" + > + {renderItems()} + </div> + </List> + ); + }; + + return ( + <Container + data-testid="dropdown-container" + ref={nodeRef} + $width={width} + > + {renderList()} + </Container> + ); +}; diff --git a/src/shared/dropdown-list-v2/types.ts b/src/shared/dropdown-list-v2/types.ts index 38b85b2d7..44f298ed6 100644 --- a/src/shared/dropdown-list-v2/types.ts +++ b/src/shared/dropdown-list-v2/types.ts @@ -1,3 +1,6 @@ +// ============================================================================= +// SHARED PROPS +// ============================================================================= export type TruncateType = "middle" | "end"; export type ItemsLoadStateType = "loading" | "fail" | "success"; export type LabelDisplayType = "inline" | "next-line"; @@ -43,14 +46,8 @@ export interface DropdownSearchProps<T> { onSearch?: (() => void) | undefined; } -export interface DropdownListProps<T, V> - extends DropdownDisplayProps<T, V>, - DropdownSearchProps<T> { - listItems?: T[] | undefined; +export interface DropdownConfigProps { multiSelect?: boolean | undefined; - selectedItems?: T[] | undefined; - disableItemFocus?: boolean | undefined; - listboxId?: string | undefined; width?: number | undefined; /** * Used when items are loaded from an api call. @@ -61,10 +58,24 @@ export interface DropdownListProps<T, V> itemTruncationType?: TruncateType | undefined; /** Specifies the maximum number of lines visible before the label is truncated for "end" type */ itemMaxLines?: number | undefined; - /** Specifying flex direction within item */ - labelDisplayType?: LabelDisplayType | undefined; /** Specifies the variant type. Small type will have shorter height. Values: "default" | "small" */ variant?: DropdownVariantType | undefined; +} + +// ============================================================================= +// DROPDOWN PROPS +// ============================================================================= + +export interface DropdownListProps<T, V> + extends DropdownDisplayProps<T, V>, + DropdownSearchProps<T>, + DropdownConfigProps { + listItems?: T[] | undefined; + selectedItems?: T[] | undefined; + disableItemFocus?: boolean | undefined; + listboxId?: string | undefined; + /** Specifying flex direction within item */ + labelDisplayType?: LabelDisplayType | undefined; /** Specifies the item for which the dropdown’s scroll position will be automatically adjusted */ topScrollItem?: T | undefined; @@ -73,3 +84,63 @@ export interface DropdownListProps<T, V> onDismiss?: ((setSelectorFocus?: boolean | undefined) => void) | undefined; onRetry?: (() => void) | undefined; } + +// ============================================================================= +// NESTED DROPDOWN PROPS +// ============================================================================= + +export interface NestedDropdownListLeafItem<T> { + key: string; + label: string; + value: T; + subItems?: never | undefined; +} + +export interface NestedDropdownListParentItem<T> { + key: string; + label: string; + value: T; + subItems: NestedDropdownListItemProps<T>[]; +} + +export type NestedDropdownListItemProps<T> = + | NestedDropdownListLeafItem<T> + | NestedDropdownListParentItem<T>; + +// internal representation of a list item +export interface NestedDropdownListLocalItem<T> { + item: NestedDropdownListItemProps<T>; + index: number; + indexInParent: number; + parentSetSize: number; + keyPath: string[]; + parentIndex: number; + parentKeyPath: string[]; + level: number; + visible: boolean; + expanded: boolean; + checked: "mixed" | true | false; + hasSubItems: boolean; + subItemIndexes: number[]; + hasNestedSiblings: boolean; + matched: boolean; + hasMatchedSubItems: boolean; +} + +export type ExpandMode = "default" | "expand" | "collapse"; + +export interface NestedDropdownListProps<T> + extends DropdownSearchProps<NestedDropdownListItemProps<T>>, + DropdownConfigProps { + listItems: NestedDropdownListItemProps<T>[]; + selectedKeyPaths: string[][]; + listboxId?: string | undefined; + /** Specifies if items are expanded or collapsed when the dropdown is opened */ + mode?: ExpandMode | undefined; + /** If specified, the category label is selectable */ + selectableCategory?: boolean | undefined; + + onSelectItem?: ((keyPath: string[]) => void) | undefined; + onSelectAll?: (() => void) | undefined; + onRetry?: (() => void) | undefined; +} diff --git a/stories/form/form-nested-select/test.stories.tsx b/stories/form/form-nested-select/test.stories.tsx new file mode 100644 index 000000000..0aedb93d3 --- /dev/null +++ b/stories/form/form-nested-select/test.stories.tsx @@ -0,0 +1,367 @@ +// TODO: to be removed + +import type { Meta } from "@storybook/react"; +import { useState } from "react"; +import { NestedDropdownList } from "../../../src/shared/dropdown-list-v2/nested-dropdown-list"; +import isEqual from "lodash/isEqual"; + +const meta: Meta = { + title: "Test", +}; + +export default meta; + +const selected = false; // update this to test pre-selected behaviour +const initialKeyPath = ["1", "20", "300", "2000"]; + +export const Single = { + render: () => { + const [selectedKeyPath, setSelectedKeyPath] = useState( + selected ? initialKeyPath : undefined + ); + return ( + <div style={{ width: "23rem" }}> + <NestedDropdownList + selectedKeyPaths={selectedKeyPath ? [selectedKeyPath] : []} + onSelectItem={setSelectedKeyPath} + listItems={options} + /> + </div> + ); + }, +}; + +export const SingleExpanded = { + render: () => { + const [selectedKeyPath, setSelectedKeyPath] = useState( + selected ? initialKeyPath : undefined + ); + return ( + <div style={{ width: "23rem" }}> + <NestedDropdownList + selectedKeyPaths={selectedKeyPath ? [selectedKeyPath] : []} + onSelectItem={setSelectedKeyPath} + listItems={options} + mode="expand" + /> + </div> + ); + }, +}; + +export const SingleCollapsed = { + render: () => { + const [selectedKeyPath, setSelectedKeyPath] = useState( + selected ? initialKeyPath : undefined + ); + return ( + <div style={{ width: "23rem" }}> + <NestedDropdownList + selectedKeyPaths={selectedKeyPath ? [selectedKeyPath] : []} + onSelectItem={setSelectedKeyPath} + listItems={options} + mode="collapse" + /> + </div> + ); + }, +}; + +export const SingleWithSearch = { + render: () => { + const [selectedKeyPath, setSelectedKeyPath] = useState( + selected ? initialKeyPath : undefined + ); + return ( + <div style={{ width: "23rem" }}> + <NestedDropdownList + selectedKeyPaths={selectedKeyPath ? [selectedKeyPath] : []} + onSelectItem={setSelectedKeyPath} + enableSearch + listItems={optionsForSearch} + /> + </div> + ); + }, +}; + +export const SingleWithSelectableCategory = { + render: () => { + const [selectedKeyPath, setSelectedKeyPath] = useState( + selected ? initialKeyPath : undefined + ); + return ( + <div style={{ width: "23rem" }}> + <NestedDropdownList + selectedKeyPaths={selectedKeyPath ? [selectedKeyPath] : []} + onSelectItem={setSelectedKeyPath} + selectableCategory + listItems={options} + /> + </div> + ); + }, +}; + +export const Multi = { + render: () => { + const [selectedKeyPaths, setSelectedKeyPaths] = useState( + selected ? [initialKeyPath] : [] + ); + const handleSelectItem = (keyPath: string[]) => { + const index = selectedKeyPaths.findIndex((selectedKeyPath) => + isEqual(selectedKeyPath, keyPath) + ); + if (index >= 0) { + setSelectedKeyPaths([ + ...selectedKeyPaths.slice(0, index), + ...selectedKeyPaths.slice(index + 1), + ]); + } else { + setSelectedKeyPaths([...selectedKeyPaths, keyPath]); + } + }; + return ( + <div style={{ width: "23rem" }}> + <NestedDropdownList + selectedKeyPaths={selectedKeyPaths} + onSelectItem={handleSelectItem} + multiSelect + listItems={options} + /> + </div> + ); + }, +}; + +export const MultiWithSearch = { + render: () => { + const [selectedKeyPaths, setSelectedKeyPaths] = useState( + selected ? [initialKeyPath] : [] + ); + const handleSelectItem = (keyPath: string[]) => { + const index = selectedKeyPaths.findIndex((selectedKeyPath) => + isEqual(selectedKeyPath, keyPath) + ); + if (index >= 0) { + setSelectedKeyPaths([ + ...selectedKeyPaths.slice(0, index), + ...selectedKeyPaths.slice(index + 1), + ]); + } else { + setSelectedKeyPaths([...selectedKeyPaths, keyPath]); + } + }; + return ( + <div style={{ width: "23rem" }}> + <NestedDropdownList + selectedKeyPaths={selectedKeyPaths} + onSelectItem={handleSelectItem} + multiSelect + enableSearch + listItems={optionsForSearch} + /> + </div> + ); + }, +}; + +const options = [ + { + label: "1", + value: "1", + key: "1", + subItems: [ + { + label: "1.1", + value: "1.1", + key: "10", + }, + { + label: "1.2", + value: "1.2", + key: "20", + subItems: [ + { + label: "1.2.1", + value: "1.2.1", + key: "100", + }, + { + label: "1.2.2", + value: "1.2.2", + key: "200", + subItems: [ + { + label: "1.2.2.1", + value: "1.2.2.1", + key: "1000", + }, + { + label: "1.2.2.2", + value: "1.2.2.2", + key: "2000", + }, + ], + }, + { + label: "1.2.3", + value: "1.2.3", + key: "300", + subItems: [ + { + label: "1.2.3.1", + value: "1.2.3.1", + key: "1000", + }, + { + label: "1.2.3.2", + value: "1.2.3.2", + key: "2000", + }, + ], + }, + ], + }, + { + label: "1.3", + value: "1.3", + key: "30", + subItems: [ + { + label: "1.3.1", + value: "1.3.1", + key: "100", + }, + ], + }, + ], + }, + { + label: "2", + value: "2", + key: "2", + subItems: [ + { + label: "2.1", + value: "2.1", + key: "10", + }, + { + label: "2.2", + value: "2.2", + key: "20", + subItems: [ + { + label: "2.2.1", + value: "2.2.1", + key: "100", + }, + { + label: "2.2.2", + value: "2.2.2", + key: "200", + }, + ], + }, + ], + }, + { + label: "3", + value: "3", + key: "3", + }, +]; + +const optionsForSearch = [ + { + label: "Perishables", + value: "1", + key: "1", + subItems: [ + { + label: "Banana milk", + value: "1.1", + key: "10", + }, + { + label: "Fruits", + value: "1.2", + key: "20", + subItems: [ + { + label: "Avocado", + value: "1.2.1", + key: "100", + }, + { + label: "Berries", + value: "1.2.2", + key: "200", + subItems: [ + { + label: "Banana", + value: "1.2.2.1", + key: "1000", + }, + { + label: "Blueberry", + value: "1.2.2.2", + key: "2000", + }, + ], + }, + { + label: "Not berries", + value: "1.2.3", + key: "300", + subItems: [ + { + label: "Strawberry", + value: "1.2.3.1", + key: "1000", + }, + { + label: "Raspberry", + value: "1.2.3.2", + key: "2000", + }, + ], + }, + ], + }, + { + label: "Cooking oil", + value: "1.3", + key: "30", + }, + { + label: "Skimmed milk", + value: "1.4", + key: "40", + }, + ], + }, + { + label: "Toiletries", + value: "2", + key: "2", + subItems: [ + { + label: "Toilet paper", + value: "2.1", + key: "10", + }, + { + label: "Shampoo", + value: "2.2", + key: "20", + }, + ], + }, + { + label: "Cats conserve energy by sleeping more than most animals, especially as they grow older", + value: "3", + key: "3", + }, +]; diff --git a/tests/shared/dropdown-list-v2/nested-dropdown-list.spec.tsx b/tests/shared/dropdown-list-v2/nested-dropdown-list.spec.tsx new file mode 100644 index 000000000..9255df1c9 --- /dev/null +++ b/tests/shared/dropdown-list-v2/nested-dropdown-list.spec.tsx @@ -0,0 +1,618 @@ +import { act, render, screen, waitFor, within } from "@testing-library/react"; +import { NestedDropdownList } from "../../../src/shared/dropdown-list-v2/nested-dropdown-list"; +import { NestedDropdownListItemProps } from "../../../src/shared/dropdown-list-v2/types"; +import userEvent from "@testing-library/user-event"; + +describe("NestedDropdownList", () => { + beforeEach(() => { + jest.clearAllMocks(); + + global.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn(), + })); + }); + + describe("mode = default", () => { + it("should expand the first subtree (1 tier)", () => { + const options = buildOptions([["1"], ["2"]]); + render( + <NestedDropdownList listItems={options} selectedKeyPaths={[]} /> + ); + + expect(screen.queryByText("Child 1 item")).toBeVisible(); + expect(screen.queryByText("Child 2 item")).toBeVisible(); + }); + + it("should expand the first subtree (2 tier)", () => { + const options = buildOptions([ + ["1", [["1.1"], ["1.2"]]], + ["2", [["2.1"], ["2.2"]]], + ]); + render( + <NestedDropdownList listItems={options} selectedKeyPaths={[]} /> + ); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.2 item")).toBeVisible(); + expect(screen.queryByText("Parent 2 item")).toBeVisible(); + expect(screen.queryByText("Child 2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Child 2.2 item")).not.toBeVisible(); + + expect( + screen.getByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveAttribute("aria-expanded", "true"); + expect( + screen.getByRole("treeitem", { name: "Parent 2 item" }) + ).toHaveAttribute("aria-expanded", "false"); + }); + + it("should expand the first subtree (3 tier)", () => { + const options = buildOptions([ + [ + "1", + [ + ["1.1"], + ["1.2", [["1.2.1"], ["1.2.2"]]], + ["1.3", [["1.3.1"]]], + ], + ], + ["2", [["2.1"], ["2.2", [["2.2.1"]]]]], + ]); + render( + <NestedDropdownList listItems={options} selectedKeyPaths={[]} /> + ); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 2 item")).toBeVisible(); + expect(screen.queryByText("Child 2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 2.2 item")).not.toBeVisible(); + expect(screen.queryByText("Child 2.2.1 item")).not.toBeVisible(); + + expect( + screen.getByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveAttribute("aria-expanded", "true"); + expect( + screen.getByRole("treeitem", { name: "Parent 1.2 item" }) + ).toHaveAttribute("aria-expanded", "true"); + expect( + screen.getByRole("treeitem", { name: "Parent 1.3 item" }) + ).toHaveAttribute("aria-expanded", "false"); + expect( + screen.getByRole("treeitem", { name: "Parent 2 item" }) + ).toHaveAttribute("aria-expanded", "false"); + }); + }); + + describe("mode = expand", () => { + it("should expand all subtrees (1 tier)", () => { + const options = buildOptions([["1"], ["2"]]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + mode="expand" + /> + ); + + expect(screen.queryByText("Child 1 item")).toBeVisible(); + expect(screen.queryByText("Child 2 item")).toBeVisible(); + }); + + it("should expand all subtrees (2 tier)", () => { + const options = buildOptions([ + ["1", [["1.1"], ["1.2"]]], + ["2", [["2.1"], ["2.2"]]], + ]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + mode="expand" + /> + ); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.2 item")).toBeVisible(); + expect(screen.queryByText("Parent 2 item")).toBeVisible(); + expect(screen.queryByText("Child 2.1 item")).toBeVisible(); + expect(screen.queryByText("Child 2.2 item")).toBeVisible(); + + expect( + screen.getByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveAttribute("aria-expanded", "true"); + expect( + screen.getByRole("treeitem", { name: "Parent 2 item" }) + ).toHaveAttribute("aria-expanded", "true"); + }); + + it("should expand all subtrees (3 tier)", () => { + const options = buildOptions([ + [ + "1", + [ + ["1.1"], + ["1.2", [["1.2.1"], ["1.2.2"]]], + ["1.3", [["1.3.1"]]], + ], + ], + ["2", [["2.1"], ["2.2", [["2.2.1"]]]]], + ]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + mode="expand" + /> + ); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).toBeVisible(); + expect(screen.queryByText("Parent 2 item")).toBeVisible(); + expect(screen.queryByText("Child 2.1 item")).toBeVisible(); + expect(screen.queryByText("Parent 2.2 item")).toBeVisible(); + expect(screen.queryByText("Child 2.2.1 item")).toBeVisible(); + + expect( + screen.getByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveAttribute("aria-expanded", "true"); + expect( + screen.getByRole("treeitem", { name: "Parent 1.2 item" }) + ).toHaveAttribute("aria-expanded", "true"); + expect( + screen.getByRole("treeitem", { name: "Parent 1.3 item" }) + ).toHaveAttribute("aria-expanded", "true"); + expect( + screen.getByRole("treeitem", { name: "Parent 2 item" }) + ).toHaveAttribute("aria-expanded", "true"); + }); + }); + + describe("mode = collapse", () => { + it("should collapse all subtrees (1 tier)", () => { + const options = buildOptions([["1"], ["2"]]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + mode="collapse" + /> + ); + + expect(screen.queryByText("Child 1 item")).toBeVisible(); + expect(screen.queryByText("Child 2 item")).toBeVisible(); + }); + + it("should collapse all subtrees (2 tier)", () => { + const options = buildOptions([ + ["1", [["1.1"], ["1.2"]]], + ["2", [["2.1"], ["2.2"]]], + ]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + mode="collapse" + /> + ); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1 item")).not.toBeVisible(); + expect(screen.queryByText("Child 1.2 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 2 item")).toBeVisible(); + expect(screen.queryByText("Child 2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Child 2.2 item")).not.toBeVisible(); + + expect( + screen.getByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveAttribute("aria-expanded", "false"); + expect( + screen.getByRole("treeitem", { name: "Parent 2 item" }) + ).toHaveAttribute("aria-expanded", "false"); + }); + + it("should collapse all subtrees (3 tier)", () => { + const options = buildOptions([ + [ + "1", + [ + ["1.1"], + ["1.2", [["1.2.1"], ["1.2.2"]]], + ["1.3", [["1.3.1"]]], + ], + ], + ["2", [["2.1"], ["2.2", [["2.2.1"]]]]], + ]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + mode="collapse" + /> + ); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).not.toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).not.toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 2 item")).toBeVisible(); + expect(screen.queryByText("Child 2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 2.2 item")).not.toBeVisible(); + expect(screen.queryByText("Child 2.2.1 item")).not.toBeVisible(); + + expect( + screen.getByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveAttribute("aria-expanded", "false"); + expect( + screen.getByRole("treeitem", { name: "Parent 2 item" }) + ).toHaveAttribute("aria-expanded", "false"); + }); + }); + + it("should expand a collapsed category on item click", async () => { + const user = userEvent.setup(); + const mockOnSelectItem = jest.fn(); + const options = buildOptions([ + [ + "1", + [ + ["1.1", [["1.1.1"]]], + ["1.2", [["1.2.1"]]], + ["1.3", [["1.3.1"]]], + ], + ], + ]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + mode="collapse" + onSelectItem={mockOnSelectItem} + /> + ); + + await user.click(screen.queryByText("Parent 1 item")); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).not.toBeVisible(); + + await user.click(screen.queryByText("Parent 1.1 item")); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1.1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).not.toBeVisible(); + + expect(mockOnSelectItem).not.toHaveBeenCalled(); + }); + + it("should expand a collapsed category with right arrow key", async () => { + const user = userEvent.setup(); + const mockOnSelectItem = jest.fn(); + const options = buildOptions([ + [ + "1", + [ + ["1.1", [["1.1.1"]]], + ["1.2", [["1.2.1"]]], + ["1.3", [["1.3.1"]]], + ], + ], + ]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + mode="collapse" + onSelectItem={mockOnSelectItem} + /> + ); + + await waitFor(() => + expect( + screen.queryByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveFocus() + ); + + await act(async () => { + await user.keyboard("{ArrowRight}"); + }); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).not.toBeVisible(); + + await act(async () => { + await user.keyboard("{ArrowDown}{ArrowRight}"); + }); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1.1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).not.toBeVisible(); + + expect(mockOnSelectItem).not.toHaveBeenCalled(); + }); + + it("should collapse an expanded category on item click", async () => { + const user = userEvent.setup(); + const mockOnSelectItem = jest.fn(); + const options = buildOptions([ + [ + "1", + [ + ["1.1", [["1.1.1"]]], + ["1.2", [["1.2.1"]]], + ["1.3", [["1.3.1"]]], + ], + ], + ]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + mode="expand" + onSelectItem={mockOnSelectItem} + /> + ); + + await user.click(screen.queryByText("Parent 1.1 item")); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).toBeVisible(); + + await user.click(screen.queryByText("Parent 1 item")); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.1 item")).not.toBeVisible(); + expect(screen.queryByText("Child 1.1.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).not.toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).not.toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).not.toBeVisible(); + + expect(mockOnSelectItem).not.toHaveBeenCalled(); + }); + + it("should collapse an expanded category with right arrow key", async () => { + const user = userEvent.setup(); + const mockOnSelectItem = jest.fn(); + const options = buildOptions([ + [ + "1", + [ + ["1.1", [["1.1.1"]]], + ["1.2", [["1.2.1"]]], + ["1.3", [["1.3.1"]]], + ], + ], + ]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + mode="expand" + onSelectItem={mockOnSelectItem} + /> + ); + + await waitFor(() => + expect( + screen.queryByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveFocus() + ); + + await act(async () => { + await user.keyboard("{ArrowDown}{ArrowLeft}"); + }); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).toBeVisible(); + + await act(async () => { + await user.keyboard("{ArrowUp}{ArrowLeft}"); + }); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.1 item")).not.toBeVisible(); + expect(screen.queryByText("Child 1.1.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.2 item")).not.toBeVisible(); + expect(screen.queryByText("Child 1.2.1 item")).not.toBeVisible(); + expect(screen.queryByText("Parent 1.3 item")).not.toBeVisible(); + expect(screen.queryByText("Child 1.3.1 item")).not.toBeVisible(); + + expect(mockOnSelectItem).not.toHaveBeenCalled(); + }); + + describe("selectableCategory = true", () => { + it("should select instead of toggling category on click", async () => { + const user = userEvent.setup(); + const mockOnSelectItem = jest.fn(); + const options = buildOptions([ + [ + "1", + [ + ["1.1", [["1.1.1"]]], + ["1.2", [["1.2.1"]]], + ["1.3", [["1.3.1"]]], + ], + ], + ]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + selectableCategory + onSelectItem={mockOnSelectItem} + /> + ); + + await user.click(screen.queryByText("Parent 1.1 item")); + + expect(mockOnSelectItem).toHaveBeenCalledWith(["1", "1.1"]); + expect(screen.queryByText("Child 1.1.1 item")).toBeVisible(); + expect( + screen.getByRole("treeitem", { name: "Parent 1.1 item" }) + ).toHaveAttribute("aria-expanded", "true"); + }); + + it("should toggle category on button click", async () => { + const user = userEvent.setup(); + const mockOnSelectItem = jest.fn(); + const options = buildOptions([ + [ + "1", + [ + ["1.1", [["1.1.1"]]], + ["1.2", [["1.2.1"]]], + ["1.3", [["1.3.1"]]], + ], + ], + ]); + render( + <NestedDropdownList + listItems={options} + selectedKeyPaths={[]} + selectableCategory + onSelectItem={mockOnSelectItem} + /> + ); + + await user.click( + within( + screen.getByRole("treeitem", { name: "Parent 1.1 item" }) + ).queryByTestId("toggle-category-button") + ); + + expect(mockOnSelectItem).not.toHaveBeenCalled(); + expect(screen.queryByText("Child 1.1.1 item")).not.toBeVisible(); + expect( + screen.getByRole("treeitem", { name: "Parent 1.1 item" }) + ).toHaveAttribute("aria-expanded", "false"); + }); + }); + + describe("multiSelect = true", () => { + it("should display selected items as checked", async () => { + const options = buildOptions([ + ["1", [["1.1"], ["1.2", [["1.2.1"], ["1.2.2"]]]]], + ["2", [["2.1"], ["2.2", [["2.2.1"], ["2.2.2"]]]]], + ["3", [["3.1"], ["3.2", [["3.2.1"], ["3.2.2"]]]]], + ]); + render( + <NestedDropdownList + listItems={options} + multiSelect + selectedKeyPaths={[ + ["1", "1.1"], + ["1", "1.2", "1.2.1"], + ["1", "1.2", "1.2.2"], + ["2", "2.2", "2.2.1"], + ]} + /> + ); + + expect( + screen.getByRole("treeitem", { name: "Parent 1 item" }) + ).toBeChecked(); + expect( + screen.getByRole("treeitem", { name: "Child 1.1 item" }) + ).toBeChecked(); + expect( + screen.getByRole("treeitem", { name: "Parent 1.2 item" }) + ).toBeChecked(); + expect( + screen.getByRole("treeitem", { name: "Child 1.2.1 item" }) + ).toBeChecked(); + expect( + screen.getByRole("treeitem", { name: "Child 1.2.2 item" }) + ).toBeChecked(); + expect( + screen.getByRole("treeitem", { name: "Parent 2 item" }) + ).toHaveAttribute("aria-checked", "mixed"); + expect( + screen.getByRole("treeitem", { name: "Child 2.1 item" }) + ).not.toBeChecked(); + expect( + screen.getByRole("treeitem", { name: "Parent 2.2 item" }) + ).not.toBeChecked(); + expect( + screen.getByRole("treeitem", { name: "Child 2.2.1 item" }) + ).toBeChecked(); + expect( + screen.getByRole("treeitem", { name: "Child 2.2.2 item" }) + ).not.toBeChecked(); + }); + }); +}); + +// ============================================================================= +// TEST HELPERS +// ============================================================================= + +type Leaf = [string]; +type Parent = [string, Node[]]; +type Node = Parent | Leaf; + +const buildOptions = (options: Node[]) => { + const walk = (node: Node): NestedDropdownListItemProps<string> => { + const [key, children] = node; + if (children) { + // parent + return { + label: `Parent ${key} item`, + value: key, + key, + subItems: children.map((child) => walk(child)), + }; + } else { + // leaf + return { + label: `Child ${key} item`, + value: key, + key, + }; + } + }; + + return options.map((option) => walk(option)); +}; From 4ac9235fb7539f806ce4408af5d63064fc99d2cb Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Sat, 3 Aug 2024 20:37:57 +0800 Subject: [PATCH 0769/1949] [FLOAT][RL] Bold category item label --- src/shared/dropdown-list-v2/dropdown-label.styles.tsx | 3 ++- src/shared/dropdown-list-v2/dropdown-label.tsx | 5 ++++- src/shared/dropdown-list-v2/nested-dropdown-list.tsx | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/shared/dropdown-list-v2/dropdown-label.styles.tsx b/src/shared/dropdown-list-v2/dropdown-label.styles.tsx index 0259511be..74ba61474 100644 --- a/src/shared/dropdown-list-v2/dropdown-label.styles.tsx +++ b/src/shared/dropdown-list-v2/dropdown-label.styles.tsx @@ -11,6 +11,7 @@ import { // STYLE INTERFACE // ============================================================================= interface LabelStyleProps { + $bold?: boolean; $labelDisplayType?: LabelDisplayType; $maxLines?: number; $selected?: boolean; @@ -35,7 +36,7 @@ export const PrimaryText = styled.div<LabelStyleProps>` ${(props) => TextStyleHelper.getTextStyle( props.$variant === "small" ? "BodySmall" : "Body", - "regular" + props.$bold ? "semibold" : "regular" )} color: ${(props) => (props.$selected ? Color.Primary : Color.Neutral[1])}; width: 100%; diff --git a/src/shared/dropdown-list-v2/dropdown-label.tsx b/src/shared/dropdown-list-v2/dropdown-label.tsx index 50f25cd34..c7ae7d257 100644 --- a/src/shared/dropdown-list-v2/dropdown-label.tsx +++ b/src/shared/dropdown-list-v2/dropdown-label.tsx @@ -14,16 +14,18 @@ import { } from "./dropdown-label.styles"; interface DropdownLabelProps { + bold?: boolean | undefined; displayType?: LabelDisplayType | undefined; label: string; maxLines?: number | undefined; selected?: boolean | undefined; - sublabel: string; + sublabel?: string | undefined; truncationType?: "middle" | "end" | undefined; variant?: DropdownVariantType | undefined; } export const DropdownLabel = ({ + bold, displayType = "inline", label, maxLines = 2, @@ -98,6 +100,7 @@ export const DropdownLabel = ({ <Label ref={ref} $labelDisplayType={itemDisplayType}> <PrimaryText aria-label={label} + $bold={bold} $maxLines={maxLines} $selected={selected} $truncateType={truncationType} diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx index 6712614a1..1aabeba99 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx @@ -512,9 +512,9 @@ export const NestedDropdownList = <T,>({ )} {renderSelectionIcon(listItem)} <DropdownLabel + bold={hasSubItems} label={item.label} selected={!!checked} - sublabel={undefined} truncationType={itemTruncationType} maxLines={itemMaxLines} ></DropdownLabel> From 0c3c9a4f09b11f380931bede655b36ef1f6f5fcd Mon Sep 17 00:00:00 2001 From: qroll <quek.ruoling@gmail.com> Date: Mon, 5 Aug 2024 17:46:07 +0800 Subject: [PATCH 0770/1949] [FLOAT][RL] Handle list item hover --- src/shared/dropdown-list-v2/nested-dropdown-list.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx index 1aabeba99..9b6f23051 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx @@ -191,6 +191,15 @@ export const NestedDropdownList = <T,>({ onRetry?.(); }; + const handleListItemClick = (index: number, keyPath: string[]) => { + setFocusedIndex(index); + onSelectItem?.(keyPath); + }; + + const handleListItemHover = (index: number) => { + setFocusedIndex(index); + }; + // ========================================================================= // HELPER FUNCTIONS // ========================================================================= @@ -488,9 +497,10 @@ export const NestedDropdownList = <T,>({ if (toggleable) { toggleCategory(i, !expanded); } else { - onSelectItem?.(keyPath); + handleListItemClick(i, keyPath); } }} + onMouseEnter={() => handleListItemHover(i)} ref={(node) => (listItemRefs.current[i] = node)} role="treeitem" tabIndex={active ? 0 : -1} From 1908992a713d31643ecb0caf1fdc14bb863979a8 Mon Sep 17 00:00:00 2001 From: qroll <quek.ruoling@gmail.com> Date: Mon, 12 Aug 2024 09:29:26 +0800 Subject: [PATCH 0771/1949] [FLOAT][RL] Simplify logic --- .../nested-dropdown-list-helpers.ts | 16 +++++++--------- .../nested-dropdown-list.styles.tsx | 9 +++------ 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts b/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts index 8c0c55330..7ef616ec4 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts +++ b/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts @@ -39,9 +39,7 @@ export const flattenList = <T>( ? [...parentItem.keyPath, option.key] : [option.key], parentIndex: parentItem ? parentItem.index : -1, - parentKeyPath: parentItem - ? [...parentItem.parentKeyPath, parentItem.item.key] - : [], + parentKeyPath: parentItem ? parentItem.keyPath : [], level, visible: level === 0 || initialExpanded || parentItem.expanded, expanded: initialExpanded, @@ -64,12 +62,12 @@ export const flattenList = <T>( const children = flatten(option.subItems, item); if (multiSelect && item.checked !== true) { - const allChildrenSelected = - children.filter((child) => child.checked === true) - .length === children.length; - const mixed = - children.filter((child) => child.checked !== false) - .length > 0; + const allChildrenSelected = children.every( + (child) => child.checked === true + ); + const mixed = children.some( + (child) => child.checked !== false + ); if (allChildrenSelected) { item.checked = true; diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list.styles.tsx b/src/shared/dropdown-list-v2/nested-dropdown-list.styles.tsx index fbf29bff9..fe52d108d 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list.styles.tsx +++ b/src/shared/dropdown-list-v2/nested-dropdown-list.styles.tsx @@ -57,12 +57,9 @@ export const ListItem = styled.div<ListItemStyleProps>` export const Indent = styled.div<IndentStyleProps>` height: 1px; width: ${(props) => { - let total = 0; - for (let i = 0; i < props.$level; i++) { - total += 1.625; // expand button - total += 0.5; // space - } - return total; + const expandButtonWidth = 1.625; + const spaceWidth = 0.5; + return (expandButtonWidth + spaceWidth) * props.$level; }}rem; `; From ad8f1beba83733bad8b57aee60505b3c556113cf Mon Sep 17 00:00:00 2001 From: qroll <quek.ruoling@gmail.com> Date: Tue, 13 Aug 2024 17:46:06 +0800 Subject: [PATCH 0772/1949] [FLOAT][RL] Simplify logic --- .../dropdown-list-v2/nested-dropdown-list-helpers.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts b/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts index 7ef616ec4..b6c0d7bbe 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts +++ b/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts @@ -213,12 +213,12 @@ export const updateSelectedState = <T>( (index) => draft[index] ); - const allChildrenSelected = - children.filter((child) => child.checked === true) - .length === children.length; - const mixed = - children.filter((child) => child.checked !== false) - .length > 0; + const allChildrenSelected = children.every( + (child) => child.checked === true + ); + const mixed = children.some( + (child) => child.checked !== false + ); if (allChildrenSelected) { item.checked = true; From 456a33b5fc380f2793dde1af157804745b07b2ca Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Sun, 4 Aug 2024 16:22:21 +0800 Subject: [PATCH 0773/1949] [FLOAT][RL] Rework nested select component --- .../input-nested-select.tsx | 281 +++++++++--------- src/input-nested-select/types.ts | 33 +- src/shared/dropdown-list-v2/index.ts | 3 + .../nested-dropdown-list-helpers.ts | 19 ++ .../dropdown-list-v2/nested-dropdown-list.tsx | 15 +- src/shared/dropdown-list-v2/types.ts | 2 +- .../form/form-nested-select/test.stories.tsx | 14 +- 7 files changed, 201 insertions(+), 166 deletions(-) diff --git a/src/input-nested-select/input-nested-select.tsx b/src/input-nested-select/input-nested-select.tsx index 25bf9fc87..e85e7a67f 100644 --- a/src/input-nested-select/input-nested-select.tsx +++ b/src/input-nested-select/input-nested-select.tsx @@ -1,24 +1,30 @@ -import React, { useEffect, useRef, useState } from "react"; +import { OpenChangeReason } from "@floating-ui/react"; import isEmpty from "lodash/isEmpty"; -import { NestedDropdownList } from "../shared/nested-dropdown-list/nested-dropdown-list"; -import { DropdownWrapper } from "../shared/dropdown-wrapper"; -import { CombinedFormattedOptionProps } from "../shared/nested-dropdown-list/types"; +import React, { useEffect, useRef, useState } from "react"; +import { + ExpandableElement, + NestedDropdownList, + NestedDropdownListItemProps, + NestedDropdownListLocalItem, + findItemByKeyPath, +} from "../shared/dropdown-list-v2"; +import { + DropdownRenderProps, + ElementWithDropdown, +} from "../shared/dropdown-wrapper"; import { - Divider, - IconContainer, LabelContainer, PlaceholderLabel, - Selector, - StyledChevronIcon, ValueLabel, } from "../shared/dropdown-wrapper/dropdown-wrapper.styles"; +import { InputBox } from "../shared/input-wrapper/input-wrapper"; +import { SimpleIdGenerator, StringHelper } from "../util"; import { InputNestedSelectProps, L1OptionProps, L2OptionProps, L3OptionProps, } from "./types"; -import { StringHelper } from "../util"; export type CombinedOptionProps<V1, V2, V3> = | L1OptionProps<V1, V2, V3> @@ -32,7 +38,7 @@ interface SelectedItemType<V1, V2, V3> { export const InputNestedSelect = <V1, V2, V3>({ placeholder = "Select", - options, + options: _options, disabled, error, className, @@ -45,8 +51,8 @@ export const InputNestedSelect = <V1, V2, V3>({ searchPlaceholder, selectableCategory, hideNoResultsDisplay, - listStyleWidth, readOnly, + onBlur, onSearch, onSelectOption, onShowOptions, @@ -54,11 +60,14 @@ export const InputNestedSelect = <V1, V2, V3>({ onRetry, optionsLoadState = "success", optionTruncationType = "end", - ...otherProps + variant, + alignment, + dropdownZIndex, }: InputNestedSelectProps<V1, V2, V3>): JSX.Element => { - // ============================================================================= + // ========================================================================= // CONST, STATE - // ============================================================================= + // ========================================================================= + const options = _options as NestedDropdownListItemProps<V1 | V2 | V3>[]; const [selectedKeyPaths, setSelectedKeyPaths] = useState<string[][]>( _selectedKeyPath ? [_selectedKeyPath] : [] ); @@ -66,72 +75,90 @@ export const InputNestedSelect = <V1, V2, V3>({ useState<SelectedItemType<V1, V2, V3>>(); const [showOptions, setShowOptions] = useState<boolean>(false); + const [focused, setFocused] = useState<boolean>(false); + const [internalId] = useState<string>(() => SimpleIdGenerator.generate()); + const nodeRef = useRef<HTMLDivElement>(); const selectorRef = useRef<HTMLButtonElement>(); const labelContainerRef = useRef<HTMLDivElement>(); - // ============================================================================= + // ========================================================================= // EFFECTS - // ============================================================================= + // ========================================================================= useEffect(() => { - const newKeyPath = _selectedKeyPath ? [_selectedKeyPath] : []; - - setSelectedKeyPaths(newKeyPath); - updateSelectedItemFromKey(options, _selectedKeyPath || []); + setSelectedKeyPaths(_selectedKeyPath ? [_selectedKeyPath] : []); + const selectedItem = findItemByKeyPath(options, _selectedKeyPath || []); + if (selectedItem) { + const { label, value } = selectedItem; + setSelectedItem({ label, value }); + } else { + setSelectedItem(undefined); + } }, [_selectedKeyPath, options]); - // ============================================================================= + // ========================================================================= // EVENT HANDLERS - // ============================================================================= - const handleSelectorClick = (event: React.MouseEvent) => { - event.preventDefault(); - - if (disabled || readOnly) { - return; - } - - setShowOptions(!showOptions); - triggerOptionDisplayCallback(!showOptions); - }; - + // ========================================================================= const handleListItemClick = ( - item: CombinedFormattedOptionProps<V1, V2, V3> + listItem: NestedDropdownListLocalItem<V1 | V2 | V3> ) => { - const { keyPath, value, label } = item; + const { + keyPath, + item: { label, value }, + } = listItem; setSelectedKeyPaths([keyPath]); setSelectedItem({ label, value }); setShowOptions(false); triggerOptionDisplayCallback(false); - if (selectorRef.current) { - selectorRef.current.focus(); - } + selectorRef.current?.focus(); + onSelectOption?.(keyPath, value); + }; - if (onSelectOption) { - onSelectOption(keyPath, value); + const handleNodeFocus = () => { + if (!focused && !showOptions) { + setFocused(true); } }; - const handleListDismiss = (setSelectorFocus?: boolean | undefined) => { - if (showOptions) { - setShowOptions(false); - triggerOptionDisplayCallback(false); + const handleNodeBlur = (e: React.FocusEvent) => { + if ( + focused && + !showOptions && + !nodeRef.current.contains(e.relatedTarget as Node) + ) { + setFocused(false); + onBlur?.(); } + }; + + const handleOpen = () => { + setShowOptions(true); + triggerOptionDisplayCallback(true); + setFocused(true); + }; + + const handleClose = (reason: OpenChangeReason) => { + setShowOptions(false); + triggerOptionDisplayCallback(false); - if (setSelectorFocus && selectorRef.current) { - selectorRef.current.focus(); + // click to toggle should not blur the input + if (reason !== "click") { + setFocused(false); + onBlur?.(); } }; - const handleWrapperBlur = () => { + const handleDismiss = () => { + selectorRef.current.focus(); setShowOptions(false); triggerOptionDisplayCallback(false); }; - // ============================================================================= + // ========================================================================= // HELPER FUNCTION - // ============================================================================= + // ========================================================================= const getDisplayValue = (): string => { const { label, value } = selectedItem; @@ -142,39 +169,6 @@ export const InputNestedSelect = <V1, V2, V3>({ } }; - const updateSelectedItemFromKey = ( - options: CombinedOptionProps<V1, V2, V3>[], - keyPaths: string[] - ) => { - const findSelectedItem = ( - items: CombinedOptionProps<V1, V2, V3>[], - keyPaths: string[] - ): CombinedOptionProps<V1, V2, V3> | undefined => { - const [currentKey, ...nextKeyPath] = keyPaths; - - if (isEmpty(items) || !currentKey) { - return undefined; - } - - const item = items.find((item) => item.key === currentKey); - - if (!item || !nextKeyPath.length) { - return item; - } - - return findSelectedItem(item.subItems, nextKeyPath); - }; - - const selectedItem = findSelectedItem(options, keyPaths); - - if (selectedItem) { - const { label, value } = selectedItem; - setSelectedItem({ label, value }); - } else { - setSelectedItem(undefined); - } - }; - const truncateValue = (value: string) => { if (optionTruncationType === "middle") { let widthOfElement = 0; @@ -198,9 +192,9 @@ export const InputNestedSelect = <V1, V2, V3>({ } }; - // ============================================================================= + // ========================================================================= // RENDER FUNCTION - // ============================================================================= + // ========================================================================= const renderLabel = () => { if (isEmpty(selectedItem)) { return ( @@ -218,67 +212,74 @@ export const InputNestedSelect = <V1, V2, V3>({ }; const renderSelectorContent = () => ( - <> - <LabelContainer ref={labelContainerRef} $disabled={disabled}> - {renderLabel()} - </LabelContainer> - {!readOnly && ( - <IconContainer expanded={showOptions}> - <StyledChevronIcon /> - </IconContainer> - )} - </> + <LabelContainer ref={labelContainerRef}>{renderLabel()}</LabelContainer> ); - const renderOptionList = () => { - if ((options && options.length > 0) || onRetry) { - return ( - <NestedDropdownList - data-testid="nested-dropdown-list" - listItems={options} - listStyleWidth={listStyleWidth} - visible={showOptions} - mode={mode} - selectedKeyPaths={selectedKeyPaths} - selectableCategory={selectableCategory} - itemsLoadState={optionsLoadState} - itemTruncationType={optionTruncationType} - enableSearch={enableSearch} - searchPlaceholder={searchPlaceholder} - hideNoResultsDisplay={hideNoResultsDisplay} - onDismiss={handleListDismiss} - onSelectItem={handleListItemClick} - onSearch={onSearch} - onRetry={onRetry} - /> - ); - } + const renderElement = () => { + return ( + <InputBox + className={className} + data-testid={testId} + id={id} + ref={nodeRef} + tabIndex={-1} + onFocus={handleNodeFocus} + onBlur={handleNodeBlur} + $focused={focused} + $disabled={disabled} + $readOnly={readOnly} + $error={error} + > + <ExpandableElement + ref={selectorRef} + disabled={disabled} + expanded={showOptions} + listboxId={internalId} + readOnly={readOnly} + variant={variant} + > + {renderSelectorContent()} + </ExpandableElement> + </InputBox> + ); + }; - return null; + const renderDropdown = ({ elementWidth }: DropdownRenderProps) => { + return ( + <NestedDropdownList + listboxId={internalId} + listItems={options} + selectedKeyPaths={selectedKeyPaths} + selectableCategory={selectableCategory} + itemsLoadState={optionsLoadState} + itemTruncationType={optionTruncationType} + enableSearch={enableSearch} + searchPlaceholder={searchPlaceholder} + hideNoResultsDisplay={hideNoResultsDisplay} + onSelectItem={handleListItemClick} + onRetry={onRetry} + onSearch={onSearch} + variant={variant} + mode={mode} + width={elementWidth} + /> + ); }; return ( - <DropdownWrapper - className={className} - show={showOptions} - error={error && !showOptions} - disabled={disabled} - readOnly={readOnly} - testId={testId} - onBlur={handleWrapperBlur} - > - <Selector - ref={selectorRef} - type="button" - data-testid={id || "selector"} - disabled={disabled} - onClick={handleSelectorClick} - {...otherProps} - > - {renderSelectorContent()} - </Selector> - {showOptions && <Divider />} - {renderOptionList()} - </DropdownWrapper> + <ElementWithDropdown + enabled={!readOnly && !disabled} + isOpen={showOptions} + renderElement={renderElement} + renderDropdown={renderDropdown} + onOpen={handleOpen} + onClose={handleClose} + onDismiss={handleDismiss} + clickToToggle + offset={8} + alignment={alignment} + fitAvailableHeight + customZIndex={dropdownZIndex} + /> ); }; diff --git a/src/input-nested-select/types.ts b/src/input-nested-select/types.ts index 126540548..d567a07f0 100644 --- a/src/input-nested-select/types.ts +++ b/src/input-nested-select/types.ts @@ -4,33 +4,36 @@ import { } from "../input-select"; import { DropdownSearchProps, - DropdownStyleProps, - Mode, -} from "../shared/nested-dropdown-list/types"; + DropdownVariantType, + ExpandMode, +} from "../shared/dropdown-list-v2/types"; +import { DropdownAlignmentType } from "../shared/dropdown-wrapper/types"; +// ============================================================================= +// SHARED PROPS +// ============================================================================= export interface InputNestedSelectOptionsProps<V1, V2, V3> extends Omit<InputSelectOptionsProps<V1>, "options"> { options: L1OptionProps<V1, V2, V3>[]; } -// ============================================================================= -// INPUT SELECT PROPS -// ============================================================================= -export interface InputNestedSelectSharedProps<V1, V2, V3> { +export interface InputNestedSelectSharedProps<V1, V2, V3> + extends Omit<InputSelectSharedProps<V1>, "options"> { readOnly?: boolean | undefined; /** Specifies if items are expanded or collapsed when the dropdown is opened */ - mode?: Mode | undefined; + mode?: ExpandMode | undefined; /** Function to convert selected value into a string */ valueToStringFunction?: ((value: V1 | V2 | V3) => string) | undefined; } +// ============================================================================= +// INPUT SELECT PROPS +// ============================================================================= export interface InputNestedSelectProps<V1, V2, V3> extends React.HTMLAttributes<HTMLElement>, InputNestedSelectOptionsProps<V1, V2, V3>, InputNestedSelectSharedProps<V1, V2, V3>, - Omit<InputSelectSharedProps<V1>, "options">, - DropdownSearchProps, - DropdownStyleProps { + DropdownSearchProps<L1OptionProps<V1, V2, V3>> { /** Specifies key path of the selected option */ selectedKeyPath?: string[] | undefined; /** If specified, the category label is selectable */ @@ -39,6 +42,12 @@ export interface InputNestedSelectProps<V1, V2, V3> onSelectOption?: | ((keyPath: string[], value: V1 | V2 | V3) => void) | undefined; + variant?: DropdownVariantType | undefined; + alignment?: DropdownAlignmentType | undefined; + dropdownZIndex?: number | undefined; + /** @deprecated this has no effect as the dropdown will automatically resize */ + listStyleWidth?: string | undefined; + onBlur?: (() => void) | undefined; } /** To be exposed for Form component inheritance */ @@ -48,7 +57,7 @@ export type InputNestedSelectPartialProps<V1, V2, V3> = Omit< >; // ============================================================================= -// Recursive Types +// OPTION PROPS // ============================================================================= interface BaseOptionProps { label: string; diff --git a/src/shared/dropdown-list-v2/index.ts b/src/shared/dropdown-list-v2/index.ts index 60dc22d3c..25f8ccd01 100644 --- a/src/shared/dropdown-list-v2/index.ts +++ b/src/shared/dropdown-list-v2/index.ts @@ -2,3 +2,6 @@ export * from "./dropdown-label"; export * from "./dropdown-list"; export * from "./dropdown-list-state"; export * from "./expandable-element"; +export * from "./nested-dropdown-list"; +export * from "./nested-dropdown-list-helpers"; +export * from "./types"; diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts b/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts index b6c0d7bbe..9288f7b2f 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts +++ b/src/shared/dropdown-list-v2/nested-dropdown-list-helpers.ts @@ -1,4 +1,5 @@ import { produce } from "immer"; +import isEmpty from "lodash/isEmpty"; import isEqual from "lodash/isEqual"; import { NestedDropdownListItemProps, @@ -258,3 +259,21 @@ export const findIndexFromEnd = <T>( return -1; }; + +export const findItemByKeyPath = <T>( + nestedList: NestedDropdownListItemProps<T>[], + keyPath: string[] +) => { + const [currentKey, ...nextKeyPath] = keyPath; + if (isEmpty(nestedList) || isEmpty(currentKey)) { + return undefined; + } + + const item = nestedList.find((item) => item.key === currentKey); + + if (!item || !nextKeyPath.length) { + return item; + } + + return findItemByKeyPath(item.subItems, nextKeyPath); +}; diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx index 9b6f23051..5c3c41886 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx @@ -61,7 +61,6 @@ export const NestedDropdownList = <T,>({ enableSearch, hideNoResultsDisplay, searchPlaceholder = "Search", - searchFunction, onSearch, }: NestedDropdownListProps<T>) => { // ========================================================================= @@ -157,7 +156,7 @@ export const NestedDropdownList = <T,>({ if (target.hasSubItems && !selectableCategory) { return; } - onSelectItem?.(target.keyPath); + onSelectItem?.(target); } break; } @@ -191,9 +190,13 @@ export const NestedDropdownList = <T,>({ onRetry?.(); }; - const handleListItemClick = (index: number, keyPath: string[]) => { + const handleListItemClick = (index: number) => { setFocusedIndex(index); - onSelectItem?.(keyPath); + + const activeList = searchActive + ? filteredListItems + : unfilteredListItems; + onSelectItem?.(activeList[index]); }; const handleListItemHover = (index: number) => { @@ -334,7 +337,7 @@ export const NestedDropdownList = <T,>({ // RENDER FUNCTIONS // ========================================================================= const renderSearchInput = () => { - if ((enableSearch || searchFunction) && itemsLoadState === "success") { + if (enableSearch && itemsLoadState === "success") { return ( <DropdownSearch ref={searchInputRef} @@ -497,7 +500,7 @@ export const NestedDropdownList = <T,>({ if (toggleable) { toggleCategory(i, !expanded); } else { - handleListItemClick(i, keyPath); + handleListItemClick(i); } }} onMouseEnter={() => handleListItemHover(i)} diff --git a/src/shared/dropdown-list-v2/types.ts b/src/shared/dropdown-list-v2/types.ts index 44f298ed6..4bba83f59 100644 --- a/src/shared/dropdown-list-v2/types.ts +++ b/src/shared/dropdown-list-v2/types.ts @@ -140,7 +140,7 @@ export interface NestedDropdownListProps<T> /** If specified, the category label is selectable */ selectableCategory?: boolean | undefined; - onSelectItem?: ((keyPath: string[]) => void) | undefined; + onSelectItem?: ((item: NestedDropdownListLocalItem<T>) => void) | undefined; onSelectAll?: (() => void) | undefined; onRetry?: (() => void) | undefined; } diff --git a/stories/form/form-nested-select/test.stories.tsx b/stories/form/form-nested-select/test.stories.tsx index 0aedb93d3..5b0c838f5 100644 --- a/stories/form/form-nested-select/test.stories.tsx +++ b/stories/form/form-nested-select/test.stories.tsx @@ -23,7 +23,7 @@ export const Single = { <div style={{ width: "23rem" }}> <NestedDropdownList selectedKeyPaths={selectedKeyPath ? [selectedKeyPath] : []} - onSelectItem={setSelectedKeyPath} + onSelectItem={(item) => setSelectedKeyPath(item.keyPath)} listItems={options} /> </div> @@ -40,7 +40,7 @@ export const SingleExpanded = { <div style={{ width: "23rem" }}> <NestedDropdownList selectedKeyPaths={selectedKeyPath ? [selectedKeyPath] : []} - onSelectItem={setSelectedKeyPath} + onSelectItem={(item) => setSelectedKeyPath(item.keyPath)} listItems={options} mode="expand" /> @@ -58,7 +58,7 @@ export const SingleCollapsed = { <div style={{ width: "23rem" }}> <NestedDropdownList selectedKeyPaths={selectedKeyPath ? [selectedKeyPath] : []} - onSelectItem={setSelectedKeyPath} + onSelectItem={(item) => setSelectedKeyPath(item.keyPath)} listItems={options} mode="collapse" /> @@ -76,7 +76,7 @@ export const SingleWithSearch = { <div style={{ width: "23rem" }}> <NestedDropdownList selectedKeyPaths={selectedKeyPath ? [selectedKeyPath] : []} - onSelectItem={setSelectedKeyPath} + onSelectItem={(item) => setSelectedKeyPath(item.keyPath)} enableSearch listItems={optionsForSearch} /> @@ -94,7 +94,7 @@ export const SingleWithSelectableCategory = { <div style={{ width: "23rem" }}> <NestedDropdownList selectedKeyPaths={selectedKeyPath ? [selectedKeyPath] : []} - onSelectItem={setSelectedKeyPath} + onSelectItem={(item) => setSelectedKeyPath(item.keyPath)} selectableCategory listItems={options} /> @@ -125,7 +125,7 @@ export const Multi = { <div style={{ width: "23rem" }}> <NestedDropdownList selectedKeyPaths={selectedKeyPaths} - onSelectItem={handleSelectItem} + onSelectItem={(item) => handleSelectItem(item.keyPath)} multiSelect listItems={options} /> @@ -156,7 +156,7 @@ export const MultiWithSearch = { <div style={{ width: "23rem" }}> <NestedDropdownList selectedKeyPaths={selectedKeyPaths} - onSelectItem={handleSelectItem} + onSelectItem={(item) => handleSelectItem(item.keyPath)} multiSelect enableSearch listItems={optionsForSearch} From 28dbfc71eb8b81e940f6dd2d316cce4bd3c8c77d Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Sun, 4 Aug 2024 16:41:52 +0800 Subject: [PATCH 0774/1949] [FLOAT][RL] Set popup role --- src/input-multi-select/input-multi-select.tsx | 1 + src/input-nested-select/input-nested-select.tsx | 1 + src/input-select/input-select.tsx | 1 + src/select-histogram/select-histogram.tsx | 1 + src/shared/dropdown-list-v2/expandable-element.tsx | 6 ++++-- 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/input-multi-select/input-multi-select.tsx b/src/input-multi-select/input-multi-select.tsx index d6ca65147..1ea85b68b 100644 --- a/src/input-multi-select/input-multi-select.tsx +++ b/src/input-multi-select/input-multi-select.tsx @@ -218,6 +218,7 @@ export const InputMultiSelect = <T, V>({ disabled={disabled} expanded={showOptions} listboxId={internalId} + popupRole="listbox" readOnly={readOnly} variant={variant} > diff --git a/src/input-nested-select/input-nested-select.tsx b/src/input-nested-select/input-nested-select.tsx index e85e7a67f..50c316fc6 100644 --- a/src/input-nested-select/input-nested-select.tsx +++ b/src/input-nested-select/input-nested-select.tsx @@ -235,6 +235,7 @@ export const InputNestedSelect = <V1, V2, V3>({ disabled={disabled} expanded={showOptions} listboxId={internalId} + popupRole="tree" readOnly={readOnly} variant={variant} > diff --git a/src/input-select/input-select.tsx b/src/input-select/input-select.tsx index b5fb1bd4d..92dcacf7c 100644 --- a/src/input-select/input-select.tsx +++ b/src/input-select/input-select.tsx @@ -231,6 +231,7 @@ export const InputSelect = <T, V>({ disabled={disabled} expanded={showOptions} listboxId={internalId} + popupRole="listbox" readOnly={readOnly} variant={variant} > diff --git a/src/select-histogram/select-histogram.tsx b/src/select-histogram/select-histogram.tsx index a49bc40dd..30aaf6f4f 100644 --- a/src/select-histogram/select-histogram.tsx +++ b/src/select-histogram/select-histogram.tsx @@ -179,6 +179,7 @@ export const SelectHistogram = ({ disabled={disabled} expanded={showOptions} listboxId={internalId} + popupRole="dialog" readOnly={readOnly} variant="default" > diff --git a/src/shared/dropdown-list-v2/expandable-element.tsx b/src/shared/dropdown-list-v2/expandable-element.tsx index 47ffdbc5c..a44e364a5 100644 --- a/src/shared/dropdown-list-v2/expandable-element.tsx +++ b/src/shared/dropdown-list-v2/expandable-element.tsx @@ -1,5 +1,5 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; -import { Ref, forwardRef } from "react"; +import { AriaAttributes, Ref, forwardRef } from "react"; import { IconContainer, Selector } from "./expandable-element.styles"; import { DropdownVariantType } from "./types"; @@ -8,6 +8,7 @@ interface ExpandableElementProps { disabled: boolean; expanded: boolean; listboxId: string; + popupRole: AriaAttributes["aria-haspopup"]; readOnly: boolean; variant: DropdownVariantType; } @@ -18,6 +19,7 @@ export const Component = ( disabled, expanded, listboxId, + popupRole, readOnly, variant, }: ExpandableElementProps, @@ -31,7 +33,7 @@ export const Component = ( ref={ref} type="button" aria-expanded={expanded} - aria-haspopup="listbox" + aria-haspopup={popupRole} data-testid="selector" disabled={disabled} aria-controls={listboxId} From 637e1246fa06f241ee74e3f21c3f52cf305d0ca8 Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Sun, 4 Aug 2024 20:45:16 +0800 Subject: [PATCH 0775/1949] [FLOAT][RL] Handle aria selection state in Safari/Voiceover --- src/shared/dropdown-list-v2/nested-dropdown-list.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx index 5c3c41886..6f836247f 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx @@ -489,7 +489,8 @@ export const NestedDropdownList = <T,>({ <UnexpandableIndicator /> )} <ListItem - aria-checked={checked} + aria-checked={checked} // not working with safari voiceover + aria-selected={!!checked} // required for safari voiceover aria-expanded={hasSubItems ? expanded : undefined} aria-level={level + 1} aria-posinset={indexInParent + 1} From 6d148d24af6e41f3eac428893603ddd62913a9ab Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Sun, 4 Aug 2024 20:58:19 +0800 Subject: [PATCH 0776/1949] [FLOAT][RL] Add unit tests --- .../dropdown-list-v2/nested-dropdown-list.tsx | 2 +- .../input-nested-select.spec.tsx | 357 ++++++++++++++++++ .../nested-dropdown-list.spec.tsx | 4 +- 3 files changed, 361 insertions(+), 2 deletions(-) create mode 100644 tests/input-nested-select/input-nested-select.spec.tsx diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx index 6f836247f..181331016 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx @@ -540,7 +540,7 @@ export const NestedDropdownList = <T,>({ const renderList = () => { return ( - <List> + <List data-testid="nested-dropdown-list"> {renderSearchInput()} {renderSelectAll()} {renderNoResults()} diff --git a/tests/input-nested-select/input-nested-select.spec.tsx b/tests/input-nested-select/input-nested-select.spec.tsx new file mode 100644 index 000000000..c1eea0348 --- /dev/null +++ b/tests/input-nested-select/input-nested-select.spec.tsx @@ -0,0 +1,357 @@ +import { + act, + render, + screen, + waitFor, + waitForElementToBeRemoved, +} from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { InputNestedSelect, L1OptionProps } from "../../src"; + +const FIELD_TESTID = "test"; +const SELECTOR_TESTID = "selector"; +const DROPDOWN_TESTID = "nested-dropdown-list"; +const OPTIONS: L1OptionProps<string, string, string>[] = [ + { + label: "Parent 1 item", + value: "1", + key: "1", + subItems: [ + { + label: "Parent 1.1 item", + value: "1.1", + key: "10", + subItems: [ + { + label: "Child 1.1.1 item", + value: "1.1.1", + key: "100", + }, + ], + }, + ], + }, +]; + +describe("InputNestedSelect", () => { + beforeEach(() => { + jest.clearAllMocks(); + + global.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn(), + })); + }); + + it("should render the component", async () => { + render( + <InputNestedSelect data-testid={FIELD_TESTID} options={OPTIONS} /> + ); + + expect(screen.getByText("Select")).toBeVisible(); + expect(screen.queryByTestId(DROPDOWN_TESTID)).not.toBeInTheDocument(); + }); + + it("should open dropdown list when selector is clicked", async () => { + const user = userEvent.setup(); + + render( + <InputNestedSelect data-testid={FIELD_TESTID} options={OPTIONS} /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1.1 item")).toBeVisible(); + }); + + it("should toggle dropdown list when selector is clicked", async () => { + const user = userEvent.setup(); + + render( + <InputNestedSelect data-testid={FIELD_TESTID} options={OPTIONS} /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + }); + }); + + it("should select list item correctly", async () => { + const user = userEvent.setup(); + const mockOnSelectOption = jest.fn(); + + render( + <InputNestedSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onSelectOption={mockOnSelectOption} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + + await user.click(screen.queryByText("Child 1.1.1 item")); + + await waitFor(() => { + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + }); + + expect(mockOnSelectOption).toHaveBeenCalledWith( + ["1", "10", "100"], + "1.1.1" + ); + }); + + it("should select category item correctly", async () => { + const user = userEvent.setup(); + const mockOnSelectOption = jest.fn(); + + render( + <InputNestedSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + selectableCategory + onSelectOption={mockOnSelectOption} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + + await user.click(screen.queryByText("Parent 1.1 item")); + + await waitFor(() => { + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + }); + + expect(mockOnSelectOption).toHaveBeenCalledWith(["1", "10"], "1.1"); + }); + + describe("focus/blur behaviour", () => { + it("should call onBlur via outside click", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + <InputNestedSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onBlur={mockOnBlur} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => screen.getByTestId(DROPDOWN_TESTID)); + await waitFor(() => + expect( + screen.queryByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveFocus() + ); + + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await user.click(screen.queryByText("Child 1.1.1 item")); + + await waitForElementToBeRemoved(() => + screen.queryByTestId(DROPDOWN_TESTID) + ); + + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await user.click(document.body); + + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + + it("should dismiss dropdown if it is open", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + <InputNestedSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onBlur={mockOnBlur} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => screen.getByTestId(DROPDOWN_TESTID)); + await waitFor(() => + expect( + screen.queryByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveFocus() + ); + + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await user.click(document.body); + + await waitForElementToBeRemoved(() => + screen.queryByTestId(DROPDOWN_TESTID) + ); + + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + + it("should dismiss dropdown via Esc key", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + <InputNestedSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onBlur={mockOnBlur} + /> + ); + + await act(async () => { + await user.click(screen.queryByTestId(FIELD_TESTID)); + }); + + await waitFor(() => screen.getByTestId(DROPDOWN_TESTID)); + await waitFor(() => + expect( + screen.queryByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveFocus() + ); + + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.keyboard("{Escape}"); + }); + + await waitForElementToBeRemoved(() => + screen.queryByTestId(DROPDOWN_TESTID) + ); + + expect(screen.queryByTestId(SELECTOR_TESTID)).toHaveFocus(); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.click(document.body); + }); + + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + + it("should call onFocus and onBlur when cycling through the tab sequence", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + <> + <button data-testid="before" /> + <InputNestedSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onBlur={mockOnBlur} + enableSearch + /> + <button data-testid="after" /> + </> + ); + + await user.keyboard("{Tab}"); + + expect(screen.getByTestId("before")).toHaveFocus(); + + await user.keyboard("{Tab} "); + + await waitFor(() => screen.getByTestId(DROPDOWN_TESTID)); + await waitFor(() => { + expect( + screen.getByLabelText("Enter text to search") + ).toHaveFocus(); + }); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.keyboard("{Tab}"); + }); + + await waitForElementToBeRemoved(() => + screen.queryByTestId(DROPDOWN_TESTID) + ); + + expect(screen.getByTestId("after")).toHaveFocus(); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + + await act(async () => { + await user.keyboard("{Shift>}{Tab}{/Shift}"); + }); + + await waitFor(() => { + expect(screen.queryByTestId(SELECTOR_TESTID)).toHaveFocus(); + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + }); + }); + + describe("search behaviour", () => { + it("should support default search for string options", async () => { + const user = userEvent.setup(); + + render( + <InputNestedSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + enableSearch + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + await waitFor(() => { + expect( + screen.getByLabelText("Enter text to search") + ).toHaveFocus(); + }); + + await act(async () => { + await user.keyboard("Child"); + }); + + const option = screen.getByText("1.1.1 item", { exact: false }); + expect(option.textContent).toEqual("Child 1.1.1 item"); + }); + }); +}); diff --git a/tests/shared/dropdown-list-v2/nested-dropdown-list.spec.tsx b/tests/shared/dropdown-list-v2/nested-dropdown-list.spec.tsx index 9255df1c9..6a66302d0 100644 --- a/tests/shared/dropdown-list-v2/nested-dropdown-list.spec.tsx +++ b/tests/shared/dropdown-list-v2/nested-dropdown-list.spec.tsx @@ -488,7 +488,9 @@ describe("NestedDropdownList", () => { await user.click(screen.queryByText("Parent 1.1 item")); - expect(mockOnSelectItem).toHaveBeenCalledWith(["1", "1.1"]); + expect(mockOnSelectItem).toHaveBeenCalledWith( + expect.objectContaining({ keyPath: ["1", "1.1"] }) + ); expect(screen.queryByText("Child 1.1.1 item")).toBeVisible(); expect( screen.getByRole("treeitem", { name: "Parent 1.1 item" }) From 234b15d88bdd02ee9315926331f447b56e527c3c Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Tue, 13 Aug 2024 22:02:23 +0800 Subject: [PATCH 0777/1949] [FLOAT][RL] Update documentation --- .../form-nested-select/form-nested-select.mdx | 27 +- .../form-nested-select.stories.tsx | 74 ++-- .../form-nested-select/nested-data-list.ts | 327 ++++++++++-------- 3 files changed, 262 insertions(+), 166 deletions(-) diff --git a/stories/form/form-nested-select/form-nested-select.mdx b/stories/form/form-nested-select/form-nested-select.mdx index 4aea656a8..1eba9b03f 100644 --- a/stories/form/form-nested-select/form-nested-select.mdx +++ b/stories/form/form-nested-select/form-nested-select.mdx @@ -9,7 +9,7 @@ import { PropsTable } from "./props-table"; <Secondary>Overview</Secondary> -A field that provides a nested set of options for a user to select. +A field that provides a hierarchical set of options for a user to select. ```tsx import { Form } from "@lifesg/react-design-system/form"; @@ -19,12 +19,37 @@ import { Form } from "@lifesg/react-design-system/form"; <Heading3>Specifying mode</Heading3> +In the default mode, if there is: + +- No selection: the first subtree is expanded +- A selected option: the subtree containing the option is expanded + +Alternative behaviour is supported with the `mode` prop. + <Canvas of={FormNestedSelectStories.SpecifyingMode} /> +<Heading3>Selectable category</Heading3> + +<Canvas of={FormNestedSelectStories.SelectableCategory} /> + <Heading3>With search capabilities</Heading3> +Overview of the search behaviour: + +1. At least 3 characters to run the search +2. The match is done against the item's label and is case-insensitive +3. Matching subitems are included in the result. In the example below, searching + "banana" returns **Banana milk** and **Banana** +4. If a subcategory matches, all of its subitems are also included in the + results. In the example below, searching "cheese" will return the **Cheese** + subtree + <Canvas of={FormNestedSelectStories.WithSearch} /> +<Heading3>Label truncation</Heading3> + +<Canvas of={FormNestedSelectStories.LabelTruncation} /> + <Heading3>Rendering in grid layouts</Heading3> You can also specify [ColDiv's](/docs/getting-started-layout-column-divs--docs) diff --git a/stories/form/form-nested-select/form-nested-select.stories.tsx b/stories/form/form-nested-select/form-nested-select.stories.tsx index 400421807..fef2143b3 100644 --- a/stories/form/form-nested-select/form-nested-select.stories.tsx +++ b/stories/form/form-nested-select/form-nested-select.stories.tsx @@ -5,7 +5,12 @@ import { InputNestedSelect } from "src/input-nested-select"; import { Layout } from "src/layout"; import { StoryContainer } from "../../storybook-common"; import { Container } from "../shared-doc-elements"; -import { options, twoTierOptions } from "./nested-data-list"; +import { + longLabelOptions, + options, + searchOptions, + twoTierOptions, +} from "./nested-data-list"; type Component = typeof Form.NestedSelect; type StandaloneComponent = typeof InputNestedSelect; @@ -19,11 +24,6 @@ export default meta; export const Default: StoryObj<Component> = { render: () => { - const [selectedKeyPath, setSelectedKeyPath] = useState([ - "999", - "820", - "10001", - ]); return ( <StoryContainer> <Container> @@ -31,19 +31,6 @@ export const Default: StoryObj<Component> = { label="This is the nested select field" options={options} /> - <Form.NestedSelect - label="This is prefilled with a selected option" - options={options} - selectedKeyPath={selectedKeyPath} - onSelectOption={(keyPath, value) => { - setSelectedKeyPath(keyPath); - }} - /> - <Form.NestedSelect - label="This allows selection of categories" - options={options} - selectableCategory={true} - /> <Form.NestedSelect label="This contains a 2 tier option" options={twoTierOptions} @@ -54,7 +41,7 @@ export const Default: StoryObj<Component> = { disabled /> <Form.NestedSelect - label="This is the readOnly state" + label="This is the readonly state" options={options} readOnly /> @@ -71,9 +58,18 @@ export const Default: StoryObj<Component> = { export const SpecifyingMode: StoryObj<Component> = { render: () => { + const [selectedKeyPath, setSelectedKeyPath] = useState(["2", "22"]); return ( <StoryContainer> <Container> + <Form.NestedSelect + label="The selected option is expanded by default" + options={options} + selectedKeyPath={selectedKeyPath} + onSelectOption={(keyPath) => { + setSelectedKeyPath(keyPath); + }} + /> <Form.NestedSelect label="With all (sub)categories expanded " options={options} @@ -90,6 +86,22 @@ export const SpecifyingMode: StoryObj<Component> = { }, }; +export const SelectableCategory: StoryObj<Component> = { + render: () => { + return ( + <StoryContainer> + <Container> + <Form.NestedSelect + label="This allows selection of categories" + options={options} + selectableCategory={true} + /> + </Container> + </StoryContainer> + ); + }, +}; + export const WithSearch: StoryObj<Component> = { render: () => { return ( @@ -97,7 +109,7 @@ export const WithSearch: StoryObj<Component> = { <Container> <Form.NestedSelect label="This has searchable options" - options={options} + options={searchOptions} enableSearch /> </Container> @@ -106,6 +118,26 @@ export const WithSearch: StoryObj<Component> = { }, }; +export const LabelTruncation: StoryObj<Component> = { + render: () => { + return ( + <StoryContainer> + <Container> + <Form.NestedSelect + label="This has truncation at the end" + options={longLabelOptions} + /> + <Form.NestedSelect + label="This has truncation in the middle" + optionTruncationType="middle" + options={longLabelOptions} + /> + </Container> + </StoryContainer> + ); + }, +}; + export const RenderingInGridLayout: StoryObj<Component> = { render: () => { return ( diff --git a/stories/form/form-nested-select/nested-data-list.ts b/stories/form/form-nested-select/nested-data-list.ts index 49f805353..5e1546877 100644 --- a/stories/form/form-nested-select/nested-data-list.ts +++ b/stories/form/form-nested-select/nested-data-list.ts @@ -1,178 +1,72 @@ export const options = [ { - label: "Category 1", - value: { id: 999, name: "category 1" }, - key: "999", + label: "1", + value: { id: 1, name: "1" }, + key: "1", subItems: [ { - label: "Sub Category A", - value: { - id: 820, - name: "Sub category a", - }, - key: "820", - subItems: [ - { - label: "Option 1", - value: { - id: 10001, - name: "Option-1", - }, - key: "10001", - }, - { - label: "Option 2", - value: { - id: 10002, - name: "Option-2", - }, - key: "10002", - }, - { - label: "Option 3", - value: { - id: 10003, - name: "Option-3", - }, - key: "10003", - }, - ], - }, - { - label: "Sub Category B", - value: { id: 821, name: "Sub category b" }, - key: "821", - subItems: [ - { - label: "Option ", - value: { - id: 103, - name: "Sub option 2", - }, - key: "103", - }, - ], + label: "1.1", + value: { id: 11, name: "1.1" }, + key: "11", }, { - label: "Sub Category C", - value: { - id: 822, - name: "Sub category c", - }, - key: "822", + label: "1.2", + value: { id: 12, name: "1.2" }, + key: "12", subItems: [ { - label: "Honey", - value: { - id: 104, - name: "honey", - }, - key: "104", + label: "1.2.1", + value: { id: 121, name: "1.2.1" }, + key: "121", }, { - label: "Nuts", - value: { - id: 105, - name: "nuts", - }, - key: "105", + label: "1.2.2", + value: { id: 122, name: "1.2.2" }, + key: "122", }, { - label: "Butter", - value: { - id: 106, - name: "butter", - }, - key: "106", + label: "1.2.3", + value: { id: 123, name: "1.2.3" }, + key: "123", }, ], }, { - label: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sollicitudin dolor ut est rutrum vulputate. Maecenas lacinia viverra metus", - value: { - id: 510, - name: "Long sub category a", - }, - key: "510", + label: "1.3", + value: { id: 13, name: "1.3" }, + key: "13", subItems: [ { - label: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tempor varius elit nec iaculis. Sed sed mauris iaculis, pretium dui vel, lacinia est.", - value: { - id: 23, - name: "Long item a", - }, - key: "23", + label: "1.3.1", + value: { id: 131, name: "1.3.1" }, + key: "131", }, ], }, ], }, { - label: "Hive", - value: { id: 487, name: "hive" }, - key: "32", + label: "2", + value: { id: 2, name: "2" }, + key: "2", subItems: [ { - label: "Level 8", - value: { id: 100, name: "Level 8" }, - key: "100", + label: "2.1", + value: { id: 21, name: "2.1" }, + key: "21", }, { - label: "Level 9 ", - value: { id: 101, name: "Level 9" }, - key: "101", - subItems: [ - { - label: "Tutu kueh", - value: { - id: 900, - name: "tutu kueh", - }, - key: "900", - }, - { - label: "Lychee", - value: { - id: 901, - name: "lychee", - }, - key: "901", - }, - { - label: "Mao Shan Wang", - value: { - id: 902, - name: "mao shan wang", - }, - key: "902", - }, - ], - }, - { - label: "Base", - value: { id: 102, name: "Earth" }, - key: "102", - subItems: [ - { - label: "Uranus", - value: { - id: 903, - name: "Uranus", - }, - key: "903", - }, - { - label: "Neptune", - value: { - id: 904, - name: "Neptune", - }, - key: "904", - }, - ], + label: "2.2", + value: { id: 22, name: "2.2" }, + key: "22", }, ], }, + { + label: "3", + value: { id: 3, name: "3" }, + key: "3", + }, ]; export const twoTierOptions = [ @@ -243,3 +137,148 @@ export const twoTierOptions = [ ], }, ]; + +const LONG_TEXT = + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sollicitudin dolor ut est rutrum vulputate."; + +export const longLabelOptions = [ + { + label: LONG_TEXT, + value: 1, + key: "1", + }, + { + label: LONG_TEXT, + value: 2, + key: "2", + subItems: [ + { + label: LONG_TEXT, + value: 1, + key: "1", + subItems: [], + }, + { + label: LONG_TEXT, + value: 2, + key: "2", + subItems: [ + { + label: LONG_TEXT, + value: 1, + key: "1", + }, + ], + }, + ], + }, +]; + +export const searchOptions = [ + { + label: "Fruits", + value: "1", + key: "1", + subItems: [ + { + label: "Avocado", + value: "1.1", + key: "10", + }, + { + label: "Berries", + value: "1.2", + key: "20", + subItems: [ + { + label: "Banana", + value: "1.2.1", + key: "100", + }, + { + label: "Blueberry", + value: "1.2.2", + key: "200", + }, + ], + }, + { + label: "Not berries", + value: "1.3", + key: "30", + subItems: [ + { + label: "Strawberry", + value: "1.3.1", + key: "100", + }, + { + label: "Raspberry", + value: "1.3.2", + key: "200", + }, + ], + }, + ], + }, + { + label: "Dairy", + value: "2", + key: "2", + subItems: [ + { + label: "Milk", + value: "2.1", + key: "10", + subItems: [ + { + label: "Banana milk", + value: "2.1.1", + key: "100", + }, + + { + label: "Skimmed milk", + value: "2.1.2", + key: "200", + }, + ], + }, + { + label: "Cheese", + value: "2.2", + key: "20", + subItems: [ + { + label: "Cheddar", + value: "2.2.1", + key: "100", + }, + + { + label: "Mozzarella", + value: "2.2.2", + key: "200", + }, + ], + }, + ], + }, + { + label: "Toiletries", + value: "3", + key: "3", + subItems: [ + { + label: "Toilet paper", + value: "3.1", + key: "10", + }, + { + label: "Shampoo", + value: "3.2", + key: "20", + }, + ], + }, +]; From 1ac0e38812feef325883ad3dfcef08359a00afe3 Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Tue, 3 Sep 2024 22:03:52 +0800 Subject: [PATCH 0778/1949] [FLOAT][RL] Render matching substring of option in bold --- .../dropdown-label.styles.tsx | 8 +++++ .../dropdown-list-v2/dropdown-label.tsx | 33 +++++++++++++++++-- .../dropdown-list-v2/nested-dropdown-list.tsx | 3 +- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/shared/dropdown-list-v2/dropdown-label.styles.tsx b/src/shared/dropdown-list-v2/dropdown-label.styles.tsx index 74ba61474..825870487 100644 --- a/src/shared/dropdown-list-v2/dropdown-label.styles.tsx +++ b/src/shared/dropdown-list-v2/dropdown-label.styles.tsx @@ -65,6 +65,14 @@ export const SecondaryText = styled.div<LabelStyleProps>` }} `; +export const MatchedText = styled.span<LabelStyleProps>` + ${(props) => + TextStyleHelper.getTextStyle( + props.$variant === "small" ? "BodySmall" : "Body", + "semibold" + )} +`; + export const Label = styled.div<LabelStyleProps>` text-align: left; width: 100%; diff --git a/src/shared/dropdown-list-v2/dropdown-label.tsx b/src/shared/dropdown-list-v2/dropdown-label.tsx index c7ae7d257..e2c707652 100644 --- a/src/shared/dropdown-list-v2/dropdown-label.tsx +++ b/src/shared/dropdown-list-v2/dropdown-label.tsx @@ -7,6 +7,7 @@ import { StringHelper } from "../../util/string-helper"; import { DropdownVariantType, LabelDisplayType } from "../dropdown-list/types"; import { Label, + MatchedText, PrimaryText, SecondaryText, TruncateFirstLine, @@ -18,6 +19,7 @@ interface DropdownLabelProps { displayType?: LabelDisplayType | undefined; label: string; maxLines?: number | undefined; + searchTerm?: string | undefined; selected?: boolean | undefined; sublabel?: string | undefined; truncationType?: "middle" | "end" | undefined; @@ -28,6 +30,7 @@ export const DropdownLabel = ({ bold, displayType = "inline", label, + searchTerm, maxLines = 2, selected, sublabel, @@ -83,14 +86,38 @@ export const DropdownLabel = ({ // ========================================================================= // RENDER FUNCTIONS // ========================================================================= + const renderMatchInBold = (displayText: string) => { + if (!searchTerm) { + return displayText; + } + + const match = searchTerm.toLowerCase().trim(); + const startIndex = displayText.toLowerCase().indexOf(match); + const endIndex = startIndex + searchTerm.length; + + if (startIndex === -1) { + return displayText; + } + + return ( + <> + {label.slice(0, startIndex)} + <MatchedText $variant={variant}> + {label.slice(startIndex, endIndex)} + </MatchedText> + {label.slice(endIndex)} + </> + ); + }; + const renderTruncatedText = (displayText: string): JSX.Element => { return ( <> <TruncateFirstLine $maxLines={maxLines} aria-hidden> - {displayText} + {renderMatchInBold(displayText)} </TruncateFirstLine> <TruncateSecondLine $maxLines={maxLines} aria-hidden> - {displayText} + {renderMatchInBold(displayText)} </TruncateSecondLine> </> ); @@ -108,7 +135,7 @@ export const DropdownLabel = ({ > {truncationType === "middle" && shouldTruncateTitle ? renderTruncatedText(label) - : label} + : renderMatchInBold(label)} </PrimaryText> {sublabel && ( <SecondaryText diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx index 181331016..0aae1a6d5 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx @@ -527,11 +527,12 @@ export const NestedDropdownList = <T,>({ {renderSelectionIcon(listItem)} <DropdownLabel bold={hasSubItems} + searchTerm={searchActive ? searchTerm : undefined} label={item.label} selected={!!checked} truncationType={itemTruncationType} maxLines={itemMaxLines} - ></DropdownLabel> + /> </ListItem> </ListItemContainer> ); From bf697ee7310a7f75b3ab7767e2fe65b821ceac6f Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Tue, 31 Dec 2024 13:36:36 +0800 Subject: [PATCH 0779/1949] [FLOAT][RL] Simplify unnecessary destructuring --- src/input-nested-select/input-nested-select.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/input-nested-select/input-nested-select.tsx b/src/input-nested-select/input-nested-select.tsx index 50c316fc6..a580dbd7c 100644 --- a/src/input-nested-select/input-nested-select.tsx +++ b/src/input-nested-select/input-nested-select.tsx @@ -88,12 +88,7 @@ export const InputNestedSelect = <V1, V2, V3>({ useEffect(() => { setSelectedKeyPaths(_selectedKeyPath ? [_selectedKeyPath] : []); const selectedItem = findItemByKeyPath(options, _selectedKeyPath || []); - if (selectedItem) { - const { label, value } = selectedItem; - setSelectedItem({ label, value }); - } else { - setSelectedItem(undefined); - } + setSelectedItem(selectedItem ?? undefined); }, [_selectedKeyPath, options]); // ========================================================================= From 100e2b486bc5b642336601f82dd90c6c97cc39bc Mon Sep 17 00:00:00 2001 From: qroll <quek.ruoling@gmail.com> Date: Sun, 29 Dec 2024 23:48:14 +0800 Subject: [PATCH 0780/1949] [FLOAT][RL] Rework nested multi select component --- src/input-nested-multi-select/helpers.ts | 90 ++++ .../input-nested-multi-select.tsx | 479 ++++++++---------- src/input-nested-multi-select/types.ts | 13 +- src/input-nested-select/types.ts | 6 +- .../dropdown-list-v2/nested-dropdown-list.tsx | 20 +- src/shared/dropdown-list-v2/types.ts | 7 +- .../input-nested-multi-select.spec.tsx | 427 ++++++++++++++++ 7 files changed, 753 insertions(+), 289 deletions(-) create mode 100644 src/input-nested-multi-select/helpers.ts create mode 100644 tests/input-nested-multi-select/input-nested-multi-select.spec.tsx diff --git a/src/input-nested-multi-select/helpers.ts b/src/input-nested-multi-select/helpers.ts new file mode 100644 index 000000000..054fa38e2 --- /dev/null +++ b/src/input-nested-multi-select/helpers.ts @@ -0,0 +1,90 @@ +import isEmpty from "lodash/isEmpty"; +import { NestedDropdownListItemProps } from "../shared/dropdown-list-v2"; + +const findSelectedItem = <V1, V2, V3>( + options: NestedDropdownListItemProps<V1 | V2 | V3>[], + keyPath: string[], + originalKeyPath: string[] +): NestedDropdownListItemProps<V1 | V2 | V3> | undefined => { + const [currentKey, ...nextKeyPath] = keyPath; + + if (isEmpty(options) || !currentKey) { + return undefined; + } + + const item = options.find((item) => item.key === currentKey); + + if (!item) { + return undefined; + } + + if (!nextKeyPath.length) { + return item; + } + + return findSelectedItem(item.subItems, nextKeyPath, originalKeyPath); +}; + +export const getSelectedItems = <V1, V2, V3>( + options: NestedDropdownListItemProps<V1 | V2 | V3>[], + keyPaths: string[][] +): SelectedItem<V1 | V2 | V3>[] => { + const selectedItems: SelectedItem<V1 | V2 | V3>[] = []; + + for (let i = 0; i < keyPaths.length; i++) { + const keyPath = keyPaths[i]; + const item = findSelectedItem(options, keyPath, keyPath); + + if (item) { + selectedItems.push({ + value: item.value, + label: item.label, + keyPath: keyPath, + }); + } + } + + return selectedItems; +}; + +export interface SelectedItem<T> { + label: string; + keyPath: string[]; + value: T; +} + +const findSubItems = <V1, V2, V3>( + options: NestedDropdownListItemProps<V1 | V2 | V3>[], + parentKeyPath: string[] +): SelectedItem<V1 | V2 | V3>[] => { + const selectedItems: SelectedItem<V1 | V2 | V3>[] = []; + + for (const option of options) { + if (option.subItems) { + selectedItems.push( + ...findSubItems(option.subItems, [...parentKeyPath, option.key]) + ); + } else { + selectedItems.push({ + value: option.value, + label: option.label, + keyPath: [...parentKeyPath, option.key], + }); + } + } + + return selectedItems; +}; + +export const getSelectedSubItems = <V1, V2, V3>( + options: NestedDropdownListItemProps<V1 | V2 | V3>[], + keyPath: string[] +): SelectedItem<V1 | V2 | V3>[] => { + const item = findSelectedItem(options, keyPath, keyPath); + + if (item && item.subItems) { + return findSubItems(item.subItems, keyPath); + } + + return []; +}; diff --git a/src/input-nested-multi-select/input-nested-multi-select.tsx b/src/input-nested-multi-select/input-nested-multi-select.tsx index df59c5b47..bb5d68d3e 100644 --- a/src/input-nested-multi-select/input-nested-multi-select.tsx +++ b/src/input-nested-multi-select/input-nested-multi-select.tsx @@ -1,27 +1,30 @@ -import React, { useEffect, useRef, useState } from "react"; +import { OpenChangeReason } from "@floating-ui/react"; import isEmpty from "lodash/isEmpty"; -import { NestedDropdownList } from "../shared/nested-dropdown-list/nested-dropdown-list"; -import { DropdownWrapper } from "../shared/dropdown-wrapper"; +import isEqual from "lodash/isEqual"; +import React, { useEffect, useRef, useState } from "react"; import { - CombinedFormattedOptionProps, - SelectedItem, -} from "../shared/nested-dropdown-list/types"; + ExpandableElement, + NestedDropdownList, + NestedDropdownListItemProps, + NestedDropdownListLocalItem, +} from "../shared/dropdown-list-v2"; +import { + DropdownRenderProps, + ElementWithDropdown, +} from "../shared/dropdown-wrapper"; import { - Divider, - IconContainer, LabelContainer, PlaceholderLabel, - Selector, - StyledChevronIcon, ValueLabel, } from "../shared/dropdown-wrapper/dropdown-wrapper.styles"; -import { StringHelper } from "../util"; +import { InputBox } from "../shared/input-wrapper/input-wrapper"; +import { SimpleIdGenerator, StringHelper } from "../util"; +import { SelectedItem, getSelectedItems, getSelectedSubItems } from "./helpers"; import { InputNestedMultiSelectProps } from "./types"; -import { CombinedOptionProps } from "../input-nested-select"; export const InputNestedMultiSelect = <V1, V2, V3>({ placeholder = "Select", - options, + options: _options, disabled, error, className, @@ -33,156 +36,128 @@ export const InputNestedMultiSelect = <V1, V2, V3>({ enableSearch, searchPlaceholder, hideNoResultsDisplay, - listStyleWidth, readOnly, onSearch, onSelectOptions, onShowOptions, onHideOptions, onRetry, + onBlur, optionsLoadState = "success", optionTruncationType = "end", - ...otherProps + variant, + alignment, + dropdownZIndex, }: InputNestedMultiSelectProps<V1, V2, V3>): JSX.Element => { - // ============================================================================= + // ========================================================================= // CONST, STATE - // ============================================================================= + // ========================================================================= + const options = _options as NestedDropdownListItemProps<V1 | V2 | V3>[]; const [selectedKeyPaths, setSelectedKeyPaths] = useState<string[][]>( _selectedKeyPaths || [] ); const [selectedItems, setSelectedItems] = useState< - SelectedItem<V1, V2, V3>[] + SelectedItem<V1 | V2 | V3>[] >([]); const [showOptions, setShowOptions] = useState<boolean>(false); + const [focused, setFocused] = useState<boolean>(false); + const [internalId] = useState<string>(() => SimpleIdGenerator.generate()); + const nodeRef = useRef<HTMLDivElement>(); const selectorRef = useRef<HTMLButtonElement>(); const labelContainerRef = useRef<HTMLDivElement>(); - // ============================================================================= + // ========================================================================= // EFFECTS - // ============================================================================= + // ========================================================================= useEffect(() => { const newKeyPath = _selectedKeyPaths || []; - const selectedItems = getSelectedItemFromKey(options, newKeyPath); + const selectedItems = getSelectedItems(options, newKeyPath); setSelectedKeyPaths(newKeyPath); setSelectedItems(selectedItems); }, [_selectedKeyPaths, options]); - // ============================================================================= + // ========================================================================= // EVENT HANDLERS - // ============================================================================= - const handleSelectorClick = (event: React.MouseEvent) => { - event.preventDefault(); - - if (disabled || readOnly) { - return; - } - - setShowOptions(!showOptions); - triggerOptionDisplayCallback(!showOptions); - }; - - const handleSelectItem = ( - item: CombinedFormattedOptionProps<V1, V2, V3> + // ========================================================================= + const handleSelectAll = ( + keyPaths: string[][], + items: NestedDropdownListLocalItem<V1 | V2 | V3>[] ) => { - const selectedItem = getItemAtKeyPath(item.keyPath); - let newKeyPaths: string[][] = []; - - if (selectedItem.subItems) { - const selectableOptionKeyPaths = getSubItemKeyPaths( - selectedItem, - item.keyPath - ); - - const selectedCount = selectedKeyPaths.filter((keyPath) => - isSubItem(keyPath, item.keyPath) - ).length; - - if (selectedCount < selectableOptionKeyPaths.length) { - newKeyPaths = [ - ...new Map( - [...selectedKeyPaths, ...selectableOptionKeyPaths].map( - (k) => [k.join("-"), k] - ) - ).values(), - ]; - } else { - newKeyPaths = selectedKeyPaths.filter( - (keyPath) => !isSubItem(keyPath, item.keyPath) - ); - } + if (keyPaths.length) { + const selectedItems = items.map((item) => ({ + keyPath: item.keyPath, + label: item.item.label, + value: item.item.value, + })); + setSelectedKeyPaths(keyPaths); + setSelectedItems(selectedItems); + performOnSelectOptions(keyPaths, selectedItems); } else { - const selected = selectedKeyPaths.some((keyPath) => - isSubItem(keyPath, item.keyPath) - ); - - if (selected) { - const filteredItems = selectedItems.filter( - ({ keyPath }) => - JSON.stringify(keyPath) !== JSON.stringify(item.keyPath) - ); - newKeyPaths = filteredItems.map((i) => i.keyPath); - } else { - newKeyPaths = [...selectedKeyPaths, item.keyPath]; - } + const keyPaths = []; + const selectedItems = []; + setSelectedKeyPaths(keyPaths); + setSelectedItems(selectedItems); + performOnSelectOptions(keyPaths, selectedItems); } + }; - const newSelectedItems = getSelectedItemFromKey(options, newKeyPaths); - - setSelectedKeyPaths(newKeyPaths); + const handleListItemClick = ( + listItem: NestedDropdownListLocalItem<V1 | V2 | V3> + ) => { + const newSelectedItems: SelectedItem<V1 | V2 | V3>[] = + getNewSelection(listItem); + const newKeyPaths = newSelectedItems.map((item) => item.keyPath); setSelectedItems(newSelectedItems); - - if (selectorRef.current) selectorRef.current.focus(); - + setSelectedKeyPaths(newKeyPaths); performOnSelectOptions(newKeyPaths, newSelectedItems); }; - const handleSelectAll = ( - keyPaths: string[][], - items: SelectedItem<V1, V2, V3>[] - ) => { - if (keyPaths && keyPaths.length > 0) { - setSelectedKeyPaths(keyPaths); - setSelectedItems(items); - performOnSelectOptions(keyPaths, items); - } else { - setSelectedKeyPaths([]); - setSelectedItems([]); - performOnSelectOptions(); + const handleNodeFocus = () => { + if (!focused && !showOptions) { + setFocused(true); } }; - const handleListDismiss = (setSelectorFocus?: boolean | undefined) => { - if (showOptions) { - setShowOptions(false); - triggerOptionDisplayCallback(false); + const handleNodeBlur = (e: React.FocusEvent) => { + if ( + focused && + !showOptions && + !nodeRef.current.contains(e.relatedTarget as Node) + ) { + setFocused(false); + onBlur?.(); } + }; - if (setSelectorFocus && selectorRef.current) { - selectorRef.current.focus(); - } + const handleOpen = () => { + setShowOptions(true); + triggerOptionDisplayCallback(true); + setFocused(true); }; - const handleWrapperBlur = () => { + const handleClose = (reason: OpenChangeReason) => { setShowOptions(false); triggerOptionDisplayCallback(false); - }; - // ============================================================================= - // HELPER FUNCTION - // ============================================================================= - const performOnSelectOptions = ( - keyPaths: string[][] = [], - items: SelectedItem<V1, V2, V3>[] = [] - ) => { - if (onSelectOptions) { - const returnValue = items.map((item) => item.value); - onSelectOptions(keyPaths, returnValue); + // click to toggle should not blur the input + if (reason !== "click") { + setFocused(false); + onBlur?.(); } }; + const handleDismiss = () => { + selectorRef.current.focus(); + setShowOptions(false); + triggerOptionDisplayCallback(false); + }; + + // ========================================================================= + // HELPER FUNCTION + // ========================================================================= const getDisplayValue = (): string => { const { label, value } = selectedItems[0]; @@ -195,111 +170,6 @@ export const InputNestedMultiSelect = <V1, V2, V3>({ } }; - const getItemAtKeyPath = (_keyPath: string[]) => { - const find = ( - items: CombinedOptionProps<V1, V2, V3>[], - keyPath: string[] - ): CombinedOptionProps<V1, V2, V3> => { - const [currentKey, ...nextKeyPath] = keyPath; - - if (isEmpty(items) || !currentKey) return undefined; - - const item = items.find((item) => item.key === currentKey); - - if (!item || !nextKeyPath.length) return item; - - return find(item.subItems, nextKeyPath); - }; - - const item = find(options, _keyPath); - - return item; - }; - - const isSubItem = (listItemKeyPath: string[], categoryKeyPath: string[]) => - JSON.stringify(categoryKeyPath) === - JSON.stringify(listItemKeyPath.slice(0, categoryKeyPath.length)); - - const getSubItemKeyPaths = ( - _item: CombinedOptionProps<V1, V2, V3>, - selectedKeyPath: string[] - ) => { - const targetKeyPaths: string[][] = []; - const parentKey = selectedKeyPath.slice(0, -1); - - const find = ( - item: CombinedOptionProps<V1, V2, V3>, - parentKey: string[] - ) => { - const releventKey = [...parentKey, item.key]; - - if (!item.subItems) { - targetKeyPaths.push(releventKey); - return; - } - - item.subItems.forEach((subItem) => find(subItem, releventKey)); - }; - - find(_item, parentKey); - - return targetKeyPaths; - }; - - const getSelectedItemFromKey = ( - options: CombinedOptionProps<V1, V2, V3>[], - keyPaths: string[][] - ) => { - let count = 0; - - const findSelectedItem = ( - items: CombinedOptionProps<V1, V2, V3>[], - keyPath: string[] - ): SelectedItem<V1, V2, V3> | undefined => { - const [currentKey, ...nextKeyPath] = keyPath; - - if (isEmpty(items) || !currentKey) { - return undefined; - } - - const item = items.find((item) => item.key === currentKey); - - if (!item) { - return undefined; - } - - const { label, value, subItems } = item; - - if (!nextKeyPath.length) { - const result = { - label, - value, - keyPath: keyPaths[count], - }; - count = count + 1; - return result; - } - - return findSelectedItem(subItems, nextKeyPath); - }; - - const selectedItems = []; - - for (let i = 0; i < keyPaths.length; i++) { - const item = findSelectedItem(options, keyPaths[i]); - - if (item) { - selectedItems.push({ - value: item.value, - label: item.label, - keyPath: item.keyPath, - }); - } - } - - return selectedItems; - }; - const truncateValue = (value: string) => { if (optionTruncationType === "middle") { let widthOfElement = 0; @@ -323,9 +193,56 @@ export const InputNestedMultiSelect = <V1, V2, V3>({ } }; - // ============================================================================= + const performOnSelectOptions = ( + keyPaths: string[][], + items: SelectedItem<V1 | V2 | V3>[] + ) => { + if (onSelectOptions) { + const returnValue = items.map((item) => item.value); + onSelectOptions(keyPaths, returnValue); + } + }; + + const getNewSelection = ( + item: NestedDropdownListLocalItem<V1 | V2 | V3> + ): SelectedItem<V1 | V2 | V3>[] => { + if (item.checked === true) { + // remove item or subitems + return selectedItems.filter((selectedItem) => { + const ancestorKeyPath = selectedItem.keyPath.slice( + 0, + item.keyPath.length + ); + return !isEqual(item.keyPath, ancestorKeyPath); + }); + } else { + // select item or all subitems + const nextSelection = [...selectedItems]; + const newItemsToAdd = item.hasSubItems + ? getSelectedSubItems(options, item.keyPath) + : [ + { + value: item.item.value, + label: item.item.label, + keyPath: item.keyPath, + }, + ]; + newItemsToAdd.forEach((addedItem) => { + if ( + !selectedItems.find((selectedItem) => + isEqual(selectedItem.keyPath, addedItem.keyPath) + ) + ) { + nextSelection.push(addedItem); + } + }); + return nextSelection; + } + }; + + // ========================================================================= // RENDER FUNCTION - // ============================================================================= + // ========================================================================= const renderLabel = () => { if (isEmpty(selectedItems)) { return ( @@ -343,68 +260,78 @@ export const InputNestedMultiSelect = <V1, V2, V3>({ }; const renderSelectorContent = () => ( - <> - <LabelContainer ref={labelContainerRef} $disabled={disabled}> - {renderLabel()} - </LabelContainer> - {!readOnly && ( - <IconContainer expanded={showOptions}> - <StyledChevronIcon /> - </IconContainer> - )} - </> + <LabelContainer ref={labelContainerRef} $disabled={disabled}> + {renderLabel()} + </LabelContainer> ); - const renderOptionList = () => { - if ((options && options.length > 0) || onRetry) { - return ( - <NestedDropdownList - data-testid="nested-dropdown-list" - multiSelect={true} - listItems={options} - listStyleWidth={listStyleWidth} - visible={showOptions} - mode={mode} - selectedKeyPaths={selectedKeyPaths} - itemsLoadState={optionsLoadState} - itemTruncationType={optionTruncationType} - enableSearch={enableSearch} - searchPlaceholder={searchPlaceholder} - hideNoResultsDisplay={hideNoResultsDisplay} - onDismiss={handleListDismiss} - onSelectAll={handleSelectAll} - onSelectItem={handleSelectItem} - onSearch={onSearch} - onRetry={onRetry} - /> - ); - } + const renderElement = () => { + return ( + <InputBox + className={className} + data-testid={testId} + id={id} + ref={nodeRef} + tabIndex={-1} + onFocus={handleNodeFocus} + onBlur={handleNodeBlur} + $focused={focused} + $disabled={disabled} + $readOnly={readOnly} + $error={error} + > + <ExpandableElement + ref={selectorRef} + disabled={disabled} + expanded={showOptions} + listboxId={internalId} + popupRole="tree" + readOnly={readOnly} + variant={variant} + > + {renderSelectorContent()} + </ExpandableElement> + </InputBox> + ); + }; - return null; + const renderDropdown = ({ elementWidth }: DropdownRenderProps) => { + return ( + <NestedDropdownList + listboxId={internalId} + listItems={options} + multiSelect + selectedKeyPaths={selectedKeyPaths} + itemsLoadState={optionsLoadState} + itemTruncationType={optionTruncationType} + enableSearch={enableSearch} + searchPlaceholder={searchPlaceholder} + hideNoResultsDisplay={hideNoResultsDisplay} + onSelectItem={handleListItemClick} + onSelectAll={handleSelectAll} + onRetry={onRetry} + onSearch={onSearch} + variant={variant} + mode={mode} + width={elementWidth} + /> + ); }; return ( - <DropdownWrapper - className={className} - show={showOptions} - error={error && !showOptions} - disabled={disabled} - readOnly={readOnly} - testId={testId} - onBlur={handleWrapperBlur} - > - <Selector - ref={selectorRef} - type="button" - data-testid={id || "selector"} - disabled={disabled} - onClick={handleSelectorClick} - {...otherProps} - > - {renderSelectorContent()} - </Selector> - {showOptions && <Divider />} - {renderOptionList()} - </DropdownWrapper> + <ElementWithDropdown + enabled={!readOnly && !disabled} + isOpen={showOptions} + renderElement={renderElement} + renderDropdown={renderDropdown} + onOpen={handleOpen} + onClose={handleClose} + onDismiss={handleDismiss} + clickToToggle + offset={8} + alignment={alignment} + fitAvailableHeight + customZIndex={dropdownZIndex} + /> ); }; diff --git a/src/input-nested-multi-select/types.ts b/src/input-nested-multi-select/types.ts index e61b3f15e..f829f7444 100644 --- a/src/input-nested-multi-select/types.ts +++ b/src/input-nested-multi-select/types.ts @@ -2,11 +2,7 @@ import { InputNestedSelectOptionsProps, InputNestedSelectSharedProps, } from "../input-nested-select"; -import { InputSelectSharedProps } from "../input-select"; -import { - DropdownSearchProps, - DropdownStyleProps, -} from "../shared/nested-dropdown-list/types"; +import { DropdownSearchProps } from "../shared/nested-dropdown-list/types"; // ============================================================================= // INPUT SELECT PROPS @@ -15,16 +11,17 @@ import { export interface InputNestedMultiSelectProps<V1, V2, V3> extends React.HTMLAttributes<HTMLElement>, InputNestedSelectOptionsProps<V1, V2, V3>, - Omit<InputSelectSharedProps<V1>, "options">, InputNestedSelectSharedProps<V1, V2, V3>, - DropdownSearchProps, - DropdownStyleProps { + DropdownSearchProps { /** Specifies key paths to select particular option label */ selectedKeyPaths?: string[][] | undefined; /** Called when a selection is made. Returns the key paths and values of selected items in the next selection state */ onSelectOptions?: | ((keyPaths: string[][], values: Array<V1 | V2 | V3>) => void) | undefined; + /** @deprecated this has no effect as the dropdown will automatically resize */ + listStyleWidth?: string | undefined; + onBlur?: (() => void) | undefined; } /** To be exposed for Form component inheritance */ diff --git a/src/input-nested-select/types.ts b/src/input-nested-select/types.ts index d567a07f0..88ad461f7 100644 --- a/src/input-nested-select/types.ts +++ b/src/input-nested-select/types.ts @@ -22,6 +22,9 @@ export interface InputNestedSelectSharedProps<V1, V2, V3> readOnly?: boolean | undefined; /** Specifies if items are expanded or collapsed when the dropdown is opened */ mode?: ExpandMode | undefined; + variant?: DropdownVariantType | undefined; + alignment?: DropdownAlignmentType | undefined; + dropdownZIndex?: number | undefined; /** Function to convert selected value into a string */ valueToStringFunction?: ((value: V1 | V2 | V3) => string) | undefined; } @@ -42,9 +45,6 @@ export interface InputNestedSelectProps<V1, V2, V3> onSelectOption?: | ((keyPath: string[], value: V1 | V2 | V3) => void) | undefined; - variant?: DropdownVariantType | undefined; - alignment?: DropdownAlignmentType | undefined; - dropdownZIndex?: number | undefined; /** @deprecated this has no effect as the dropdown will automatically resize */ listStyleWidth?: string | undefined; onBlur?: (() => void) | undefined; diff --git a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx index 0aae1a6d5..596f73493 100644 --- a/src/shared/dropdown-list-v2/nested-dropdown-list.tsx +++ b/src/shared/dropdown-list-v2/nested-dropdown-list.tsx @@ -203,6 +203,24 @@ export const NestedDropdownList = <T,>({ setFocusedIndex(index); }; + const handleOnSelectAll = () => { + const activeList = searchActive + ? filteredListItems + : unfilteredListItems; + + const keyPaths: string[][] = []; + const items: NestedDropdownListLocalItem<T>[] = []; + activeList.forEach((item) => { + if (item.hasSubItems) { + return; + } + keyPaths.push(item.keyPath); + items.push(item); + }); + + onSelectAll?.(keyPaths, items); + }; + // ========================================================================= // HELPER FUNCTIONS // ========================================================================= @@ -363,7 +381,7 @@ export const NestedDropdownList = <T,>({ return ( <SelectAllContainer> <SelectAllButton - onClick={onSelectAll} + onClick={handleOnSelectAll} type="button" $variant={variant} > diff --git a/src/shared/dropdown-list-v2/types.ts b/src/shared/dropdown-list-v2/types.ts index 4bba83f59..a131d9013 100644 --- a/src/shared/dropdown-list-v2/types.ts +++ b/src/shared/dropdown-list-v2/types.ts @@ -141,6 +141,11 @@ export interface NestedDropdownListProps<T> selectableCategory?: boolean | undefined; onSelectItem?: ((item: NestedDropdownListLocalItem<T>) => void) | undefined; - onSelectAll?: (() => void) | undefined; + onSelectAll?: + | (( + keyPaths: string[][], + items: NestedDropdownListLocalItem<T>[] + ) => void) + | undefined; onRetry?: (() => void) | undefined; } diff --git a/tests/input-nested-multi-select/input-nested-multi-select.spec.tsx b/tests/input-nested-multi-select/input-nested-multi-select.spec.tsx new file mode 100644 index 000000000..69ad683a4 --- /dev/null +++ b/tests/input-nested-multi-select/input-nested-multi-select.spec.tsx @@ -0,0 +1,427 @@ +import { + act, + render, + screen, + waitFor, + waitForElementToBeRemoved, + within, +} from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { InputNestedMultiSelect, L1OptionProps } from "../../src"; + +const FIELD_TESTID = "test"; +const SELECTOR_TESTID = "selector"; +const DROPDOWN_TESTID = "nested-dropdown-list"; +const OPTIONS: L1OptionProps<string, string, string>[] = [ + { + label: "Parent 1 item", + value: "1", + key: "1", + subItems: [ + { + label: "Parent 1.1 item", + value: "1.1", + key: "10", + subItems: [ + { + label: "Child 1.1.1 item", + value: "1.1.1", + key: "100", + }, + { + label: "Child 1.1.2 item", + value: "1.1.2", + key: "200", + }, + ], + }, + ], + }, +]; + +describe("InputNestedMultiSelect", () => { + beforeEach(() => { + jest.clearAllMocks(); + + global.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn(), + })); + }); + + it("should render the component", async () => { + render( + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + /> + ); + + expect(screen.getByText("Select")).toBeVisible(); + expect(screen.queryByTestId(DROPDOWN_TESTID)).not.toBeInTheDocument(); + }); + + it("should open dropdown list when selector is clicked", async () => { + const user = userEvent.setup(); + + render( + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + + expect(screen.queryByText("Parent 1 item")).toBeVisible(); + expect(screen.queryByText("Parent 1.1 item")).toBeVisible(); + expect(screen.queryByText("Child 1.1.1 item")).toBeVisible(); + }); + + it("should toggle dropdown list when selector is clicked", async () => { + const user = userEvent.setup(); + + render( + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + }); + }); + + it("should toggle list item correctly", async () => { + const user = userEvent.setup(); + const mockOnSelectOptions = jest.fn(); + + render( + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onSelectOptions={mockOnSelectOptions} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + + await user.click(screen.queryByText("Child 1.1.1 item")); + + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeInTheDocument(); + expect(mockOnSelectOptions).toHaveBeenCalledWith( + [["1", "10", "100"]], + ["1.1.1"] + ); + expect( + within(screen.queryByTestId(SELECTOR_TESTID)).queryByText( + "Child 1.1.1 item" + ) + ).toBeInTheDocument(); + + await user.click( + within(screen.queryByTestId(DROPDOWN_TESTID)).queryByText( + "Child 1.1.1 item" + ) + ); + + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeInTheDocument(); + expect(mockOnSelectOptions).toHaveBeenCalledWith([], []); + expect(screen.getByText("Select")).toBeVisible(); + }); + + it("should toggle parent item correctly", async () => { + const user = userEvent.setup(); + const mockOnSelectOptions = jest.fn(); + + render( + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onSelectOptions={mockOnSelectOptions} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + + await user.click(screen.queryByText("Parent 1.1 item")); + + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeInTheDocument(); + expect(mockOnSelectOptions).toHaveBeenCalledWith( + [ + ["1", "10", "100"], + ["1", "10", "200"], + ], + ["1.1.1", "1.1.2"] + ); + expect( + within(screen.queryByTestId(SELECTOR_TESTID)).queryByText( + "2 selected" + ) + ).toBeInTheDocument(); + + await user.click(screen.queryByText("Parent 1.1 item")); + + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeInTheDocument(); + expect(mockOnSelectOptions).toHaveBeenCalledWith([], []); + expect(screen.getByText("Select")).toBeVisible(); + }); + + it("should toggle mixed parent item correctly", async () => { + const user = userEvent.setup(); + const mockOnSelectOptions = jest.fn(); + + render( + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + selectedKeyPaths={[["1", "10", "100"]]} + onSelectOptions={mockOnSelectOptions} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + + await user.click(screen.queryByText("Parent 1.1 item")); + + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeInTheDocument(); + expect(mockOnSelectOptions).toHaveBeenCalledWith( + [ + ["1", "10", "100"], + ["1", "10", "200"], + ], + ["1.1.1", "1.1.2"] + ); + expect( + within(screen.queryByTestId(SELECTOR_TESTID)).queryByText( + "2 selected" + ) + ).toBeInTheDocument(); + + await user.click(screen.queryByText("Parent 1.1 item")); + + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeInTheDocument(); + expect(mockOnSelectOptions).toHaveBeenCalledWith([], []); + expect(screen.getByText("Select")).toBeVisible(); + }); + + describe("focus/blur behaviour", () => { + it("should call onBlur via outside click", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onBlur={mockOnBlur} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => screen.getByTestId(DROPDOWN_TESTID)); + await waitFor(() => + expect( + screen.queryByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveFocus() + ); + + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await user.click(document.body); + + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + + it("should dismiss dropdown if it is open", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onBlur={mockOnBlur} + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => screen.getByTestId(DROPDOWN_TESTID)); + await waitFor(() => + expect( + screen.queryByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveFocus() + ); + + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await user.click(document.body); + + await waitForElementToBeRemoved(() => + screen.queryByTestId(DROPDOWN_TESTID) + ); + + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + + it("should dismiss dropdown via Esc key", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onBlur={mockOnBlur} + /> + ); + + await act(async () => { + await user.click(screen.queryByTestId(FIELD_TESTID)); + }); + + await waitFor(() => screen.getByTestId(DROPDOWN_TESTID)); + await waitFor(() => + expect( + screen.queryByRole("treeitem", { name: "Parent 1 item" }) + ).toHaveFocus() + ); + + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.keyboard("{Escape}"); + }); + + await waitForElementToBeRemoved(() => + screen.queryByTestId(DROPDOWN_TESTID) + ); + + expect(screen.queryByTestId(SELECTOR_TESTID)).toHaveFocus(); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.click(document.body); + }); + + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + + it("should call onFocus and onBlur when cycling through the tab sequence", async () => { + const user = userEvent.setup(); + const mockOnBlur = jest.fn(); + + render( + <> + <button data-testid="before" /> + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + onBlur={mockOnBlur} + enableSearch + /> + <button data-testid="after" /> + </> + ); + + await user.keyboard("{Tab}"); + + expect(screen.getByTestId("before")).toHaveFocus(); + + await user.keyboard("{Tab} "); + + await waitFor(() => screen.getByTestId(DROPDOWN_TESTID)); + await waitFor(() => { + expect( + screen.getByLabelText("Enter text to search") + ).toHaveFocus(); + }); + expect(mockOnBlur).toHaveBeenCalledTimes(0); + + await act(async () => { + await user.keyboard("{Tab}"); + }); + + await waitForElementToBeRemoved(() => + screen.queryByTestId(DROPDOWN_TESTID) + ); + + expect(screen.getByTestId("after")).toHaveFocus(); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + + await act(async () => { + await user.keyboard("{Shift>}{Tab}{/Shift}"); + }); + + await waitFor(() => { + expect(screen.queryByTestId(SELECTOR_TESTID)).toHaveFocus(); + expect( + screen.queryByTestId(DROPDOWN_TESTID) + ).not.toBeInTheDocument(); + expect(mockOnBlur).toHaveBeenCalledTimes(1); + }); + }); + }); + + describe("search behaviour", () => { + it("should support default search for string options", async () => { + const user = userEvent.setup(); + + render( + <InputNestedMultiSelect + data-testid={FIELD_TESTID} + options={OPTIONS} + enableSearch + /> + ); + + await user.click(screen.queryByTestId(FIELD_TESTID)); + + await waitFor(() => { + expect(screen.queryByTestId(DROPDOWN_TESTID)).toBeVisible(); + }); + await waitFor(() => { + expect( + screen.getByLabelText("Enter text to search") + ).toHaveFocus(); + }); + + await act(async () => { + await user.keyboard("Child"); + }); + + const option = screen.getByText("1.1.1 item", { exact: false }); + expect(option.textContent).toEqual("Child 1.1.1 item"); + }); + }); +}); From c521286fd12c86a22b94a5e3628d4faf27a3edcd Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Wed, 1 Jan 2025 20:50:32 +0800 Subject: [PATCH 0781/1949] [FLOAT][RL] Add missing disabled style --- src/input-nested-select/input-nested-select.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/input-nested-select/input-nested-select.tsx b/src/input-nested-select/input-nested-select.tsx index a580dbd7c..e7c71fe73 100644 --- a/src/input-nested-select/input-nested-select.tsx +++ b/src/input-nested-select/input-nested-select.tsx @@ -207,7 +207,9 @@ export const InputNestedSelect = <V1, V2, V3>({ }; const renderSelectorContent = () => ( - <LabelContainer ref={labelContainerRef}>{renderLabel()}</LabelContainer> + <LabelContainer ref={labelContainerRef} $disabled={disabled}> + {renderLabel()} + </LabelContainer> ); const renderElement = () => { From f6087e0e93a7b95814053701725c054d3e3b0638 Mon Sep 17 00:00:00 2001 From: Raymond Tan <raymondpcxpert@gmail.com> Date: Tue, 14 Jan 2025 16:09:00 +0800 Subject: [PATCH 0782/1949] [BOOKINGSG-6561][RT] Set autoComplete='off' for OtpInput fields --- src/otp-input/otp-input.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/otp-input/otp-input.tsx b/src/otp-input/otp-input.tsx index d8689f94e..fcccf82d4 100644 --- a/src/otp-input/otp-input.tsx +++ b/src/otp-input/otp-input.tsx @@ -217,6 +217,7 @@ export const OtpInput = ({ error={!!errorMessage} onChange={handleChange(index)} onKeyDown={handleKeyDown(index)} + autoComplete="off" {...otherProps} /> ); From 1c86fe957dd5dcc315143e7e3159593adaa08a65 Mon Sep 17 00:00:00 2001 From: Raymond Tan <raymondpcxpert@gmail.com> Date: Tue, 14 Jan 2025 16:09:56 +0800 Subject: [PATCH 0783/1949] [BOOKINGSG-6561][RT] Add autoComplete prop for PhoneNumberInput --- src/phone-number-input/phone-number-input.tsx | 2 ++ src/phone-number-input/types.ts | 1 + stories/form/form-phone-number-input/props-table.tsx | 5 +++++ 3 files changed, 8 insertions(+) diff --git a/src/phone-number-input/phone-number-input.tsx b/src/phone-number-input/phone-number-input.tsx index faa958b79..0a7175b46 100644 --- a/src/phone-number-input/phone-number-input.tsx +++ b/src/phone-number-input/phone-number-input.tsx @@ -19,6 +19,7 @@ export const PhoneNumberInput = ({ onHideOptions, onShowOptions, placeholder, + autoComplete, ...otherProps }: PhoneNumberInputProps) => { // ============================================================================= @@ -161,6 +162,7 @@ export const PhoneNumberInput = ({ placeholder={placeholder} addon={getAddonProps()} inputMode="numeric" + autoComplete={autoComplete} {...otherProps} /> ); diff --git a/src/phone-number-input/types.ts b/src/phone-number-input/types.ts index 8f34dafba..9d593c642 100644 --- a/src/phone-number-input/types.ts +++ b/src/phone-number-input/types.ts @@ -54,4 +54,5 @@ export interface PhoneNumberInputProps extends React.AriaAttributes { placeholder?: string | undefined; readOnly?: boolean | undefined; id?: string | undefined; + autoComplete?: string | undefined; } diff --git a/stories/form/form-phone-number-input/props-table.tsx b/stories/form/form-phone-number-input/props-table.tsx index 943b72f43..8fea4c842 100644 --- a/stories/form/form-phone-number-input/props-table.tsx +++ b/stories/form/form-phone-number-input/props-table.tsx @@ -109,6 +109,11 @@ const DATA: ApiTableSectionProps[] = [ "The value containing the country code and phone number", propTypes: ["PhoneNumberInputValue"], }, + { + name: "autoComplete", + description: "The autoComplete attribute of the input field", + propTypes: ["string"], + }, { name: "onChange", description: From 7b7179b4d8fbcc57ec852d4ccba76f95285930f8 Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Tue, 14 Jan 2025 22:56:02 +0800 Subject: [PATCH 0784/1949] [MISC][RL] Link to docs for autoComplete attribute --- .../form/form-phone-number-input/props-table.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/stories/form/form-phone-number-input/props-table.tsx b/stories/form/form-phone-number-input/props-table.tsx index 8fea4c842..5f58d0e6f 100644 --- a/stories/form/form-phone-number-input/props-table.tsx +++ b/stories/form/form-phone-number-input/props-table.tsx @@ -111,7 +111,19 @@ const DATA: ApiTableSectionProps[] = [ }, { name: "autoComplete", - description: "The autoComplete attribute of the input field", + description: ( + <> + The{" "} + <a + href="https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete" + rel="noreferrer" + target="_blank" + > + autoComplete + </a>{" "} + attribute of the input field + </> + ), propTypes: ["string"], }, { From da6c59059de711b8af936641dd5ff00a5eba62be Mon Sep 17 00:00:00 2001 From: Raymond Tan <raymondpcxpert@gmail.com> Date: Wed, 15 Jan 2025 13:31:43 +0800 Subject: [PATCH 0785/1949] [BOOKINGSG-6561][RT] Add autoComplete prop for UnitNumberInput --- src/unit-number/types.ts | 1 + src/unit-number/unit-number-input.tsx | 3 +++ .../form/form-unit-number-input/props-table.tsx | 17 +++++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/src/unit-number/types.ts b/src/unit-number/types.ts index cbe4427b5..809966be4 100644 --- a/src/unit-number/types.ts +++ b/src/unit-number/types.ts @@ -16,6 +16,7 @@ export interface UnitNumberInputProps extends React.AriaAttributes { name?: string | undefined; error?: boolean | undefined; disabled?: boolean | undefined; + autoComplete?: string | undefined; onChange?: ((value: string) => void) | undefined; /** * Function that returns the raw values in the UnitNumberInput on change in an array format diff --git a/src/unit-number/unit-number-input.tsx b/src/unit-number/unit-number-input.tsx index abbcd48c3..1584c7c21 100644 --- a/src/unit-number/unit-number-input.tsx +++ b/src/unit-number/unit-number-input.tsx @@ -24,6 +24,7 @@ export const UnitNumberInput = ({ onBlurRaw, readOnly, placeholder = "00-8888", + autoComplete, ...otherProps }: UnitNumberInputProps) => { // ============================================================================= @@ -280,6 +281,7 @@ export const UnitNumberInput = ({ ? "" : getPlaceholder(placeholder)[0] } + autoComplete={autoComplete} /> <UnitNumberDivider $inactive={floorValue.length === 0}> - @@ -304,6 +306,7 @@ export const UnitNumberInput = ({ ? "" : getPlaceholder(placeholder)[1] } + autoComplete={autoComplete} /> </> ); diff --git a/stories/form/form-unit-number-input/props-table.tsx b/stories/form/form-unit-number-input/props-table.tsx index 236abab3a..4760a75de 100644 --- a/stories/form/form-unit-number-input/props-table.tsx +++ b/stories/form/form-unit-number-input/props-table.tsx @@ -87,6 +87,23 @@ const DATA: ApiTableSectionProps[] = [ description: "The test identifier of the component", propTypes: ["string"], }, + { + name: "autoComplete", + description: ( + <> + The{" "} + <a + href="https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete" + rel="noreferrer" + target="_blank" + > + autoComplete + </a>{" "} + attribute of the input field + </> + ), + propTypes: ["string"], + }, { name: "onChange", description: ( From 0d13e04c9475679ec9cf04433e4ce6878cfd8e29 Mon Sep 17 00:00:00 2001 From: roll <quek.ruoling@gmail.com> Date: Wed, 15 Jan 2025 21:25:30 +0800 Subject: [PATCH 0786/1949] [MISC][RL] v2.9.0-canary.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 45af76fbd..b7af7c0fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lifesg/react-design-system", - "version": "2.9.0-canary.2", + "version": "2.9.0-canary.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lifesg/react-design-system", - "version": "2.9.0-canary.2", + "version": "2.9.0-canary.3", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index d9f1e11b4..153b1edb4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lifesg/react-design-system", - "version": "2.9.0-canary.2", + "version": "2.9.0-canary.3", "description": "A component design system for LifeSG web apps", "main": "dist/cjs/index.js", "module": "dist/index.js", From 8c1965ee8c60f94d5ca10b976f5c3a9b1e628170 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Fri, 17 Jan 2025 14:58:59 +0800 Subject: [PATCH 0787/1949] [V3][RL] Migrate CountdownTimer --- src/countdown-timer/countdown-timer.style.tsx | 63 ++++++++++++------- src/countdown-timer/countdown-timer.tsx | 19 +++--- .../countdown-timer.stories.tsx | 2 +- stories/countdown-timer/doc-elements.tsx | 6 +- stories/countdown-timer/props-table.tsx | 4 +- 5 files changed, 54 insertions(+), 40 deletions(-) diff --git a/src/countdown-timer/countdown-timer.style.tsx b/src/countdown-timer/countdown-timer.style.tsx index 59b34409d..d54ebf49a 100644 --- a/src/countdown-timer/countdown-timer.style.tsx +++ b/src/countdown-timer/countdown-timer.style.tsx @@ -1,7 +1,14 @@ +import { ClockIcon } from "@lifesg/react-icons"; import styled, { css } from "styled-components"; -import { V2_Color } from "../v2_color"; -import { V2_TextStyleHelper } from "../v2_text"; -import { V2_MediaQuery } from "../v2_media"; +import { + Border, + Colour, + Font, + FontSpec, + MediaQuery, + Radius, + Spacing, +} from "../theme"; // ============================================================================= // STYLE TYPES @@ -24,24 +31,25 @@ export const Wrapper = styled.div` `; export const BaseCountdown = styled.div<CountdownStyleProps>` - ${V2_TextStyleHelper.getTextStyle("H4", "semibold")} + ${Font["body-baseline-regular"]} display: flex; align-items: center; - padding: 0.5rem 1rem; - border-radius: 4px; - color: ${V2_Color.Primary}; - border: 1px solid ${V2_Color.Primary}; - background-color: ${V2_Color.Neutral[8]}; - - ${V2_MediaQuery.MaxWidth.mobileL} { - padding: 1rem; + padding: ${Spacing["spacing-8"]} ${Spacing["spacing-16"]}; + border-radius: ${Radius["sm"]}; + color: ${Colour["text-primary"]}; + border: ${Border["width-010"]} ${Border["solid"]}; + border-color: ${Colour["border-primary"]}; + background-color: ${Colour["bg"]}; + + ${MediaQuery.MaxWidth.sm} { + padding: ${Spacing["spacing-16"]}; } ${(props) => { if (props.$warn) { return css` - color: ${V2_Color.Validation.Red.Text}; - border: 1px solid ${V2_Color.Validation.Red.Border}; + color: ${Colour["text-error"]}; + border-color: ${Colour["border-error"]}; `; } }} @@ -61,32 +69,39 @@ export const FixedCountdown = styled(BaseCountdown)` return css` /* style object will be converted to px */ ${{ top: $top, left: $left, right: $right }} - box-shadow: 0px 0px 4px 1px - ${$warn - ? V2_Color.Validation.Red.Border - : V2_Color.Accent.Light[2]}; - ${V2_MediaQuery.MaxWidth.mobileL} { + box-shadow: 0px 0px 4px 1px rgb(from ${$warn + ? Colour["border-error"] + : Colour["border-primary-subtle"]} r g b / 50%); + + ${MediaQuery.MaxWidth.sm} { left: 0; right: 0; border-radius: 0; border-left: none; border-right: none; + box-shadow: none; } `; }} `; export const TimeLeft = styled.div` - ${V2_TextStyleHelper.getTextStyle("H4", "bold")} - margin-left: 0.5rem; - margin-right: 1.5rem; + font-weight: ${FontSpec["weight-bold"]}; + margin-left: ${Spacing["spacing-8"]}; + margin-right: ${Spacing["spacing-24"]}; - ${V2_MediaQuery.MaxWidth.mobileL} { - margin-right: 3rem; + ${MediaQuery.MaxWidth.sm} { + margin-right: ${Spacing["spacing-48"]}; } `; export const Timer = styled.div` + font-weight: ${FontSpec["weight-semibold"]}; margin-left: auto; `; + +export const TimerIcon = styled(ClockIcon)<CountdownStyleProps>` + color: ${(props) => + props.$warn ? Colour["icon-error"] : Colour["icon-primary"]}; +`; diff --git a/src/countdown-timer/countdown-timer.tsx b/src/countdown-timer/countdown-timer.tsx index d7834f47d..26b145e02 100644 --- a/src/countdown-timer/countdown-timer.tsx +++ b/src/countdown-timer/countdown-timer.tsx @@ -1,19 +1,19 @@ import throttle from "lodash/throttle"; import { useEffect, useRef, useState } from "react"; -import { useMediaQuery } from "react-responsive"; import { useInView } from "react-intersection-observer"; -import { useTimer } from "./use-timer"; -import { CountdownTimerProps } from "./types"; +import { useMediaQuery } from "react-responsive"; +import { TimeHelper } from "../util/time-helper"; +import { MediaWidths } from "../v2_spec/media-spec"; import { Countdown, FixedCountdown, TimeLeft, Timer, + TimerIcon, Wrapper, } from "./countdown-timer.style"; -import { TimeHelper } from "../util/time-helper"; -import { ClockIcon } from "@lifesg/react-icons"; -import { MediaWidths } from "../v2_spec/media-spec"; +import { CountdownTimerProps } from "./types"; +import { useTimer } from "./use-timer"; export const CountdownTimer = ({ className, @@ -49,6 +49,7 @@ export const CountdownTimer = ({ initialInView: true, }); const isVisible = !fixed || inView; + const warn = remainingSeconds <= notifyTimer; const isMobile = useMediaQuery({ maxWidth: MediaWidths.mobileL, @@ -147,7 +148,7 @@ export const CountdownTimer = ({ return ( <> - <ClockIcon /> + <TimerIcon $warn={warn} /> <TimeLeft>Time left:</TimeLeft> <Timer> {minutes} {m} {String(seconds).padStart(2, "0")} {s} @@ -164,7 +165,7 @@ export const CountdownTimer = ({ ref={wrapperRef} inert={isVisible ? undefined : ""} $visible={isVisible} - $warn={remainingSeconds <= notifyTimer} + $warn={warn} > {renderTimer()} </Countdown> @@ -185,7 +186,7 @@ export const CountdownTimer = ({ <FixedCountdown data-testid={testId} data-id="fixed-countdown-wrapper" - $warn={remainingSeconds <= notifyTimer} + $warn={warn} $top={offsetY} $left={left} $right={right} diff --git a/stories/countdown-timer/countdown-timer.stories.tsx b/stories/countdown-timer/countdown-timer.stories.tsx index df13d2d27..9d37723f0 100644 --- a/stories/countdown-timer/countdown-timer.stories.tsx +++ b/stories/countdown-timer/countdown-timer.stories.tsx @@ -7,7 +7,7 @@ import { CountdownView } from "./doc-elements"; type Component = typeof CountdownTimer; const meta: Meta<Component> = { - title: "Modules/CountdownTimer", + title: "Feedback indicators/CountdownTimer", component: CountdownTimer, }; diff --git a/stories/countdown-timer/doc-elements.tsx b/stories/countdown-timer/doc-elements.tsx index 43b03d8e1..9a2f23ae3 100644 --- a/stories/countdown-timer/doc-elements.tsx +++ b/stories/countdown-timer/doc-elements.tsx @@ -1,12 +1,12 @@ +import { MediaQuery } from "src/theme"; import styled from "styled-components"; -import { V2_MediaQuery } from "../../src/v2_media"; const Page = styled.div` height: 160vh; width: 65vw; margin: auto; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { width: 100vw; } `; @@ -16,7 +16,7 @@ const Section = styled.div` justify-content: space-between; gap: 2rem; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { flex-direction: column; align-items: center; } diff --git a/stories/countdown-timer/props-table.tsx b/stories/countdown-timer/props-table.tsx index 6a03bc8a3..d01c85f03 100644 --- a/stories/countdown-timer/props-table.tsx +++ b/stories/countdown-timer/props-table.tsx @@ -1,6 +1,4 @@ -import React from "react"; -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; +import { ApiTable, ApiTableSectionProps } from "stories/storybook-common"; const DATA: ApiTableSectionProps[] = [ { From 2913b85d60ee626cef80ef9775e85e500dd7dd0f Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Fri, 17 Jan 2025 17:02:22 +0800 Subject: [PATCH 0788/1949] [V3][RL] Fix dash border generation, refactor theme helpers --- src/theme/border/border-utils.ts | 34 ++++--- src/theme/border/specs/lifesg-border-set.ts | 13 +-- src/theme/border/theme-helper.ts | 94 ++++++++++++------- src/theme/border/types.ts | 9 +- .../theme/doc-elements/doc-border-display.tsx | 26 +++-- tests/theme/theme-border.spec.tsx | 86 +++++------------ 6 files changed, 126 insertions(+), 136 deletions(-) diff --git a/src/theme/border/border-utils.ts b/src/theme/border/border-utils.ts index bcd7a5291..42436df06 100644 --- a/src/theme/border/border-utils.ts +++ b/src/theme/border/border-utils.ts @@ -1,27 +1,31 @@ import { css } from "styled-components"; +import { ColourSemantic } from "../colour-semantic/theme-helper"; import { StyledComponentProps } from "../helpers"; +import { BorderValues } from "./theme-helper"; export const dashedBorderStyle = - ( - thickness: number | ((props: StyledComponentProps) => number), - colour: string | ((props: StyledComponentProps) => string) - ) => + (options?: { + thickness?: number | ((props: StyledComponentProps) => string); + radius?: number | ((props: StyledComponentProps) => string); + colour?: string | ((props: StyledComponentProps) => string); + }) => (props: StyledComponentProps) => { - // Resolve thickness + const { thickness, radius, colour } = options || {}; + // Resolve design tokens to their underlying value const resolvedThickness = - typeof thickness === "function" ? thickness(props) : thickness; - - // Resolve color + (typeof thickness === "function" ? thickness(props) : thickness) ?? + BorderValues["width-010"](props); + const resolvedRadius = + (typeof radius === "function" ? radius(props) : radius) ?? 0; const resolvedColor = - typeof colour === "function" ? colour(props) : colour; + (typeof colour === "function" ? colour(props) : colour) ?? + ColourSemantic.border(props); - const encodedColor = encodeURIComponent(resolvedColor); - const strokeWidth = resolvedThickness + 1; + const svg = `<svg width='100%' height='100%' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' fill='none' rx='${resolvedRadius}' ry='${resolvedRadius}' stroke='${resolvedColor}' stroke-width='${resolvedThickness}' stroke-dasharray='4, 8' stroke-dashoffset='0' stroke-linecap='square'/></svg>`; + const encodedSvg = encodeURIComponent(svg); return css` - background-color: transparent; - height: ${resolvedThickness}px; - background-repeat: repeat-x; - background-image: url('data:image/svg+xml,<svg width="8" height="${resolvedThickness}px" viewBox="0 0 8 1" xmlns="http://www.w3.org/2000/svg"><line x1="2" y1="1" x2="6" y2="1" stroke="${encodedColor}" stroke-width="${strokeWidth}" stroke-dasharray="4 4" /></svg>'); + background-image: url("data:image/svg+xml,${encodedSvg}"); + border-radius: ${resolvedRadius}; `; }; diff --git a/src/theme/border/specs/lifesg-border-set.ts b/src/theme/border/specs/lifesg-border-set.ts index 4ed1824ba..7a31b0809 100644 --- a/src/theme/border/specs/lifesg-border-set.ts +++ b/src/theme/border/specs/lifesg-border-set.ts @@ -1,7 +1,5 @@ -import { BorderSet } from "../types"; import { dashedBorderStyle } from "../border-utils"; -import { StyledComponentProps } from "../../helpers"; -import { ColourSemantic } from "../../colour-semantic/theme-helper"; +import { BorderSet } from "../types"; export const LifeSgBorderSet: BorderSet = { "width-010": 1, @@ -10,12 +8,5 @@ export const LifeSgBorderSet: BorderSet = { solid: "solid", - "dashed-default": ( - thickness: number | ((props: StyledComponentProps) => number) = 1, - colour: - | string - | ((props: StyledComponentProps) => string) = ColourSemantic.border - ) => { - return dashedBorderStyle(thickness, colour); - }, + "dashed-default": dashedBorderStyle, }; diff --git a/src/theme/border/theme-helper.ts b/src/theme/border/theme-helper.ts index 4f2313dfc..6fea73d92 100644 --- a/src/theme/border/theme-helper.ts +++ b/src/theme/border/theme-helper.ts @@ -1,4 +1,4 @@ -import { css } from "styled-components"; +import { CSSProp } from "styled-components"; import { StyledComponentProps, getCollection, getValue } from "../helpers"; import { BorderScheme, ThemeCollectionSpec } from "../types"; import { LifeSgBorderSet } from "./specs/lifesg-border-set"; @@ -11,53 +11,77 @@ const BorderSpec: ThemeCollectionSpec<BorderCollectionMap, BorderScheme> = { defaultValue: "lifesg", }; -export const getBorder = (key: keyof BorderSet) => { - return (...args: any[]) => - (props: StyledComponentProps) => { - const theme = props.theme; +export const getBorderWidth = ( + key: "width-010" | "width-020" | "width-040" +) => { + return (props: StyledComponentProps) => { + const theme = props.theme; + const borderSet: BorderSet = getCollection( + BorderSpec, + theme.borderScheme + ); + + if (theme.overrides && theme.overrides.border) { + return `${getValue(borderSet, key, theme.overrides.border)}px`; + } else { + return `${borderSet[key]}px`; + } + }; +}; + +export const getBorder = (key: "solid") => { + return (props: StyledComponentProps): string => { + const theme = props.theme; + const borderSet: BorderSet = getCollection( + BorderSpec, + theme.borderScheme + ); + + // check for an override + const borderValue = + theme.overrides && theme.overrides.border + ? getValue(borderSet, key, theme.overrides.border) + : borderSet[key]; + + // If function, resolve with props + if (typeof borderValue === "function") { + return (borderValue as (props: any) => string)(props); + } + + return borderValue as string; + }; +}; + +const isStyledProps = (args: any): args is [StyledComponentProps] => + args.length === 1 && "theme" in args[0]; + +export const getBorderStyle = (key: "dashed-default") => { + return ( + ...args: Parameters<BorderSet[typeof key]> | [StyledComponentProps] + ) => + (props: StyledComponentProps): CSSProp => { + const resolvedOptions = isStyledProps(args) ? [] : args; + const resolvedStyledProps = isStyledProps(args) ? args[0] : props; + + const theme = resolvedStyledProps.theme; const borderSet: BorderSet = getCollection( BorderSpec, theme.borderScheme ); - // Check for an override const borderValue = theme.overrides && theme.overrides.border ? getValue(borderSet, key, theme.overrides.border) : borderSet[key]; - // If function resolve it with props - if (typeof borderValue === "function") { - // Check if props being passed as the arg - const isArgsProps = args.length === 1 && "theme" in args[0]; - const resolvedArgs = isArgsProps - ? [undefined, undefined] - : args; - - const result = (borderValue as (...args: any[]) => any)( - ...(resolvedArgs.length - ? resolvedArgs - : [undefined, undefined]) - )(props); - - return css` - ${result} - `; - } - - // If number make it return a pixel string - if (typeof borderValue === "number") { - return `${borderValue}px`; - } - - return borderValue; + return borderValue(...resolvedOptions)(resolvedStyledProps); }; }; export const BorderValues = { - "width-010": getBorder("width-010"), - "width-020": getBorder("width-020"), - "width-040": getBorder("width-040"), + "width-010": getBorderWidth("width-010"), + "width-020": getBorderWidth("width-020"), + "width-040": getBorderWidth("width-040"), solid: getBorder("solid"), - "dashed-default": getBorder("dashed-default"), + "dashed-default": getBorderStyle("dashed-default"), }; diff --git a/src/theme/border/types.ts b/src/theme/border/types.ts index d52b691d4..003598034 100644 --- a/src/theme/border/types.ts +++ b/src/theme/border/types.ts @@ -7,10 +7,11 @@ export interface BorderSet { "width-020": number; "width-040": number; solid: string; - "dashed-default": ( - thickness?: number | ((props: StyledComponentProps) => number), - colour?: string | ((props: StyledComponentProps) => string) - ) => (props: StyledComponentProps) => CSSProp; + "dashed-default": (options?: { + thickness?: number | ((props: StyledComponentProps) => string); + radius?: number | ((props: StyledComponentProps) => string); + colour?: string | ((props: StyledComponentProps) => string); + }) => (props: StyledComponentProps) => CSSProp; } export type BorderCollectionMap = { diff --git a/stories/theme/doc-elements/doc-border-display.tsx b/stories/theme/doc-elements/doc-border-display.tsx index ca3d0d827..49449d69f 100644 --- a/stories/theme/doc-elements/doc-border-display.tsx +++ b/stories/theme/doc-elements/doc-border-display.tsx @@ -1,5 +1,5 @@ -import { getBorder } from "src/theme/border/theme-helper"; -import { BorderSet, ThemeSpec } from "src/theme/types"; +import { getBorder, getBorderWidth } from "src/theme/border/theme-helper"; +import { ThemeSpec } from "src/theme/types"; import styled, { ThemeProvider, useTheme } from "styled-components"; import { Border } from "../../../src/theme"; @@ -26,13 +26,15 @@ export const BorderDisplay = ({ theme }: BorderDisplayProps) => { ); }; -interface BorderCollectionProps { - token: keyof BorderSet; +interface BorderWidthCollectionProps { + token: Parameters<typeof getBorderWidth>[0]; } -const BorderWidthCollection = ({ token }: BorderCollectionProps) => { +const BorderWidthCollection = ({ token }: BorderWidthCollectionProps) => { const theme = useTheme(); - const value = getBorder(token)()({ theme }); + const value = getBorderWidth(token)({ + theme, + }); return ( <Row key={token}> @@ -47,9 +49,13 @@ const BorderWidthCollection = ({ token }: BorderCollectionProps) => { ); }; -const BorderStyleCollection = ({ token }: BorderCollectionProps) => { +interface BorderStyleCollectionProps { + token: Parameters<typeof getBorder>[0]; +} + +const BorderStyleCollection = ({ token }: BorderStyleCollectionProps) => { const theme = useTheme(); - const value = getBorder(token)()({ theme }); + const value = getBorder(token)({ theme }); return ( <Row key={token}> @@ -71,7 +77,7 @@ const DashedBorderStyleCollection = () => { <code>dashed-default</code> </div> <div> - <code>{"(thickness, color) => style"}</code> + <code>{"({thickness, colour, radius}) => style"}</code> </div> <div> <DashedBorderExample /> @@ -140,7 +146,7 @@ const BorderStyleExample = styled.div<BorderStyleProps>` const DashedBorderExample = styled.div` height: 24px; width: 48px; - ${Border["dashed-default"](1, "tomato")} + ${Border["dashed-default"]({ colour: "tomato" })} `; const Divider = styled.div` diff --git a/tests/theme/theme-border.spec.tsx b/tests/theme/theme-border.spec.tsx index 5fd56605a..297f56496 100644 --- a/tests/theme/theme-border.spec.tsx +++ b/tests/theme/theme-border.spec.tsx @@ -1,8 +1,8 @@ +import { render } from "@testing-library/react"; import "jest-styled-components"; +import { Border } from "src/theme"; +import { ThemeSpec } from "src/theme/types"; import styled, { ThemeProvider } from "styled-components"; -import { render } from "@testing-library/react"; -import { ThemeSpec } from "../../src/theme/types"; -import { Border } from "../../src"; import { MOCK_THEME } from "./mock-theme-data"; const StyledBorderComponent = styled.div` @@ -12,13 +12,9 @@ const StyledBorderComponent = styled.div` describe("Border Theming Test", () => { it("should apply correct border styles based on the theme", () => { - // Constants for border-top (dashed-default) - const thickness = "1px"; - const color = "%23DDE1E2"; - const strokeWidth = 2; - // Stroke width is thickeness + 1 - - const expectedSvg = `<svg width="8" height="${thickness}" viewBox="0 0 8 1" xmlns="http://www.w3.org/2000/svg"><line x1="2" y1="1" x2="6" y2="1" stroke="${color}" stroke-width="${strokeWidth}" stroke-dasharray="4 4" /></svg>`; + const expectedSvg = encodeURIComponent( + `<svg width='100%' height='100%' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' fill='none' rx='0' ry='0' stroke='#DDE1E2' stroke-width='1px' stroke-dasharray='4, 8' stroke-dashoffset='0' stroke-linecap='square'/></svg>` + ); const { container } = render( <ThemeProvider theme={MOCK_THEME}> @@ -31,32 +27,28 @@ describe("Border Theming Test", () => { ).border; expect(receivedBorderStyle).toBe("1px solid"); - - expect(container.firstChild).toHaveStyleRule( - "background-color", - "transparent" - ); - expect(container.firstChild).toHaveStyleRule("height", thickness); - expect(container.firstChild).toHaveStyleRule( - "background-repeat", - "repeat-x" - ); expect(container.firstChild).toHaveStyleRule( "background-image", - `url('data:image/svg+xml,${expectedSvg}')` + `url("data:image/svg+xml,${expectedSvg}")` ); }); - it("should apply correct border styles when overriding border color in dashed-default", () => { + it("should apply correct border styles when setting options for dashed-default", () => { + const colour = "red"; + const strokeWidth = 2; + const radius = 4; + const StyledBorderComponentDash = styled.div` - border: ${Border["width-010"]} ${Border.solid}; - ${Border["dashed-default"](2, "red")}; + ${Border["dashed-default"]({ + thickness: strokeWidth, + colour, + radius, + })}; `; - const dashThickness = "2px"; - const dashColor = "red"; - const dashStrokeWidth = parseInt(dashThickness) + 1; - const dashExpectedSvg = `<svg width="8" height="${dashThickness}" viewBox="0 0 8 1" xmlns="http://www.w3.org/2000/svg"><line x1="2" y1="1" x2="6" y2="1" stroke="${dashColor}" stroke-width="${dashStrokeWidth}" stroke-dasharray="4 4" /></svg>`; + const expectedSvg = encodeURIComponent( + `<svg width='100%' height='100%' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' fill='none' rx='${radius}' ry='${radius}' stroke='${colour}' stroke-width='${strokeWidth}' stroke-dasharray='4, 8' stroke-dashoffset='0' stroke-linecap='square'/></svg>` + ); const { container } = render( <ThemeProvider theme={MOCK_THEME}> @@ -64,24 +56,9 @@ describe("Border Theming Test", () => { </ThemeProvider> ); - const receivedBorderStyle = getComputedStyle( - container.firstElementChild - ).border; - - expect(receivedBorderStyle).toBe("1px solid"); - - expect(container.firstChild).toHaveStyleRule( - "background-color", - "transparent" - ); - expect(container.firstChild).toHaveStyleRule("height", dashThickness); - expect(container.firstChild).toHaveStyleRule( - "background-repeat", - "repeat-x" - ); expect(container.firstChild).toHaveStyleRule( "background-image", - `url('data:image/svg+xml,${dashExpectedSvg}')` + `url("data:image/svg+xml,${expectedSvg}")` ); }); @@ -95,12 +72,9 @@ describe("Border Theming Test", () => { }, }; - // Constants for border-top (dashed-default) - const thickness = "1px"; - const color = "%23DDE1E2"; - const strokeWidth = 2; - - const expectedSvg = `<svg width="8" height="${thickness}" viewBox="0 0 8 1" xmlns="http://www.w3.org/2000/svg"><line x1="2" y1="1" x2="6" y2="1" stroke="${color}" stroke-width="${strokeWidth}" stroke-dasharray="4 4" /></svg>`; + const expectedSvg = encodeURIComponent( + `<svg width='100%' height='100%' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' fill='none' rx='0' ry='0' stroke='#DDE1E2' stroke-width='3px' stroke-dasharray='4, 8' stroke-dashoffset='0' stroke-linecap='square'/></svg>` + ); const { container } = render( <ThemeProvider theme={mockTheme}> @@ -113,19 +87,9 @@ describe("Border Theming Test", () => { ).border; expect(receivedBorderStyle).toBe("3px solid"); - - expect(container.firstChild).toHaveStyleRule( - "background-color", - "transparent" - ); - expect(container.firstChild).toHaveStyleRule("height", thickness); - expect(container.firstChild).toHaveStyleRule( - "background-repeat", - "repeat-x" - ); expect(container.firstChild).toHaveStyleRule( "background-image", - `url('data:image/svg+xml,${expectedSvg}')` + `url("data:image/svg+xml,${expectedSvg}")` ); }); }); From 7fe08b8819c2c71d127b9b10d52b485970483019 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling <ruoling.quek@ufinity.com> Date: Fri, 17 Jan 2025 17:38:18 +0800 Subject: [PATCH 0789/1949] [V3][RL] Migrate FileDownload --- src/file-download/file-download.styles.tsx | 36 ++--- src/file-download/file-download.tsx | 4 +- .../file-list-card/file-list-card.styles.tsx | 138 +++++++++--------- .../file-list-card/file-list-card.tsx | 59 +++----- stories/file-download/file-download.mdx | 6 + .../file-download/file-download.stories.tsx | 60 +++++++- stories/file-download/props-table.tsx | 4 +- 7 files changed, 171 insertions(+), 136 deletions(-) diff --git a/src/file-download/file-download.styles.tsx b/src/file-download/file-download.styles.tsx index 692bddf4d..a758f422b 100644 --- a/src/file-download/file-download.styles.tsx +++ b/src/file-download/file-download.styles.tsx @@ -1,8 +1,6 @@ import styled, { css } from "styled-components"; -import { V2_Color } from "../v2_color"; import { applyHtmlContentStyle } from "../shared/html-content/html-content"; -import { V2_Text } from "../v2_text"; -import { V2_MediaQuery } from "../v2_media"; +import { Border, Colour, Font, MediaQuery, Radius, Spacing } from "../theme"; // ============================================================================= // STYLING @@ -19,14 +17,16 @@ export const Container = styled.div<StyleProps>` ${(props) => { if (props.$border) { - const color = encodeURIComponent(V2_Color.Neutral[5](props)); return css` - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='4' ry='4' stroke='${color}' stroke-width='4' stroke-dasharray='8%2c 8' stroke-dashoffset='8' stroke-linecap='round'/%3e%3c/svg%3e"); - border-radius: 4px; - padding: 2rem; + ${Border["dashed-default"]({ + radius: Radius["sm"], + thickness: Border["width-040"], + colour: Colour["border"], + })} + padding: ${Spacing["spacing-32"]}; - ${V2_MediaQuery.MaxWidth.mobileL} { - padding: 2rem 1.25rem; + ${MediaQuery.MaxWidth.sm} { + padding: ${Spacing["spacing-32"]} ${Spacing["spacing-20"]}; } `; } @@ -39,23 +39,25 @@ export const TextContainer = styled.div` margin-bottom: 2rem; `; -export const Title = styled(V2_Text.H4)` - margin-bottom: 0.5rem; +export const Title = styled.p` + ${Font["header-xs-regular"]} + color: ${Colour["text"]}; + margin-bottom: ${Spacing["spacing-8"]}; `; export const TitleContainer = styled.div` - color: ${V2_Color.Neutral[1]}; - ${applyHtmlContentStyle({ textSize: "body-baseline" })} + ${applyHtmlContentStyle({ textSize: "header-xs" })} + color: ${Colour["text"]}; `; -export const Description = styled(V2_Text.BodySmall)` - margin-bottom: 0; - color: ${V2_Color.Neutral[3]}; +export const Description = styled.p` + ${Font["body-md-regular"]} + color: ${Colour["text-subtler"]}; `; export const DescriptionContainer = styled.div` - color: ${V2_Color.Neutral[3]}; ${applyHtmlContentStyle({ textSize: "body-md" })} + color: ${Colour["text-subtler"]}; `; export const ListWrapper = styled.ul` diff --git a/src/file-download/file-download.tsx b/src/file-download/file-download.tsx index 8f158b168..d1a02c1d3 100644 --- a/src/file-download/file-download.tsx +++ b/src/file-download/file-download.tsx @@ -38,7 +38,7 @@ export const FileDownload = ({ } if (typeof title === "string") { - return <Title weight="regular">{title}; + return {title}; } return {title}; @@ -50,7 +50,7 @@ export const FileDownload = ({ } if (typeof description === "string") { - return {description}; + return {description}; } return {description}; diff --git a/src/file-download/file-list-card/file-list-card.styles.tsx b/src/file-download/file-list-card/file-list-card.styles.tsx index 03bb5bc4d..ac90073be 100644 --- a/src/file-download/file-list-card/file-list-card.styles.tsx +++ b/src/file-download/file-list-card/file-list-card.styles.tsx @@ -1,11 +1,9 @@ import styled, { css } from "styled-components"; -import { MainStyleProps } from "../../button"; -import { V2_Color } from "../../v2_color"; import { IconButton as DSIconButton } from "../../icon-button"; -import { V2_MediaQuery } from "../../v2_media"; import { ComponentLoadingSpinner } from "../../shared/component-loading-spinner/component-loading-spinner"; -import { V2_Text } from "../../v2_text"; import { ImageWithFallback } from "../../shared/image-with-fallback/image-with-fallback"; +import { lineClampCss } from "../../shared/styles"; +import { Border, Colour, Font, MediaQuery, Radius, Spacing } from "../../theme"; // ============================================================================= // STYLE INTERFACES @@ -21,6 +19,7 @@ interface ContentSectionStyleProps { export const Item = styled.li` display: flex; align-items: center; + width: 100%; border: none; @@ -30,19 +29,23 @@ export const Item = styled.li` `; export const Box = styled.div` - background: ${V2_Color.Accent.Light[6]}; - border: 1px solid ${V2_Color.Neutral[5]}; - border-radius: 4px; - padding: 1rem 2rem; display: flex; align-items: center; + width: 100%; + padding: ${Spacing["spacing-16"]} ${Spacing["spacing-32"]}; cursor: pointer; - ${V2_MediaQuery.MaxWidth.mobileL} { - padding: 1rem; + + background: ${Colour["bg-primary-subtlest"]}; + border: ${Border["width-010"]} ${Border["solid"]} ${Colour["border"]}; + border-radius: ${Radius["sm"]}; + + ${MediaQuery.MaxWidth.lg} { + padding: ${Spacing["spacing-16"]}; } + :hover { - background: ${V2_Color.Accent.Light[5]}; + background: ${Colour["bg-hover"]}; } `; @@ -51,16 +54,16 @@ export const ContentSection = styled.div` flex: 1; align-items: center; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.lg} { flex-direction: column; - width: 100%; align-items: flex-start; + width: 100%; } ${(props) => { if (props.$hasThumbnail) { return css` - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.lg} { flex-direction: row; align-items: center; } @@ -73,7 +76,9 @@ export const NameSection = styled.div` display: flex; flex: 1; flex-direction: column; + width: 100%; + overflow-wrap: break-word; word-break: break-all; white-space: normal; @@ -84,7 +89,7 @@ export const ExtendedNameSection = styled.div` flex: 1; align-items: center; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.lg} { flex-direction: column; align-items: flex-start; width: 100%; @@ -93,39 +98,47 @@ export const ExtendedNameSection = styled.div` export const FileSizeSection = styled.div` display: flex; - width: 5rem; - margin-left: 0.5rem; justify-content: flex-end; - ${V2_MediaQuery.MaxWidth.mobileL} { + + width: 5rem; + margin-left: ${Spacing["spacing-8"]}; + + ${Font["body-md-regular"]} + color: ${Colour["text"]}; + + ${MediaQuery.MaxWidth.lg} { + justify-content: flex-start; + width: 100%; margin-left: 0; - margin-top: 0.5rem; - justify-content: flex-start; + margin-top: ${Spacing["spacing-8"]}; + + ${lineClampCss(2)} } `; -export const ItemText = styled(V2_Text.BodySmall)` - ${V2_MediaQuery.MaxWidth.mobileL} { - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; - white-space: normal; +export const ItemNameText = styled.div` + ${Font["body-md-regular"]} + color: ${Colour["text"]}; + + ${MediaQuery.MaxWidth.lg} { + ${lineClampCss(2)} } `; -export const ItemDescriptionText = styled(ItemText)` - margin-top: 0.25rem; +export const ItemDescriptionText = styled(ItemNameText)` + ${Font["body-md-regular"]} + margin-top: ${Spacing["spacing-4"]}; `; -export const BaseErrorMessage = styled(V2_Text.XSmall)` - font-size: 0.875rem !important; - color: ${V2_Color.Validation.Red.Text}; +const BaseErrorMessage = styled.div` + ${Font["body-sm-semibold"]} + color: ${Colour["text-error"]}; `; export const DesktopErrorMessage = styled(BaseErrorMessage)` - margin-top: 0.25rem; - ${V2_MediaQuery.MaxWidth.mobileL} { + margin-top: ${Spacing["spacing-4"]}; + ${MediaQuery.MaxWidth.lg} { display: none; visibility: hidden; } @@ -134,50 +147,26 @@ export const DesktopErrorMessage = styled(BaseErrorMessage)` export const MobileErrorMessage = styled(BaseErrorMessage)` display: none; visibility: hidden; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.lg} { display: block; visibility: visible; - margin-top: 0.5rem; + margin-top: ${Spacing["spacing-8"]}; } `; -export const Spinner = styled(ComponentLoadingSpinner)` - ${(props) => { - let color = V2_Color.Primary(props); - switch (props.$buttonStyle) { - case "secondary": - case "light": - case "link": - break; - case "disabled": - color = V2_Color.Neutral[3](props); - break; - default: - color = V2_Color.Neutral[8](props); - break; - } - - return css` - #inner1, - #inner2, - #inner3, - #inner4 { - border-color: ${color} transparent transparent transparent; - } - `; - }} +export const Spinner = styled(ComponentLoadingSpinner)` + color: ${Colour["icon-primary"]}; `; export const ActionContainer = styled.div` - width: 6rem; - margin-left: 2rem; display: flex; justify-content: flex-end; align-items: center; - ${V2_MediaQuery.MaxWidth.mobileL} { - width: fit-content; - margin-left: 1rem; + margin-left: ${Spacing["spacing-32"]}; + + ${MediaQuery.MaxWidth.lg} { + margin-left: ${Spacing["spacing-16"]}; } `; @@ -185,31 +174,34 @@ export const IconButton = styled(DSIconButton)` min-width: unset; :not(:last-child) { - margin-right: 1rem; + margin-right: ${Spacing["spacing-16"]}; } `; export const ThumbnailContainer = styled.div` width: auto; - margin-right: 2rem; + margin-right: ${Spacing["spacing-32"]}; + display: flex; flex-shrink: 0; flex-direction: column; justify-content: center; - ${V2_MediaQuery.MaxWidth.mobileL} { - margin-right: 1rem; + + ${MediaQuery.MaxWidth.lg} { + margin-right: ${Spacing["spacing-16"]}; } `; export const Thumbnail = styled(ImageWithFallback)` + border-radius: ${Radius["sm"]}; + border: ${Border["width-010"]} ${Border["solid"]} ${Colour["border"]}; + width: 6rem; height: 6rem; aspect-ratio: 1; - border-radius: 4px; - border: 1px solid ${V2_Color.Neutral[5]}; object-fit: cover; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.lg} { width: 4rem; height: 4rem; } diff --git a/src/file-download/file-list-card/file-list-card.tsx b/src/file-download/file-list-card/file-list-card.tsx index 233c1336d..94a15c718 100644 --- a/src/file-download/file-list-card/file-list-card.tsx +++ b/src/file-download/file-list-card/file-list-card.tsx @@ -1,8 +1,9 @@ import { DownloadIcon } from "@lifesg/react-icons"; import { memo, useEffect, useRef, useState } from "react"; import { useMediaQuery } from "react-responsive"; +import { useTheme } from "styled-components"; import { FileUploadHelper } from "../../file-upload/helper"; -import { V2_MediaWidths } from "../../v2_media"; +import { Breakpoint } from "../../theme"; import { StringHelper } from "../../util"; import { ActionContainer, @@ -13,7 +14,7 @@ import { FileSizeSection, IconButton, Item, - ItemText, + ItemNameText, MobileErrorMessage, NameSection, Spinner, @@ -40,16 +41,15 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { const [isLoading, setIsLoading] = useState(false); const [isError, setIsError] = useState(false); const fileSize = FileUploadHelper.formatFileSizeDisplay(size); - const isMobile = useMediaQuery({ - maxWidth: V2_MediaWidths.mobileL, - }); + const theme = useTheme(); + const mobileBreakpoint = Breakpoint["sm-max"]({ theme }); + const isMobile = useMediaQuery({ maxWidth: mobileBreakpoint }); const [displayText, setDisplayText] = useState(); const containerRef = useRef(); // ========================================================================= // EFFECTS // ========================================================================= - useEffect(() => { if (!containerRef.current) return; isMobile @@ -60,18 +60,6 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { // ========================================================================= // EVENT HANDLERS // ========================================================================= - - const getTruncatedText = (value: string) => { - if (!truncateText) return value; - - const widthOfElement = - containerRef && containerRef.current - ? containerRef.current.getBoundingClientRect().width - : 0; - - return StringHelper.truncateTwoLines(value, widthOfElement, 16, 1.5); - }; - const handleDownload = async () => { if (!ready || isLoading) { return; @@ -91,17 +79,25 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { // ========================================================================= // HELPER FUNCTIONS // ========================================================================= + const getTruncatedText = (value: string) => { + if (!truncateText) return value; + + const widthOfElement = + containerRef && containerRef.current + ? containerRef.current.getBoundingClientRect().width + : 0; + + return StringHelper.truncateTwoLines(value, widthOfElement, 16, 1.5); + }; // ========================================================================= // RENDER FUNCTIONS // ========================================================================= const renderNameDescription = () => ( <> - - {displayText} - + {displayText} {isError && ( - + {errorMessage ? errorMessage : "Something went wrong"} )} @@ -118,11 +114,9 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { {renderNameDescription()} - - {fileSize ? fileSize : "-"} - + {fileSize ? fileSize : "-"} {isError && ( - + {errorMessage ? errorMessage : "Something went wrong"} )} @@ -133,11 +127,9 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { const renderDefault = () => ( <> {renderNameDescription()} - - {fileSize ? fileSize : "-"} - + {fileSize ? fileSize : "-"} {isError && ( - + {errorMessage ? errorMessage : "Something went wrong"} )} @@ -171,12 +163,7 @@ const Component = ({ fileItem, onDownload }: FileListItemProps) => { aria-label={`download ${name}`} > {isLoading || !ready ? ( - + ) : ( )} diff --git a/stories/file-download/file-download.mdx b/stories/file-download/file-download.mdx index 86eb90489..b2624b843 100644 --- a/stories/file-download/file-download.mdx +++ b/stories/file-download/file-download.mdx @@ -34,6 +34,12 @@ This can be used in scenarios where an image needs time to be generated and is n +## Default text styling + +The title and description support styling for commonly used markup such as `` or ``. + + + ## Component API diff --git a/stories/file-download/file-download.stories.tsx b/stories/file-download/file-download.stories.tsx index dc88051ba..26ae2def6 100644 --- a/stories/file-download/file-download.stories.tsx +++ b/stories/file-download/file-download.stories.tsx @@ -1,18 +1,18 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useEffect, useState } from "react"; -import { FileDownload, FileItemDownloadProps } from "../../src/file-download"; +import { FileDownload, FileItemDownloadProps } from "src/file-download"; type Component = typeof FileDownload; const meta: Meta = { - title: "Modules/FileDownload", + title: "Selection and input/FileDownload", component: FileDownload, }; export default meta; export const Default: StoryObj = { - render: () => { + render: (_args) => { const [fileItems] = useState([ { id: "1", @@ -64,7 +64,7 @@ export const Default: StoryObj = { }; export const ErrorDisplay: StoryObj = { - render: () => { + render: (_args) => { const [fileItems] = useState([ { id: "1", @@ -94,7 +94,7 @@ export const ErrorDisplay: StoryObj = { }; export const WithCustomError: StoryObj = { - render: () => { + render: (_args) => { const [fileItems] = useState([ { id: "1", @@ -160,6 +160,56 @@ export const DownloadReadiness: StoryObj = { }, }; +export const TextStyling: StoryObj = { + render: (_args) => { + const [fileItems] = useState([ + { + id: "1", + name: "lorem.pdf", + mimeType: "application/pdf", + size: 150000, + filePath: + "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf", + }, + ]); + + return ( + +

    + You can add bold text, links{" "} + and list items to the title: +

    +
      +
    • List item
    • +
    +
      +
    1. List item
    2. +
    + + } + description={ + <> +

    + You can also add bold text,{" "} + links and list items to the description: +

    +
      +
    • List item
    • +
    +
      +
    1. List item
    2. +
    + + } + /> + ); + }, +}; + // The following code is meant for simulation purposes and is not intended for production const handleDemoDownload = async (file: FileItemDownloadProps) => { diff --git a/stories/file-download/props-table.tsx b/stories/file-download/props-table.tsx index 61ab3708f..f30b20e04 100644 --- a/stories/file-download/props-table.tsx +++ b/stories/file-download/props-table.tsx @@ -1,10 +1,8 @@ -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; +import { ApiTable, ApiTableSectionProps } from "stories/storybook-common"; const DATA: ApiTableSectionProps[] = [ { attributes: [ - // Component specific { name: "className", description: "The class selector of the component", From 4740384d489096dcbc4a1ec71543408b7aeb8168 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Fri, 17 Jan 2025 18:06:28 +0800 Subject: [PATCH 0790/1949] [V3][RL] Migrate FileUpload --- src/file-upload/dropzone.styles.tsx | 44 +++++++++---------- src/file-upload/file-item-edit.styles.tsx | 37 ++++++++-------- src/file-upload/file-item-edit.tsx | 2 +- .../file-list-item-thumbnail.tsx | 24 +++++----- src/file-upload/file-list.styles.tsx | 15 ++++--- stories/file-upload/file-upload.stories.tsx | 9 ++-- stories/file-upload/props-table.tsx | 4 +- 7 files changed, 67 insertions(+), 68 deletions(-) diff --git a/src/file-upload/dropzone.styles.tsx b/src/file-upload/dropzone.styles.tsx index d8aa48afe..bfd2a8569 100644 --- a/src/file-upload/dropzone.styles.tsx +++ b/src/file-upload/dropzone.styles.tsx @@ -1,8 +1,7 @@ -import styled, { css } from "styled-components"; -import { V2_Color } from "../v2_color"; -import { V2_MediaQuery } from "../v2_media"; -import { V2_Text } from "../v2_text"; import { CloudArrowUpFillIcon } from "@lifesg/react-icons/cloud-arrow-up-fill"; +import styled, { css } from "styled-components"; +import { Border, Colour, MediaQuery, Radius, Spacing } from "../theme"; +import { Typography } from "../typography"; // ============================================================================= // STYLE INTERFACES @@ -22,14 +21,16 @@ export const Container = styled.div` ${(props) => { if (props.$border) { - const color = encodeURIComponent(V2_Color.Neutral[5](props)); return css` - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='4' ry='4' stroke='${color}' stroke-width='4' stroke-dasharray='8%2c 8' stroke-dashoffset='8' stroke-linecap='round'/%3e%3c/svg%3e"); - border-radius: 4px; - padding: 2rem; + ${Border["dashed-default"]({ + radius: Radius["sm"], + thickness: Border["width-040"], + colour: Colour["border"], + })} + padding: ${Spacing["spacing-32"]}; - ${V2_MediaQuery.MaxWidth.mobileL} { - padding: 2rem 1.25rem; + ${MediaQuery.MaxWidth.sm} { + padding: ${Spacing["spacing-32"]} ${Spacing["spacing-20"]}; } `; } @@ -46,28 +47,27 @@ export const DragOverlay = styled.div` left: 0; width: 100%; height: 100%; - background: ${V2_Color.Accent.Light[5]}; + + background: ${Colour["bg-primary-subtler"]}; + ${Border["dashed-default"]({ + radius: Radius["sm"], + thickness: Border["width-040"], + colour: Colour["border-primary"], + })} + display: flex; flex-direction: column; justify-content: center; align-items: center; - - ${(props) => { - const color = encodeURIComponent(V2_Color.Primary(props)); - return css` - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='4' ry='4' stroke='${color}' stroke-width='4' stroke-dasharray='8%2c 8' stroke-dashoffset='8' stroke-linecap='square'/%3e%3c/svg%3e"); - border-radius: 4px; - `; - }} `; -export const OverlayText = styled(V2_Text.BodySmall)` - color: ${V2_Color.Primary}; +export const OverlayText = styled(Typography.BodyMD)` + color: ${Colour["text-primary"]}; text-align: center; `; export const OverlayIcon = styled(CloudArrowUpFillIcon)` - color: ${V2_Color.Primary}; + color: ${Colour["icon-primary"]}; height: 4rem; width: 4rem; `; diff --git a/src/file-upload/file-item-edit.styles.tsx b/src/file-upload/file-item-edit.styles.tsx index 0f75fb57e..096351097 100644 --- a/src/file-upload/file-item-edit.styles.tsx +++ b/src/file-upload/file-item-edit.styles.tsx @@ -1,8 +1,7 @@ import styled, { css } from "styled-components"; -import { V2_MediaQuery } from "../v2_media/media"; import { Button } from "../button/button"; -import { V2_Text } from "../v2_text/text"; -import { V2_Color } from "../v2_color/color"; +import { Border, Colour, MediaQuery, Spacing } from "../theme"; +import { Typography } from "../typography"; // ============================================================================= // STYLE INTERFACE @@ -17,18 +16,18 @@ interface ActionButtonSectionStyleProps { export const Item = styled.li` display: flex; flex-direction: column; - padding: 2rem 0; + padding: ${Spacing["spacing-32"]} 0; background: transparent; :not(:last-child) { - border-bottom: 1px solid ${V2_Color.Neutral[5]}; + border-bottom: ${Border["width-010"]} ${Border.solid} ${Colour.border}; } `; export const ContentSection = styled.div` display: flex; align-items: flex-start; - margin-bottom: 1rem; + margin-bottom: ${Spacing["spacing-16"]}; width: 100%; `; @@ -44,37 +43,39 @@ export const NameSection = styled.div` justify-content: space-between; margin-bottom: 1rem; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { flex-direction: column; justify-content: flex-start; } `; -export const FileNameText = styled(V2_Text.BodySmall)` +export const FileNameText = styled(Typography.BodyMD)` display: flex; flex: 1; - margin-right: 1rem; + margin-right: ${Spacing["spacing-16"]}; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { margin-right: 0; - margin-bottom: 0.5rem; + margin-bottom: ${Spacing["spacing-8"]}; } `; -export const FileSizeText = styled(V2_Text.BodySmall)``; +export const FileSizeText = styled(Typography.BodyMD)``; export const ActionButtonsSection = styled.div` display: flex; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { flex-direction: column; } ${(props) => { if (props.$thumbnail) { return css` - margin-left: 8rem; // 6rem width + 2rem gap + margin-left: calc( + 6rem + ${Spacing["spacing-32"]} + ); // 6rem width + 2rem gap - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { margin-left: 0; } `; @@ -85,13 +86,13 @@ export const ActionButtonsSection = styled.div` export const ActionButton = styled(Button.Small)` width: 7.5rem; :not(:last-of-type) { - margin-right: 1rem; + margin-right: ${Spacing["spacing-16"]}; } - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { width: 100%; :not(:last-of-type) { - margin-bottom: 1rem; + margin-bottom: ${Spacing["spacing-16"]}; } } `; diff --git a/src/file-upload/file-item-edit.tsx b/src/file-upload/file-item-edit.tsx index 2a225bc34..a860a0308 100644 --- a/src/file-upload/file-item-edit.tsx +++ b/src/file-upload/file-item-edit.tsx @@ -11,9 +11,9 @@ import { Item, NameSection, } from "./file-item-edit.styles"; +import { FileListItemThumbnail } from "./file-list-item/file-list-item-thumbnail"; import { FileUploadHelper } from "./helper"; import { FileItemProps } from "./types"; -import { FileListItemThumbnail } from "./file-list-item/file-list-item-thumbnail"; interface Props { fileItem: FileItemProps; diff --git a/src/file-upload/file-list-item/file-list-item-thumbnail.tsx b/src/file-upload/file-list-item/file-list-item-thumbnail.tsx index 876c85446..71b4a1e8f 100644 --- a/src/file-upload/file-list-item/file-list-item-thumbnail.tsx +++ b/src/file-upload/file-list-item/file-list-item-thumbnail.tsx @@ -1,8 +1,6 @@ import styled from "styled-components"; -import { V2_Color } from "../../v2_color"; -import { V2_MediaQuery } from "../../v2_media"; import { ImageWithFallback } from "../../shared/image-with-fallback/image-with-fallback"; -import { V2_TextStyleHelper } from "../../v2_text"; +import { Border, Colour, Font, MediaQuery, Radius, Spacing } from "../../theme"; interface Props { thumbnailImageDataUrl: string; @@ -17,7 +15,7 @@ export const FileListItemThumbnail = ({ renderReplaceButton, onReplaceClick, }: Props) => { - const handleReplace = (event: React.MouseEvent) => { + const handleReplace = () => { if (onReplaceClick) { onReplaceClick(); } @@ -43,7 +41,7 @@ export const FileListItemThumbnail = ({ // ============================================================================= export const Container = styled.div` width: auto; - margin-right: 2rem; + margin-right: ${Spacing["spacing-32"]}; display: flex; flex-shrink: 0; flex-direction: column; @@ -54,11 +52,11 @@ export const Thumbnail = styled(ImageWithFallback)` width: 6rem; height: 6rem; aspect-ratio: 1; - border-radius: 4px; - border: 1px solid ${V2_Color.Neutral[5]}; + border-radius: ${Radius["sm"]}; + border: ${Border["width-010"]} ${Border["solid"]} ${Colour["border"]}; object-fit: cover; - ${V2_MediaQuery.MaxWidth.mobileL} { + ${MediaQuery.MaxWidth.sm} { width: 4rem; height: 4rem; } @@ -67,13 +65,15 @@ export const Thumbnail = styled(ImageWithFallback)` export const ReplaceButton = styled.button` width: 100%; height: 1.625rem; - margin-top: 0.5rem; + margin-top: ${Spacing["spacing-8"]}; border: none; background: transparent; cursor: pointer; - ${V2_TextStyleHelper.getTextStyle("BodySmall", "semibold")}; - color: ${V2_Color.Primary}; + + ${Font["body-md-semibold"]} + color: ${Colour["text-primary"]}; + :hover { - color: ${V2_Color.PrimaryDark}; + color: ${Colour["text-hover"]}; } `; diff --git a/src/file-upload/file-list.styles.tsx b/src/file-upload/file-list.styles.tsx index efc0497fe..a10859abc 100644 --- a/src/file-upload/file-list.styles.tsx +++ b/src/file-upload/file-list.styles.tsx @@ -1,5 +1,5 @@ -import styled, { css } from "styled-components"; -import { V2_Color } from "../v2_color"; +import styled from "styled-components"; +import { Border, Colour, Spacing } from "../theme"; // ============================================================================= // STYLE INTERFACE @@ -13,19 +13,20 @@ interface ListWrapperStyleProps { // ============================================================================= export const ListWrapper = styled.ul` list-style-type: none; - margin-bottom: ${(props) => (props.$readOnly ? "0" : "2rem")}; + margin-bottom: ${(props) => + props.$readOnly ? "0" : Spacing["spacing-32"]}; `; export const EditableItemsContainer = styled.li` - border-top: 1px solid ${V2_Color.Neutral[5]}; - border-bottom: 1px solid ${V2_Color.Neutral[5]}; + border-top: ${Border["width-010"]} ${Border.solid} ${Colour.border}; + border-bottom: ${Border["width-010"]} ${Border.solid} ${Colour.border}; :not(:last-child) { - margin-bottom: 2rem; + margin-bottom: ${Spacing["spacing-32"]}; } :not(:first-child) { - margin-top: 2rem; + margin-top: ${Spacing["spacing-32"]}; } ul { diff --git a/stories/file-upload/file-upload.stories.tsx b/stories/file-upload/file-upload.stories.tsx index 472d6b62f..67e8d0c04 100644 --- a/stories/file-upload/file-upload.stories.tsx +++ b/stories/file-upload/file-upload.stories.tsx @@ -6,7 +6,7 @@ import { SimpleIdGenerator } from "src/util/simple-id-generator"; type Component = typeof FileUpload; const meta: Meta = { - title: "Modules/FileUpload", + title: "Selection and input/FileUpload", component: FileUpload, }; @@ -282,8 +282,8 @@ export const SortableFileItems: StoryObj = { }; export const ReadonlyState: StoryObj = { - render: () => { - const [fileItems, setFileItems] = useState([ + render: (_args) => { + const [fileItems] = useState([ { id: "1", name: "img-1.jpg", @@ -312,7 +312,7 @@ export const ReadonlyState: StoryObj = { }; export const TextStyling: StoryObj = { - render: (args) => { + render: (_args) => { const [fileItems, setFileItems] = useState([]); const handleChange = (files) => { const newFileItems = files.map((file) => { @@ -365,7 +365,6 @@ export const TextStyling: StoryObj = { } - {...args} /> ); }, diff --git a/stories/file-upload/props-table.tsx b/stories/file-upload/props-table.tsx index 79fab9e61..85b11bfb3 100644 --- a/stories/file-upload/props-table.tsx +++ b/stories/file-upload/props-table.tsx @@ -1,6 +1,4 @@ -import React from "react"; -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; +import { ApiTable, ApiTableSectionProps } from "stories/storybook-common"; const DATA: ApiTableSectionProps[] = [ { From c123796b7d9df3df4433dc3bebb6617bbe1dfd50 Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Tue, 21 Jan 2025 14:05:14 +0800 Subject: [PATCH 0791/1949] [V3][RL] Migrate Filter --- .../addons/filter-item-checkbox.styles.tsx | 56 ++++++--------- src/filter/addons/filter-item-checkbox.tsx | 8 +-- src/filter/filter-item-page.styles.tsx | 4 +- src/filter/filter-item.styles.tsx | 70 ++++++++++--------- src/filter/filter-item.tsx | 2 +- src/filter/filter.styles.tsx | 56 ++++++++------- src/filter/filter.tsx | 23 +++--- 7 files changed, 107 insertions(+), 112 deletions(-) diff --git a/src/filter/addons/filter-item-checkbox.styles.tsx b/src/filter/addons/filter-item-checkbox.styles.tsx index c1b1051ae..e9894f1f0 100644 --- a/src/filter/addons/filter-item-checkbox.styles.tsx +++ b/src/filter/addons/filter-item-checkbox.styles.tsx @@ -1,9 +1,7 @@ import styled, { css } from "styled-components"; -import { Button } from "../../button/button"; -import { V2_Color } from "../../v2_color/color"; -import { V2_MediaQuery } from "../../v2_media/media"; -import { ToggleIcon } from "../../shared/toggle-icon/toggle-icon"; -import { V2_TextStyleHelper } from "../../v2_text/helper"; +import { Button } from "../../button"; +import { Checkbox } from "../../checkbox"; +import { Colour, Font, MediaQuery, Spacing } from "../../theme"; import { Toggle } from "../../toggle"; import { FilterItem } from "../filter-item"; @@ -12,19 +10,16 @@ export const StyledFilterItem = styled(FilterItem)` [data-id="content-container"] { position: relative; // to get the item position relative to this parent - padding: 0.5rem 0.5rem 0; + padding: ${Spacing["spacing-8"]} ${Spacing["spacing-8"]} 0; - ${V2_MediaQuery.MaxWidth.tablet} { - padding: 1rem 1.25rem 0.5rem; + ${MediaQuery.MaxWidth.lg} { + padding: ${Spacing["spacing-16"]} ${Spacing["spacing-20"]} + ${Spacing["spacing-8"]}; } } [data-id="minimise-button"] { - margin: 0.5rem 1.25rem 0; - - ${V2_MediaQuery.MaxWidth.tablet} { - margin: 0.5rem 1.25rem 0; - } + margin: ${Spacing["spacing-8"]} ${Spacing["spacing-20"]} 0; } `; @@ -32,10 +27,10 @@ export const Group = styled.div` display: flex; flex-direction: column; - ${V2_MediaQuery.MaxWidth.tablet} { + ${MediaQuery.MaxWidth.lg} { flex-direction: row; flex-wrap: wrap; - gap: 1rem; + gap: ${Spacing["spacing-16"]}; } `; @@ -47,31 +42,25 @@ export const Item = styled.label<{ $visible: boolean; $selected: boolean }>` position: relative; width: 100%; min-height: 1.5rem; - padding: 0.5rem; + padding: ${Spacing["spacing-8"]} ${Spacing["spacing-12"]}; cursor: pointer; - ${V2_TextStyleHelper.getTextStyle("BodySmall", "regular")} + ${Font["body-md-regular"]} + color: ${Colour["text"]}; ${(props) => props.$selected && css` - color: ${V2_Color.Primary}; + color: ${Colour["text-selected"]}; `} -`; -export const Input = styled.input` - appearance: none; + ${MediaQuery.MaxWidth.lg} { + padding: ${Spacing["spacing-8"]}; + } `; -export const StyledToggleIcon = styled(ToggleIcon)` - height: 1.5rem; - width: 1.5rem; +export const StyledCheckbox = styled(Checkbox)` flex-shrink: 0; - - ${Input}:focus-visible + & { - outline: 2px solid ${V2_Color.Primary}; - outline-offset: -2px; - border-radius: 4px; - } + margin-right: ${Spacing["spacing-8"]}; `; export const StyledToggle = styled(Toggle)<{ $visible: boolean }>` @@ -81,9 +70,10 @@ export const StyledToggle = styled(Toggle)<{ $visible: boolean }>` export const SelectAllButton = styled(Button.Small)` height: fit-content; padding: 0; - margin: 1rem 0 0.5rem 0.75rem; + margin: ${Spacing["spacing-16"]} 0 ${Spacing["spacing-8"]} + ${Spacing["spacing-12"]}; - ${V2_MediaQuery.MaxWidth.tablet} { - margin: 0 0 1rem 0; + ${MediaQuery.MaxWidth.lg} { + margin: 0 0 ${Spacing["spacing-16"]} 0; } `; diff --git a/src/filter/addons/filter-item-checkbox.tsx b/src/filter/addons/filter-item-checkbox.tsx index 0f010b897..adbeb48de 100644 --- a/src/filter/addons/filter-item-checkbox.tsx +++ b/src/filter/addons/filter-item-checkbox.tsx @@ -4,12 +4,11 @@ import { FilterContext } from "../filter-context"; import { FilterItemCheckboxProps } from "../types"; import { Group, - Input, Item, SelectAllButton, + StyledCheckbox, StyledFilterItem, StyledToggle, - StyledToggleIcon, } from "./filter-item-checkbox.styles"; export const FilterItemCheckbox = ({ @@ -155,12 +154,11 @@ export const FilterItemCheckbox = ({ $selected={checked} ref={index === 4 ? lastVisibleElement : undefined} > - - {optionLabel} ); diff --git a/src/filter/filter-item-page.styles.tsx b/src/filter/filter-item-page.styles.tsx index 307a02f37..45f7b2cd3 100644 --- a/src/filter/filter-item-page.styles.tsx +++ b/src/filter/filter-item-page.styles.tsx @@ -1,12 +1,12 @@ import styled from "styled-components"; -import { V2_Color } from "../v2_color/color"; +import { Colour } from "../theme"; // ============================================================================= // FILTER ITEM PAGE STYLES // ============================================================================= export const FilterItemPageContainer = styled.div` - background-color: ${V2_Color.Neutral[8]}; + background-color: ${Colour["bg"]}; height: 100%; width: 100%; display: flex; diff --git a/src/filter/filter-item.styles.tsx b/src/filter/filter-item.styles.tsx index 560dfd7a3..6dc6f2f8a 100644 --- a/src/filter/filter-item.styles.tsx +++ b/src/filter/filter-item.styles.tsx @@ -1,11 +1,9 @@ import { ChevronDownIcon } from "@lifesg/react-icons/chevron-down"; import { animated } from "react-spring"; import styled from "styled-components"; -import { Button } from "../button/button"; -import { V2_Color } from "../v2_color/color"; -import { V2_MediaQuery } from "../v2_media/media"; +import { Button } from "../button"; import { ClickableIcon } from "../shared/clickable-icon"; -import { V2_Text, V2_TextStyleHelper } from "../v2_text"; +import { Colour, Font, FontSpec, MediaQuery, Motion, Spacing } from "../theme"; // ============================================================================= // STYLES INTERFACE @@ -20,27 +18,29 @@ interface DividerStyleProps { $showMobileDivider: boolean; } +interface MinimisableContentProps { + $height?: number; + $minimisable: boolean; +} + // ============================================================================= // FILTER ITEM STYLES // ============================================================================= export const FilterItemWrapper = styled.div` background-color: ${(props) => - props.$collapsible - ? V2_Color.Neutral[7](props) - : V2_Color.Neutral[8](props)}; - - ${V2_MediaQuery.MaxWidth.tablet} { - background-color: ${V2_Color.Neutral[7]}; + props.$collapsible ? Colour["bg-strong"] : Colour["bg"]}; + ${MediaQuery.MaxWidth.lg} { + background-color: ${Colour["bg-strong"]}; } `; export const Divider = styled.div` display: ${(props) => (props.$showDivider ? "block" : "none")}; height: 1px; - background-color: ${V2_Color.Neutral[5]}; + background-color: ${Colour["border"]}; - ${V2_MediaQuery.MaxWidth.tablet} { + ${MediaQuery.MaxWidth.lg} { display: ${(props) => (props.$showMobileDivider ? "block" : "none")}; margin: 0 1rem; } @@ -54,36 +54,43 @@ export const FilterItemHeader = styled.div` display: flex; align-items: center; - background-color: ${V2_Color.Neutral[8]}; + background-color: ${Colour["bg"]}; - ${V2_MediaQuery.MaxWidth.tablet} { + ${MediaQuery.MaxWidth.lg} { background-color: transparent; } `; export const FilterItemExpandButton = styled(ClickableIcon)` margin: 0 0 0 auto; + + color: ${Colour["icon"]}; + &:hover { + color: ${Colour["icon-hover"]}; + } `; export const ChevronIcon = styled(ChevronDownIcon)` - height: 1.125rem; - width: 1.125rem; - color: ${V2_Color.Neutral[3]}; + height: ${FontSpec["body-size-baseline"]}; + width: ${FontSpec["body-size-baseline"]}; transform: rotate(${(props) => (props.$expanded ? 180 : 0)}deg); - transition: transform 300ms ease-in-out; - - &:hover { - color: ${V2_Color.Neutral[2]}; - } + transition: transform ${Motion["duration-350"]} ${Motion["ease-standard"]}; `; -export const FilterItemTitle = styled(V2_Text.H4)` - margin: 1.5rem 0 1.5rem 1.25rem; +export const FilterItemTitle = styled.p` + ${Font["header-xs-semibold"]} + color: ${Colour["text"]}; + + margin: ${Spacing["spacing-24"]} 0 ${Spacing["spacing-24"]} + ${Spacing["spacing-20"]}; - ${V2_MediaQuery.MaxWidth.tablet} { - ${V2_TextStyleHelper.getTextStyle("H5", "semibold")} - margin: 1.5rem 1.25rem 0 1.25rem; + ${MediaQuery.MaxWidth.lg} { + ${Font["body-md-semibold"]} + color: ${Colour["text-subtle"]}; + + margin: ${Spacing["spacing-24"]} ${Spacing["spacing-20"]} 0 + ${Spacing["spacing-20"]}; } `; @@ -96,13 +103,10 @@ export const ExpandableItem = styled(animated.div)` `; export const FilterItemBody = styled.div` - padding: 1rem 1.25rem; + padding: ${Spacing["spacing-24"]} ${Spacing["spacing-20"]}; `; -export const MinimisableContent = styled(animated.div)<{ - $height?: number; - $minimisable: boolean; -}>` +export const MinimisableContent = styled(animated.div)` ${(props) => props.$minimisable && "overflow: hidden;"} ${(props) => props.$height && `height: ${props.$height}px;`} `; @@ -110,5 +114,5 @@ export const MinimisableContent = styled(animated.div)<{ export const FilterItemMinimiseButton = styled(Button.Small)` height: fit-content; padding: 0; - margin: 1rem 0 0 0; + margin: ${Spacing["spacing-16"]} 0 0 0; `; diff --git a/src/filter/filter-item.tsx b/src/filter/filter-item.tsx index aa94867ab..9a11066aa 100644 --- a/src/filter/filter-item.tsx +++ b/src/filter/filter-item.tsx @@ -116,7 +116,7 @@ export const FilterItem = ({ {(title || collapsible) && ( {title && ( - + {title} {addon && renderAddon()} )} diff --git a/src/filter/filter.styles.tsx b/src/filter/filter.styles.tsx index c0bc5cace..5f6f8f3d9 100644 --- a/src/filter/filter.styles.tsx +++ b/src/filter/filter.styles.tsx @@ -1,25 +1,24 @@ import styled from "styled-components"; -import { Button } from "../button/button"; -import { V2_Color } from "../v2_color/color"; -import { V2_MediaQuery } from "../v2_media/media"; -import { ClickableIcon } from "../shared/clickable-icon"; -import { V2_Text } from "../v2_text/text"; +import { Button } from "../button"; import { ButtonWithIcon } from "../button-with-icon"; +import { ClickableIcon } from "../shared/clickable-icon"; +import { Border, Colour, MediaQuery, Radius, Spacing } from "../theme"; +import { Typography } from "../typography"; // ============================================================================= // CONTAINER STYLES // ============================================================================= export const DesktopContainer = styled.div` - background-color: ${V2_Color.Neutral[8]}; - border: 1px solid ${V2_Color.Neutral[5]}; - border-radius: 0.5rem; + background-color: ${Colour["bg"]}; + border: ${Border["width-010"]} ${Border["solid"]} ${Colour["border"]}; + border-radius: ${Radius["md"]}; overflow: hidden; width: 100%; `; export const MobileContainer = styled.div` - background-color: ${V2_Color.Neutral[7]}; + background-color: ${Colour["bg-strong"]}; height: 100%; width: 100%; display: flex; @@ -27,7 +26,7 @@ export const MobileContainer = styled.div` `; export const MobileOverlayContainer = styled.div` - background-color: ${V2_Color.Neutral[8]}; + background-color: ${Colour["bg"]}; height: 100%; width: 100%; `; @@ -46,27 +45,29 @@ export const FilterHeader = styled.div` display: flex; align-items: center; - background-color: ${V2_Color.Neutral[8]}; + background-color: ${Colour["bg"]}; - ${V2_MediaQuery.MaxWidth.tablet} { - border-bottom: 1px solid ${V2_Color.Neutral[5]}; + ${MediaQuery.MaxWidth.lg} { + border-bottom: ${Border["width-010"]} ${Border["solid"]} + ${Colour["border"]}; } `; -export const FilterTitle = styled(V2_Text.H4)` +export const FilterTitle = styled(Typography.HeaderXS).attrs({ as: "p" })` flex: 1; - margin: 1.5rem 0 1rem 1.25rem; + margin: ${Spacing["spacing-24"]} 0 ${Spacing["spacing-24"]} + ${Spacing["spacing-20"]}; - ${V2_MediaQuery.MaxWidth.tablet} { + ${MediaQuery.MaxWidth.lg} { text-align: center; - margin: 1.5rem 0; + margin: ${Spacing["spacing-24"]} 0; } `; export const FilterHeaderButton = styled(ClickableIcon)` - padding: 1.5rem 1.25rem; + padding: ${Spacing["spacing-24"]} ${Spacing["spacing-20"]}; margin-right: auto; - color: ${V2_Color.Neutral[3]}; + color: ${Colour["icon"]}; svg { height: 1.5rem; @@ -74,17 +75,18 @@ export const FilterHeaderButton = styled(ClickableIcon)` } &:hover { - color: ${V2_Color.Neutral[2]}; + color: ${Colour["icon-hover"]}; } `; export const FilterClearButton = styled(Button.Small)` background-color: transparent; - padding: 1.5rem 1.25rem 1rem 1.25rem; - height: auto; + padding-right: ${Spacing["spacing-20"]}; + padding-left: ${Spacing["spacing-20"]}; + height: 100%; - ${V2_MediaQuery.MaxWidth.tablet} { - padding: 1.5rem 1.25rem; + ${MediaQuery.MaxWidth.lg} { + padding: ${Spacing["spacing-24"]} ${Spacing["spacing-20"]}; } `; @@ -97,9 +99,9 @@ export const FilterButton = styled(ButtonWithIcon.Default)` `; export const FilterFooter = styled.div` - padding: 1.5rem 1.25rem; - background-color: ${V2_Color.Neutral[8]}; - border-top: 1px solid ${V2_Color.Neutral[5]}; + padding: ${Spacing["spacing-24"]} ${Spacing["spacing-20"]}; + background-color: ${Colour["bg"]}; + border-top: ${Border["width-010"]} ${Border["solid"]} ${Colour["border"]}; `; export const FilterDoneButton = styled(Button.Default)` diff --git a/src/filter/filter.tsx b/src/filter/filter.tsx index 03328b292..7500f7cfe 100644 --- a/src/filter/filter.tsx +++ b/src/filter/filter.tsx @@ -1,4 +1,13 @@ import { CrossIcon, FilterIcon } from "@lifesg/react-icons"; +import { useEffect, useRef, useState } from "react"; +import { useMediaQuery } from "react-responsive"; +import { useTheme } from "styled-components"; +import { Overlay } from "../overlay/overlay"; +import { Breakpoint } from "../theme"; +import { FilterItemCheckbox } from "./addons/filter-item-checkbox"; +import { FilterContext } from "./filter-context"; +import { FilterItem } from "./filter-item"; +import { FilterItemPage } from "./filter-item-page"; import { DesktopContainer, FilterBody, @@ -12,15 +21,7 @@ import { MobileContainer, MobileOverlayContainer, } from "./filter.styles"; -import { FilterContext } from "./filter-context"; -import { FilterItem } from "./filter-item"; -import { FilterItemCheckbox } from "./addons/filter-item-checkbox"; -import { FilterItemPage } from "./filter-item-page"; import { FilterProps, Mode } from "./types"; -import { MediaWidths } from "../v2_spec/media-spec"; -import { Overlay } from "../overlay/overlay"; -import { useEffect, useRef, useState } from "react"; -import { useMediaQuery } from "react-responsive"; const FilterBase = ({ toggleFilterButtonLabel = "Filters", @@ -39,9 +40,9 @@ const FilterBase = ({ const [visible, setVisible] = useState(false); const mobileNodeRef = useRef(null); const desktopNodeRef = useRef(null); - const isMobile = useMediaQuery({ - maxWidth: MediaWidths.tablet, - }); + const theme = useTheme(); + const mobileBreakpoint = Breakpoint["lg-max"]({ theme }); + const isMobile = useMediaQuery({ maxWidth: mobileBreakpoint }); // ============================================================================= // EFFECTS From 1091e5031e2a6c9d0274d18ac67c6aea92b9e8ef Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Tue, 21 Jan 2025 14:54:07 +0800 Subject: [PATCH 0792/1949] [V3][RL] Update Filter docs --- src/filter/addons/filter-item-checkbox.tsx | 2 + src/filter/filter-item-page.tsx | 2 + src/filter/filter-item.tsx | 2 + src/filter/filter.tsx | 2 + stories/filter/addon-props-table.tsx | 10 +- .../filter/doc-elements/example-dropdown.tsx | 42 +++ .../example-filter-items.tsx} | 18 +- stories/filter/filter-addons.stories.tsx | 152 ++++---- stories/filter/filter.mdx | 5 +- stories/filter/filter.stories.tsx | 351 +++++++++--------- stories/filter/props-table.tsx | 10 +- stories/storybook-common/story-container.tsx | 14 +- 12 files changed, 323 insertions(+), 287 deletions(-) create mode 100644 stories/filter/doc-elements/example-dropdown.tsx rename stories/filter/{doc-elements.tsx => doc-elements/example-filter-items.tsx} (88%) diff --git a/src/filter/addons/filter-item-checkbox.tsx b/src/filter/addons/filter-item-checkbox.tsx index adbeb48de..72e367097 100644 --- a/src/filter/addons/filter-item-checkbox.tsx +++ b/src/filter/addons/filter-item-checkbox.tsx @@ -227,3 +227,5 @@ export const FilterItemCheckbox = ({ ); }; + +FilterItemCheckbox.displayName = "Filter.Checkbox"; diff --git a/src/filter/filter-item-page.tsx b/src/filter/filter-item-page.tsx index 1dbb106bd..b120ab275 100644 --- a/src/filter/filter-item-page.tsx +++ b/src/filter/filter-item-page.tsx @@ -32,3 +32,5 @@ export const FilterItemPage = ({ ); }; + +FilterItemPage.displayName = "Filter.Page"; diff --git a/src/filter/filter-item.tsx b/src/filter/filter-item.tsx index 9a11066aa..dfb1fece6 100644 --- a/src/filter/filter-item.tsx +++ b/src/filter/filter-item.tsx @@ -170,3 +170,5 @@ export const FilterItem = ({ ); }; + +FilterItem.displayName = "Filter.Item"; diff --git a/src/filter/filter.tsx b/src/filter/filter.tsx index 7500f7cfe..2bbd8fc7a 100644 --- a/src/filter/filter.tsx +++ b/src/filter/filter.tsx @@ -180,6 +180,8 @@ const FilterBase = ({ ); }; +FilterBase.displayName = "Filter"; + export const Filter = Object.assign(FilterBase, { Item: FilterItem, Page: FilterItemPage, diff --git a/stories/filter/addon-props-table.tsx b/stories/filter/addon-props-table.tsx index ac7a2444e..5c46990db 100644 --- a/stories/filter/addon-props-table.tsx +++ b/stories/filter/addon-props-table.tsx @@ -1,7 +1,9 @@ -import React from "react"; -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; -import { TabAttribute, Tabs } from "../storybook-common/tabs"; +import { + ApiTable, + ApiTableSectionProps, + TabAttribute, + Tabs, +} from "stories/storybook-common"; const FILTER_CHECKBOX_DATA: ApiTableSectionProps[] = [ { diff --git a/stories/filter/doc-elements/example-dropdown.tsx b/stories/filter/doc-elements/example-dropdown.tsx new file mode 100644 index 000000000..c6f620c67 --- /dev/null +++ b/stories/filter/doc-elements/example-dropdown.tsx @@ -0,0 +1,42 @@ +import { useState } from "react"; +import styled from "styled-components"; +import { Card } from "src/card"; +import { Button } from "../../../src"; + +interface Props { + onShowOptions: () => void; + onHideOptions: () => void; +} + +export const ComponentWithFloatingElement = (props: Props) => { + const [open, setOpen] = useState(false); + + return ( + + { + setOpen(!open); + if (open) { + props.onHideOptions?.(); + } else { + props.onShowOptions?.(); + } + }} + > + Toggle + + {open && Floating content} + + ); +}; + +const Parent = styled.div` + position: relative; +`; + +const Dropdown = styled(Card)` + position: absolute; + top: calc(100% + 16px); + height: 100px; + background-color: white; +`; diff --git a/stories/filter/doc-elements.tsx b/stories/filter/doc-elements/example-filter-items.tsx similarity index 88% rename from stories/filter/doc-elements.tsx rename to stories/filter/doc-elements/example-filter-items.tsx index da98aa4c2..d8d75dadd 100644 --- a/stories/filter/doc-elements.tsx +++ b/stories/filter/doc-elements/example-filter-items.tsx @@ -1,11 +1,11 @@ import { MagnifierIcon } from "@lifesg/react-icons/magnifier"; import isEmpty from "lodash/isEmpty"; -import React, { useState } from "react"; +import { useState } from "react"; +import { Filter, Mode } from "src/filter"; +import { Form } from "src/form"; +import { Colour } from "src/theme"; +import { Typography } from "src/typography"; import styled from "styled-components"; -import { V2_Color } from "../../src/v2_color"; -import { Filter, Mode } from "../../src/filter"; -import { Form } from "../../src/form"; -import { V2_Text } from "../../src/v2_text"; interface Props { mode: Mode; @@ -14,7 +14,7 @@ interface Props { } const SearchIcon = styled(MagnifierIcon)` - color: ${V2_Color.Neutral[3]}; + color: ${Colour["icon"]}; `; export const StyledFilterItem = styled(Filter.Item)<{ $mode: Mode }>` @@ -22,7 +22,7 @@ export const StyledFilterItem = styled(Filter.Item)<{ $mode: Mode }>` props.$mode === "default" ? "0 1.25rem 1.5rem" : "1.5rem 1.25rem"}; `; -export const SearchFilter = ({ mode, value, onChange }: Props) => { +export const SearchFilter = ({ value, onChange }: Props) => { return ( ) => { export const TextFilter = () => { return ( - + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi venenatis neque felis, ac tempor erat iaculis et. Nam elementum at lectus et dapibus. Orci varius natoque penatibus et magnis dis @@ -56,7 +56,7 @@ export const TextFilter = () => { interdum. Fusce auctor pharetra lorem eu rhoncus. Integer consectetur in odio sed vestibulum. Nunc imperdiet ligula non eros faucibus, non aliquam dui aliquet. - + ); }; diff --git a/stories/filter/filter-addons.stories.tsx b/stories/filter/filter-addons.stories.tsx index 1670ebf2d..ef42e5529 100644 --- a/stories/filter/filter-addons.stories.tsx +++ b/stories/filter/filter-addons.stories.tsx @@ -1,12 +1,12 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { Filter } from "../../src/filter"; -import { StoryContainer } from "../storybook-common"; -import { useFilters } from "./doc-elements"; +import { Filter } from "src/filter"; +import { StoryDecorator } from "stories/storybook-common"; +import { useFilters } from "./doc-elements/example-filter-items"; type Component = typeof Filter; const meta: Meta = { - title: "Modules/Filter/Addons", + title: "Selection and input/Filter/Addons", component: Filter, }; @@ -15,7 +15,6 @@ export default meta; export const FilterCheckbox: StoryObj = { render: () => { const { - currentFilters, draftFilters, clearButtonDisabled, updateFilter, @@ -24,78 +23,77 @@ export const FilterCheckbox: StoryObj = { clearFilters, } = useFilters({ cat1: [], cat2: [] }); // your custom filter state management here return ( - - - {(mode) => ( - <> - - - - )} - - + + {(mode) => ( + <> + + + + )} + ); }, + decorators: [StoryDecorator({ maxWidth: true })], }; diff --git a/stories/filter/filter.mdx b/stories/filter/filter.mdx index f6da3f7eb..46da11ea6 100644 --- a/stories/filter/filter.mdx +++ b/stories/filter/filter.mdx @@ -45,9 +45,10 @@ If you need the current visible mode, you may pass in a render prop as a child o ## Floating content If some child elements are positioned absolutely, content may be clipped if they exceed the parent's boundaries. -For such scenarios, you may increase the height of the container by adding some padding. +It is recommended to use a smart positioning library such as [Floating UI](https://floating-ui.com/) to render such content. +If you are unable to do so, an alternative is to increase the height of the container by adding some padding. -In the example below, extra padding is applied when the dropdown list is expanded. +In the example below, extra padding is applied when the item is expanded. diff --git a/stories/filter/filter.stories.tsx b/stories/filter/filter.stories.tsx index d7f290094..9f69e4adc 100644 --- a/stories/filter/filter.stories.tsx +++ b/stories/filter/filter.stories.tsx @@ -1,29 +1,28 @@ import type { Meta, StoryObj } from "@storybook/react"; import { useState } from "react"; -import { Filter } from "../../src/filter"; -import { Form } from "../../src/form"; -import { StoryContainer } from "../storybook-common"; +import { Filter } from "src/filter"; +import { StoryDecorator } from "stories/storybook-common"; +import { ComponentWithFloatingElement } from "./doc-elements/example-dropdown"; import { DateFilter, SearchFilter, StyledFilterItem, TextFilter, useFilters, -} from "./doc-elements"; +} from "./doc-elements/example-filter-items"; type Component = typeof Filter; const meta: Meta = { - title: "Modules/Filter", + title: "Selection and input/Filter", component: Filter, }; export default meta; export const Default: StoryObj = { - render: () => { + render: (_args) => { const { - currentFilters, draftFilters, clearButtonDisabled, updateFilter, @@ -32,229 +31,211 @@ export const Default: StoryObj = { clearFilters, } = useFilters({ search: "", date: undefined }); // your custom filter state management here return ( - - - {(mode) => ( - <> - - - - - - - - - - - )} - - + + {(mode) => ( + <> + + + + + + + + + + + )} + ); }, + decorators: [StoryDecorator({ maxWidth: true })], }; export const ConfiguringFilterItem: StoryObj = { - render: () => { + render: (_args) => { return ( - - - - Without divider - - With divider - Collapsible - No title, collapsible - - No title, not collapsible - - - Always visible - - - + + + Without divider + + With divider + Collapsible + No title, collapsible + + No title, not collapsible + + + Always visible + + ); }, + decorators: [StoryDecorator({ maxWidth: true })], }; export const HandlingExpandedState: StoryObj = { - render: () => { + render: (_args) => { const [expanded, setExpanded] = useState("item-1"); const handleExpandChange = (item) => setExpanded(item); return ( - - - - Expanded by default with initialExpanded{" "} - prop - - handleExpandChange("item-1")} - > - Controlled by expanded prop - - handleExpandChange("item-2")} - > - Controlled by expanded prop - - - + + + Expanded by default with initialExpanded prop + + handleExpandChange("item-1")} + > + Controlled by expanded prop + + handleExpandChange("item-2")} + > + Controlled by expanded prop + + ); }, + decorators: [StoryDecorator({ maxWidth: true })], }; export const Minimised: StoryObj = { - render: () => { + render: (_args) => { return ( - - - - - - - - - - + + + + + + + + ); }, + decorators: [StoryDecorator({ maxWidth: true })], }; export const FilterItemTooltip: StoryObj = { - render: () => { + render: (_args) => { return ( - - - - This has a tooltip in the filter item title - - - + + + This has a tooltip in the filter item title + + ); }, + decorators: [StoryDecorator({ maxWidth: true })], }; export const AccessingMode: StoryObj = { - render: () => { + render: (_args) => { return ( - - - - {(mode) => - mode === "mobile" - ? "Mobile view. Switch to a larger viewport to see default view." - : "Default view. Switch to a smaller viewport to see mobile view." - } - - - + + + {(mode) => + mode === "mobile" + ? "Mobile view. Switch to a larger viewport to see default view." + : "Default view. Switch to a smaller viewport to see mobile view." + } + + ); }, + decorators: [StoryDecorator({ maxWidth: true })], }; export const WithFloatingContent: StoryObj = { - render: () => { + render: (_args) => { const [showOptions, setShowOptions] = useState(false); return ( - - - - item.value} - listExtractor={(item) => item.label} - displayValueExtractor={(item) => item.label} - onShowOptions={() => setShowOptions(true)} - onHideOptions={() => setShowOptions(false)} - /> - - - + + + setShowOptions(true)} + onHideOptions={() => setShowOptions(false)} + /> + + ); }, + decorators: [StoryDecorator({ maxWidth: true })], }; export const DisplayFilterInFullscreen: StoryObj = { - render: () => { + render: (_args) => { return ( - - -
    Custom content
    -
    -
    + +
    Custom content
    +
    ); }, + parameters: { layout: "fullscreen" }, + decorators: [ + (Story) => { + return ( +
    + +
    + ); + }, + ], }; diff --git a/stories/filter/props-table.tsx b/stories/filter/props-table.tsx index c03836d3c..7c44889e9 100644 --- a/stories/filter/props-table.tsx +++ b/stories/filter/props-table.tsx @@ -1,7 +1,9 @@ -import React from "react"; -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; -import { TabAttribute, Tabs } from "../storybook-common/tabs"; +import { + ApiTable, + ApiTableSectionProps, + TabAttribute, + Tabs, +} from "stories/storybook-common"; const FILTER_DATA: ApiTableSectionProps[] = [ { diff --git a/stories/storybook-common/story-container.tsx b/stories/storybook-common/story-container.tsx index 8557d0286..84b162725 100644 --- a/stories/storybook-common/story-container.tsx +++ b/stories/storybook-common/story-container.tsx @@ -65,7 +65,7 @@ export const FlexStoryContainer = styled.div` // ============================================================================= interface StoryStyleProps { - $fullscreen?: boolean; + $maxWidth?: boolean; } interface FullscreenStoryStyleProps { @@ -113,18 +113,20 @@ const FullWidthContainer = styled.div` // ----------------------------------------------------------------------------- /** For general components */ -export const StoryDecorator: () => DecoratorFunction = () => +export const StoryDecorator: (options?: { + maxWidth?: boolean; +}) => DecoratorFunction = (options) => function StoryWrapper(Story, { viewMode }) { if (viewMode === "docs") { return ( - + ); } return ( - + ); @@ -133,15 +135,15 @@ export const StoryDecorator: () => DecoratorFunction = () => const StoryViewModeContainer = styled.div` min-width: min(500px, calc(100vw - 32px)); width: fit-content; + ${(props) => props.$maxWidth && "max-width: 500px;"} margin: auto; - ${(props) => !props.$fullscreen && "padding: 16px;"} `; const DocsViewModeContainer = styled.div` min-width: 500px; width: fit-content; + ${(props) => props.$maxWidth && "max-width: 500px;"} margin: auto; - ${(props) => !props.$fullscreen && "padding: 16px;"} @media screen and (max-width: 600px) { min-width: unset; From a5cc8e8b3c759f42c61c985fbfe0a4f977ae6dec Mon Sep 17 00:00:00 2001 From: Quek Ruo Ling Date: Wed, 22 Jan 2025 09:51:11 +0800 Subject: [PATCH 0793/1949] [V3][RL] Ignore v2_spec folder from build --- scripts/build-util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-util.js b/scripts/build-util.js index 75db6fc8d..0b9754dcb 100644 --- a/scripts/build-util.js +++ b/scripts/build-util.js @@ -8,8 +8,8 @@ export const getFolders = (entry) => { const dirsToIgnore = [ "custom-types", "shared", - "spec", "util", + "v2_spec", "__mocks__", ]; From 9e18c686299e441f495f7bd837f8a321100192f2 Mon Sep 17 00:00:00 2001 From: roll Date: Wed, 22 Jan 2025 21:49:59 +0800 Subject: [PATCH 0794/1949] [V3][RL] Migrate shared ClickableIcon --- src/shared/clickable-icon/clickable-icon.style.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/shared/clickable-icon/clickable-icon.style.tsx b/src/shared/clickable-icon/clickable-icon.style.tsx index e64cf6776..716d5d4ca 100644 --- a/src/shared/clickable-icon/clickable-icon.style.tsx +++ b/src/shared/clickable-icon/clickable-icon.style.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import { V2_Color } from "../../v2_color/color"; +import { Colour, Spacing } from "../../theme"; interface StyleProps { $outline: "none" | "browser"; @@ -10,7 +10,7 @@ export const Main = styled.button` display: flex; justify-content: center; align-items: center; - padding: 1.5rem; + padding: ${Spacing["spacing-32"]}; background-color: transparent; border: none; cursor: pointer; @@ -32,7 +32,7 @@ export const Main = styled.button` ${({ $highlight }) => $highlight && css` - background-color: ${V2_Color.Neutral[7]}; + background-color: ${Colour["bg-hover-neutral"]}; `} } `; From d56e9d95514c9c7eb88c0566164555fc66ce2e87 Mon Sep 17 00:00:00 2001 From: roll Date: Wed, 22 Jan 2025 21:52:07 +0800 Subject: [PATCH 0795/1949] [V3][RL] Migrate DateNavigator --- src/date-navigator/date-navigator.style.tsx | 16 +++++++--------- .../date-navigator/date-navigator.stories.tsx | 12 ++++++------ stories/date-navigator/props-table.tsx | 3 +-- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/date-navigator/date-navigator.style.tsx b/src/date-navigator/date-navigator.style.tsx index e355321c7..ec7aa90b0 100644 --- a/src/date-navigator/date-navigator.style.tsx +++ b/src/date-navigator/date-navigator.style.tsx @@ -1,15 +1,14 @@ import styled from "styled-components"; -import { V2_Color } from "../v2_color"; import { ClickableIcon } from "../shared/clickable-icon"; -import { V2_Text } from "../v2_text"; +import { Colour, Spacing } from "../theme"; +import { Typography } from "../typography"; export const HeaderArrowButton = styled(ClickableIcon)` - height: 2.5rem; - padding: 1rem; + padding: ${Spacing["spacing-12"]}; :disabled { cursor: not-allowed; > svg { - color: ${V2_Color.Neutral[5]}; + color: ${Colour["icon-disabled"]}; } } `; @@ -25,12 +24,11 @@ export const Wrapper = styled.div` text-align: center; `; -export const StyledDateText = styled(V2_Text.H4)` - color: ${V2_Color.Neutral[1]}; +export const StyledDateText = styled(Typography.BodyBL)` white-space: nowrap; display: inline-block; `; -export const StyledDayText = styled(V2_Text.XSmall)` - color: ${V2_Color.Neutral[2]}; +export const StyledDayText = styled(Typography.BodyXS)` + color: ${Colour["text-subtle"]}; `; diff --git a/stories/date-navigator/date-navigator.stories.tsx b/stories/date-navigator/date-navigator.stories.tsx index ac942a50b..d464b4b90 100644 --- a/stories/date-navigator/date-navigator.stories.tsx +++ b/stories/date-navigator/date-navigator.stories.tsx @@ -1,26 +1,26 @@ import type { Meta, StoryObj } from "@storybook/react"; import dayjs from "dayjs"; import { useState } from "react"; -import { DateNavigator } from "../../src/date-navigator/date-navigator"; +import { DateNavigator } from "src/date-navigator"; type Component = typeof DateNavigator; const meta: Meta = { - title: "Modules/DateNavigator", + title: "Selection and input/DateNavigator", component: DateNavigator, }; export default meta; export const Default: StoryObj = { - render: () => { + render: (_args) => { const today = dayjs().toString(); return ; }, }; export const WithNavigation: StoryObj = { - render: () => { + render: (_args) => { const today = dayjs().toString(); const [selectedDate, setSelectedDate] = useState(today); @@ -43,7 +43,7 @@ export const WithNavigation: StoryObj = { }; export const LoadingState: StoryObj = { - render: () => { + render: (_args) => { const today = dayjs().toString(); const [selectedDate, setSelectedDate] = useState(today); const [loading, setLoading] = useState(false); @@ -75,7 +75,7 @@ export const LoadingState: StoryObj = { }; export const WithMinAndMaxDate: StoryObj = { - render: () => { + render: (_args) => { const today = dayjs().toString(); const minDate = dayjs(today).subtract(6, "day").toString(); const maxDate = dayjs(today).add(6, "day").toString(); diff --git a/stories/date-navigator/props-table.tsx b/stories/date-navigator/props-table.tsx index 1e60dfc70..7a00d8683 100644 --- a/stories/date-navigator/props-table.tsx +++ b/stories/date-navigator/props-table.tsx @@ -1,5 +1,4 @@ -import { ApiTable } from "../storybook-common/api-table"; -import { ApiTableSectionProps } from "../storybook-common/api-table/types"; +import { ApiTable, ApiTableSectionProps } from "stories/storybook-common"; const DATE_FORMAT = ( <> From be0c3555455a5435672ec94cdd486eb1be62c221 Mon Sep 17 00:00:00 2001 From: roll Date: Wed, 22 Jan 2025 22:48:15 +0800 Subject: [PATCH 0796/1949] [V3][RL] Update Navbar and Footer docs --- stories/footer/footer.stories.tsx | 18 +- stories/footer/props-table.tsx | 4 +- stories/masthead/masthead.mdx | 1 - stories/masthead/masthead.stories.tsx | 2 +- stories/masthead/props-table.tsx | 103 ------- stories/navbar/doc-elements.tsx | 38 +-- stories/navbar/navbar.stories.tsx | 389 +++++--------------------- 7 files changed, 101 insertions(+), 454 deletions(-) delete mode 100644 stories/masthead/props-table.tsx diff --git a/stories/footer/footer.stories.tsx b/stories/footer/footer.stories.tsx index 2b149ba56..eaad29d3d 100644 --- a/stories/footer/footer.stories.tsx +++ b/stories/footer/footer.stories.tsx @@ -1,18 +1,18 @@ import type { Meta, StoryObj } from "@storybook/react"; import { Footer } from "src/footer"; -import { V2_Layout } from "src/v2_layout"; +import { Layout } from "src/layout"; type Component = typeof Footer; const meta: Meta = { - title: "Modules/Footer", + title: "Navigation/Footer", component: Footer, }; export default meta; export const Default: StoryObj = { - render: () => { + render: (_args) => { return (