diff --git a/.storybook/main.js b/.storybook/main.js index 341553d..eb09394 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -3,7 +3,6 @@ module.exports = { addons: [ '@storybook/addon-links', '@storybook/addon-essentials', - '@storybook/addon-a11y', { name: '@storybook/addon-postcss', options: { @@ -12,7 +11,11 @@ module.exports = { }, }, }, + '@storybook/addon-docs', ], - - framework: '@storybook/react', + // https://storybook.js.org/docs/react/configure/typescript#mainjs-configuration + typescript: { + check: true, // type-check stories during Storybook build + reactDocgen: 'react-docgen', + }, }; diff --git a/.storybook/preview.js b/.storybook/preview.js index 12a3b06..d74e820 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -1,11 +1,17 @@ import '../src/style.css'; +import { DefaultTestProviders } from '../src/utils'; +// https://storybook.js.org/docs/react/writing-stories/parameters#global-parameters export const parameters = { - actions: { argTypesRegex: '^on[A-Z].*' }, - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/, - }, - }, + // https://storybook.js.org/docs/react/essentials/actions#automatically-matching-args + actions: { argTypesRegex: '^on.*' }, + viewMode: 'docs', }; + +export const decorators = [ + (Story) => ( + + + + ), +]; diff --git a/package.json b/package.json index 009a257..505f0ba 100644 --- a/package.json +++ b/package.json @@ -29,12 +29,14 @@ "semantic-release": "semantic-release" }, "peerDependencies": { + "@radix-ui/react-tooltip": "^0.1.7", "clsx": "^1.1.1", "date-fns": "^2.28.0", "framer-motion": "4.1.17", "react": ">=16", "react-hook-form": "^7.27.0", - "react-icons": "^4.3.1" + "react-icons": "^4.3.1", + "react-intl": "^5.24.6" }, "husky": { "hooks": { @@ -68,16 +70,16 @@ "@babel/core": "^7.17.0", "@commitlint/cli": "^16.1.0", "@commitlint/config-conventional": "^16.0.0", + "@radix-ui/react-tooltip": "^0.1.7", "@size-limit/preset-small-lib": "^7.0.8", - "@storybook/addon-a11y": "^6.4.12", - "@storybook/addon-actions": "^6.4.12", - "@storybook/addon-essentials": "^6.4.18", - "@storybook/addon-info": "^5.3.21", - "@storybook/addon-links": "^6.4.18", - "@storybook/addon-postcss": "^2.0.0", - "@storybook/addons": "^6.4.18", - "@storybook/react": "^6.4.18", - "@storybook/storybook-deployer": "^2.8.10", + "@storybook/addon-docs": "6.5.0-alpha.41", + "@storybook/addon-essentials": "6.4.18", + "@storybook/addon-info": "5.3.21", + "@storybook/addon-links": "6.4.18", + "@storybook/addon-postcss": "2.0.0", + "@storybook/addons": "6.4.18", + "@storybook/react": "6.4.18", + "@storybook/storybook-deployer": "2.8.10", "@tailwindcss/forms": "^0.4.0", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^12.1.2", @@ -108,6 +110,7 @@ "react-dom": "^17.0.2", "react-hook-form": "^7.27.0", "react-icons": "^4.3.1", + "react-intl": "^5.24.6", "react-is": "^17.0.2", "regenerator-runtime": "^0.13.9", "rollup-plugin-postcss": "^4.0.2", @@ -118,6 +121,11 @@ "tslib": "^2.3.1", "typescript": "^4.5.5" }, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, "config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" diff --git a/src/context/formatting/formatting.constant.ts b/src/context/formatting/formatting.constant.ts new file mode 100644 index 0000000..7409cbc --- /dev/null +++ b/src/context/formatting/formatting.constant.ts @@ -0,0 +1,6 @@ +import { Formatting } from './formatting.model'; + +export const DEFAULT_FORMATTING: Formatting = { + date: 'E, d MMM yyyy', + dateTime: 'E, d MMM yyy HH:mm:ss', +}; diff --git a/src/context/formatting/formatting.context.tsx b/src/context/formatting/formatting.context.tsx new file mode 100644 index 0000000..42d3f36 --- /dev/null +++ b/src/context/formatting/formatting.context.tsx @@ -0,0 +1,22 @@ +import React, { createContext, ReactNode } from 'react'; + +import { useContextFallback } from '../../hooks'; +import { DEFAULT_FORMATTING } from './formatting.constant'; +import { Formatting } from './formatting.model'; + +export const FormattingContext = createContext( + undefined +); + +type FormattingProps = { children: ReactNode; formatting?: Formatting }; + +export const FormattingProvider = ({ + children, + formatting = DEFAULT_FORMATTING, +}: FormattingProps) => ( + + {children} + +); + +export const useFormatting = () => useContextFallback(FormattingContext); diff --git a/src/context/formatting/formatting.model.ts b/src/context/formatting/formatting.model.ts new file mode 100644 index 0000000..21d91ea --- /dev/null +++ b/src/context/formatting/formatting.model.ts @@ -0,0 +1,4 @@ +export type Formatting = { + date: string; + dateTime: string; +}; diff --git a/src/context/formatting/index.ts b/src/context/formatting/index.ts new file mode 100644 index 0000000..08d06c4 --- /dev/null +++ b/src/context/formatting/index.ts @@ -0,0 +1,3 @@ +export * from './formatting.constant'; +export * from './formatting.context'; +export * from './formatting.model'; diff --git a/src/context/index.ts b/src/context/index.ts new file mode 100644 index 0000000..7dfda03 --- /dev/null +++ b/src/context/index.ts @@ -0,0 +1,3 @@ +export * from './formatting'; +export * from './notifications'; +export * from './valhalla.context'; diff --git a/src/context/notifications/index.ts b/src/context/notifications/index.ts new file mode 100644 index 0000000..123d0d3 --- /dev/null +++ b/src/context/notifications/index.ts @@ -0,0 +1 @@ +export * from './notifications.context'; diff --git a/src/context/notifications/notifications.context.tsx b/src/context/notifications/notifications.context.tsx new file mode 100644 index 0000000..8fd8b7c --- /dev/null +++ b/src/context/notifications/notifications.context.tsx @@ -0,0 +1,73 @@ +import React, { + createContext, + ReactNode, + useCallback, + useMemo, + useState, +} from 'react'; + +import { useContextFallback } from '../../hooks'; +import { NotificationGateway } from '../../ui'; +import { Notification } from '../../ui/notification/notification.model'; + +export type NotificationsState = { + notifications: Notification[]; + addNotification: (notification: Omit) => void; + removeNotification: (id: string) => void; +}; + +export const NotificationsContext = createContext< + NotificationsState | undefined +>(undefined); + +type NotificationsProviderProps = { + children: ReactNode; +}; + +let notificationCounter = 0; + +export const NotificationsProvider = ({ + children, +}: NotificationsProviderProps) => { + const [notifications, setNotifications] = useState([]); + + const addNotification = useCallback( + (notification: Omit) => { + const id = `${notificationCounter++}`; + + setNotifications((notifications) => [ + ...notifications, + { + ...notification, + id, + }, + ]); + }, + [] + ); + + const removeNotification = useCallback((id: string) => { + setNotifications((notifications) => + notifications.filter((notification) => notification.id !== id) + ); + }, []); + + const value = useMemo( + () => ({ + notifications, + addNotification, + removeNotification, + }), + [notifications, addNotification, removeNotification] + ); + + return ( + + + + {children} + + ); +}; + +export const useNotifications = () => useContextFallback(NotificationsContext); diff --git a/src/context/tooltip/index.ts b/src/context/tooltip/index.ts new file mode 100644 index 0000000..31e7027 --- /dev/null +++ b/src/context/tooltip/index.ts @@ -0,0 +1 @@ +export * from './tooltip.context'; diff --git a/src/context/tooltip/tooltip.context.ts b/src/context/tooltip/tooltip.context.ts new file mode 100644 index 0000000..e60cbb1 --- /dev/null +++ b/src/context/tooltip/tooltip.context.ts @@ -0,0 +1,3 @@ +import { Provider } from '@radix-ui/react-tooltip'; + +export const TooltipProvider = Provider; diff --git a/src/context/valhalla.context.tsx b/src/context/valhalla.context.tsx new file mode 100644 index 0000000..630eeee --- /dev/null +++ b/src/context/valhalla.context.tsx @@ -0,0 +1,32 @@ +import React, { ReactNode } from 'react'; + +import { I18n } from '../i18n'; +import { + DEFAULT_FORMATTING, + Formatting, + FormattingProvider, +} from './formatting'; +import { NotificationsProvider } from './notifications'; +import { TooltipProvider } from './tooltip'; + +type ValhallaProviderProps = { + children: ReactNode; + language: Locales; + locales: Record; + formatting?: Formatting; +}; + +export const ValhallaProvider = ({ + children, + formatting = DEFAULT_FORMATTING, + language, + locales, +}: ValhallaProviderProps) => ( + + + + {children} + + + +); diff --git a/src/i18n/i18n.component.tsx b/src/i18n/i18n.component.tsx new file mode 100644 index 0000000..7128b2f --- /dev/null +++ b/src/i18n/i18n.component.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +import { IntlProvider } from 'react-intl'; + +import { AVAILABLE_LOCALES } from './i18n.constant'; +import { flattenMessages } from './i18n.utils'; + +type I18nProps = { + /** + * language which should be used in this context + * + * @defaultValue en + */ + language: Locales; + locales: Record; + children?: React.ReactNode; +}; + +export const I18n = ({ + language, + locales, + children, +}: I18nProps) => { + const supportedLanguages = Object.keys(locales); + const currentLocale = supportedLanguages.some((l) => l === language) + ? language + : ('en' as Locales); + + const mergedMessages = + currentLocale in AVAILABLE_LOCALES + ? { + ...AVAILABLE_LOCALES[currentLocale], + ...locales[currentLocale], + } + : locales[currentLocale]; + + return ( + + {children} + + ); +}; diff --git a/src/i18n/i18n.constant.ts b/src/i18n/i18n.constant.ts new file mode 100644 index 0000000..82d7e39 --- /dev/null +++ b/src/i18n/i18n.constant.ts @@ -0,0 +1,8 @@ +import * as en from './locales/en.json'; +import * as storybook from './locales/storybook.json'; + +export const AVAILABLE_LOCALES = { + en: (en as any).default || en, +}; + +export const STORYBOOK_LOCALES = (storybook as any).default || storybook; diff --git a/src/i18n/i18n.utils.ts b/src/i18n/i18n.utils.ts new file mode 100644 index 0000000..8f979ae --- /dev/null +++ b/src/i18n/i18n.utils.ts @@ -0,0 +1,42 @@ +/** + * flattenMessages traverse nested messages object and return it + * as a flat object + * + * @example + * flattenMessages({ + * A: { + * B: { + * C: 'TEST' + * }, + * D: 'Hello!' + * } + * }) == { + * 'A.B.C': 'TEST', + * 'A.D': 'Hello!', + * } + * + * @remarks + * + * flattenMessages use recursion underneath for unwrapping nested objects + * + * @param object - nested messages object + * @param [prefix=''] - prefix that should be prepended to each key in flat object, shouldn't be used by developer + * + * @returns flat messages object + * + * @private + */ +export const flattenMessages = ( + object: Record, + prefix: string = '' +) => + Object.keys(object).reduce((translations: any, key) => { + const value = object[key]; + const prefixedKey: string = prefix ? `${prefix}.${key}` : key; + if (typeof value === 'string') { + translations[prefixedKey] = value; + } else { + Object.assign(translations, flattenMessages(value, prefixedKey)); + } + return translations; + }, {}); diff --git a/src/i18n/index.ts b/src/i18n/index.ts new file mode 100644 index 0000000..53218fc --- /dev/null +++ b/src/i18n/index.ts @@ -0,0 +1,2 @@ +export { VALHALLA_EN_LOCALES } from './locales'; +export * from './i18n.component'; diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json new file mode 100644 index 0000000..a50d6c8 --- /dev/null +++ b/src/i18n/locales/en.json @@ -0,0 +1,15 @@ +{ + "VALHALLA": { + "ACTIONS": { + "CLOSE": "Close" + }, + "CHECKBOX": { + "ALL": "All" + }, + "PAGINATION": { + "NEXT": "Next", + "PREV": "Previous", + "RESULTS": "{from}-{to} of {total}" + } + } +} diff --git a/src/i18n/locales/index.ts b/src/i18n/locales/index.ts new file mode 100644 index 0000000..11f735c --- /dev/null +++ b/src/i18n/locales/index.ts @@ -0,0 +1,3 @@ +import * as COMMON_EN_LOCALES from './en.json'; + +export { COMMON_EN_LOCALES as VALHALLA_EN_LOCALES }; diff --git a/src/i18n/locales/storybook.json b/src/i18n/locales/storybook.json new file mode 100644 index 0000000..08f029d --- /dev/null +++ b/src/i18n/locales/storybook.json @@ -0,0 +1,55 @@ +{ + "STORY_BOOK": { + "ALERT": { + "ACTION": "Action", + "CANCEL": "Cancel", + "CLOSE": "Close", + "CONFIRMATION_CONTENT": "This action cannot be undone.", + "CONTINUE": "Continue", + "DELETE_ACCOUNT": "Delete Account", + "DESCRIPTION": "Description", + "ERROR_CONTENT": "This is the content of the Error.", + "SHOW_ERROR": "Show Error", + "TITLE": "Title", + "TITLE_ERROR": "Error", + "TITLE_WARNING": "Warning are you sure you want to do this?", + "TRIGGER": "Trigger" + }, + "BODY": "Body", + "BUTTON": "Button", + "BUTTON_LEFT": "Element on left", + "BUTTON_RIGHT": "Element on right", + "BUTTON_BOTH": "Elements on both", + "CAPTION": "Caption", + "CARD": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu tellus eleifend, vulputate ligula sit amet, fringilla metus. Aenean dignissim turpis libero, sit amet scelerisque ex lobortis nec. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum tincidunt nulla non libero sodales, sed posuere urna feugiat. ", + "CUSTOM_TYPOGRAPHY": "Custom Typography", + "CHECKBOX": { + "BLUE": "Blue", + "GREEN": "Green", + "HELP": "Help Message", + "LABEL": "Checkbox Label", + "RED": "Red", + "YELLOW": "Yellow" + }, + "HEADING_ONE": "Heading One", + "HEADING_TWO": "Heading Two", + "HEADING_THREE": "Heading Three", + "HEADING_FOUR": "Heading Four", + "INTRO": { + "TITLE": "Design System Content" + }, + "LABEL": "Label", + "NOTIFICATION": { + "ACTION": "Action", + "CONTENT": "This is a notification!", + "DEFAULT": "Show Notification", + "ERROR": "Show Error Notification", + "INFO": "Show Info Notification", + "SUCCESS": "Show Success Notification", + "WARNING": "Show Warning Notification" + }, + "SHOW_TOOLTIP": "Show Tooltip", + "SUBTITLE_ONE": "Subtitle One", + "SUBTITLE_TWO": "Subtitle Two" + } +} diff --git a/src/index.tsx b/src/index.tsx index 6d1ef76..d8cb85a 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,6 +1,8 @@ import './style.css'; -export * from './components'; +export * from './context'; export * from './hooks'; +export * from './i18n'; export * from './models'; +export * from './ui'; export * from './utils'; diff --git a/src/models/index.ts b/src/models/index.ts index b1ccbfa..5fb706c 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -1,2 +1,3 @@ export * from './coordinates.model'; +export * from './test-id.model'; export * from './variant.model'; diff --git a/src/models/test-id.model.ts b/src/models/test-id.model.ts new file mode 100644 index 0000000..4dcb135 --- /dev/null +++ b/src/models/test-id.model.ts @@ -0,0 +1,3 @@ +export type TestId = { + 'data-testid'?: string; +}; diff --git a/src/components/alert/alert.component.tsx b/src/ui/alert/alert.component.tsx similarity index 100% rename from src/components/alert/alert.component.tsx rename to src/ui/alert/alert.component.tsx diff --git a/src/components/alert/alert.constant.ts b/src/ui/alert/alert.constant.ts similarity index 100% rename from src/components/alert/alert.constant.ts rename to src/ui/alert/alert.constant.ts diff --git a/src/components/alert/alert.stories.tsx b/src/ui/alert/alert.stories.tsx similarity index 100% rename from src/components/alert/alert.stories.tsx rename to src/ui/alert/alert.stories.tsx diff --git a/src/components/alert/index.ts b/src/ui/alert/index.ts similarity index 100% rename from src/components/alert/index.ts rename to src/ui/alert/index.ts diff --git a/src/components/button/button.component.tsx b/src/ui/button/button.component.tsx similarity index 100% rename from src/components/button/button.component.tsx rename to src/ui/button/button.component.tsx diff --git a/src/components/button/button.spec.tsx b/src/ui/button/button.spec.tsx similarity index 100% rename from src/components/button/button.spec.tsx rename to src/ui/button/button.spec.tsx diff --git a/src/components/button/button.stories.tsx b/src/ui/button/button.stories.tsx similarity index 100% rename from src/components/button/button.stories.tsx rename to src/ui/button/button.stories.tsx diff --git a/src/components/button/components/button-base.component.tsx b/src/ui/button/components/button-base.component.tsx similarity index 100% rename from src/components/button/components/button-base.component.tsx rename to src/ui/button/components/button-base.component.tsx diff --git a/src/components/button/components/button-icon-wrapper.component.tsx b/src/ui/button/components/button-icon-wrapper.component.tsx similarity index 100% rename from src/components/button/components/button-icon-wrapper.component.tsx rename to src/ui/button/components/button-icon-wrapper.component.tsx diff --git a/src/components/button/components/index.ts b/src/ui/button/components/index.ts similarity index 100% rename from src/components/button/components/index.ts rename to src/ui/button/components/index.ts diff --git a/src/components/button/constants/button-variants.constant.ts b/src/ui/button/constants/button-variants.constant.ts similarity index 100% rename from src/components/button/constants/button-variants.constant.ts rename to src/ui/button/constants/button-variants.constant.ts diff --git a/src/components/button/constants/index.ts b/src/ui/button/constants/index.ts similarity index 100% rename from src/components/button/constants/index.ts rename to src/ui/button/constants/index.ts diff --git a/src/components/button/icon-button.component.tsx b/src/ui/button/icon-button.component.tsx similarity index 100% rename from src/components/button/icon-button.component.tsx rename to src/ui/button/icon-button.component.tsx diff --git a/src/components/button/icon-button.spec.tsx b/src/ui/button/icon-button.spec.tsx similarity index 100% rename from src/components/button/icon-button.spec.tsx rename to src/ui/button/icon-button.spec.tsx diff --git a/src/components/button/icon-button.stories.tsx b/src/ui/button/icon-button.stories.tsx similarity index 100% rename from src/components/button/icon-button.stories.tsx rename to src/ui/button/icon-button.stories.tsx diff --git a/src/components/button/index.ts b/src/ui/button/index.ts similarity index 100% rename from src/components/button/index.ts rename to src/ui/button/index.ts diff --git a/src/components/button/text-button/index.ts b/src/ui/button/text-button/index.ts similarity index 100% rename from src/components/button/text-button/index.ts rename to src/ui/button/text-button/index.ts diff --git a/src/components/button/text-button/text-button.component.tsx b/src/ui/button/text-button/text-button.component.tsx similarity index 100% rename from src/components/button/text-button/text-button.component.tsx rename to src/ui/button/text-button/text-button.component.tsx diff --git a/src/components/button/text-button/text-button.spec.tsx b/src/ui/button/text-button/text-button.spec.tsx similarity index 100% rename from src/components/button/text-button/text-button.spec.tsx rename to src/ui/button/text-button/text-button.spec.tsx diff --git a/src/components/button/text-button/text-button.stories.tsx b/src/ui/button/text-button/text-button.stories.tsx similarity index 100% rename from src/components/button/text-button/text-button.stories.tsx rename to src/ui/button/text-button/text-button.stories.tsx diff --git a/src/components/card/card.component.tsx b/src/ui/card/card.component.tsx similarity index 100% rename from src/components/card/card.component.tsx rename to src/ui/card/card.component.tsx diff --git a/src/components/card/card.stories.tsx b/src/ui/card/card.stories.tsx similarity index 100% rename from src/components/card/card.stories.tsx rename to src/ui/card/card.stories.tsx diff --git a/src/components/card/index.ts b/src/ui/card/index.ts similarity index 100% rename from src/components/card/index.ts rename to src/ui/card/index.ts diff --git a/src/components/coords/coords-direction.component.tsx b/src/ui/coords/coords-direction.component.tsx similarity index 100% rename from src/components/coords/coords-direction.component.tsx rename to src/ui/coords/coords-direction.component.tsx diff --git a/src/components/coords/coords.component.tsx b/src/ui/coords/coords.component.tsx similarity index 100% rename from src/components/coords/coords.component.tsx rename to src/ui/coords/coords.component.tsx diff --git a/src/components/coords/coords.spec.tsx b/src/ui/coords/coords.spec.tsx similarity index 100% rename from src/components/coords/coords.spec.tsx rename to src/ui/coords/coords.spec.tsx diff --git a/src/components/coords/coords.stories.tsx b/src/ui/coords/coords.stories.tsx similarity index 100% rename from src/components/coords/coords.stories.tsx rename to src/ui/coords/coords.stories.tsx diff --git a/src/components/coords/index.ts b/src/ui/coords/index.ts similarity index 100% rename from src/components/coords/index.ts rename to src/ui/coords/index.ts diff --git a/src/components/date-format/date-format.component.tsx b/src/ui/date-format/date-format.component.tsx similarity index 100% rename from src/components/date-format/date-format.component.tsx rename to src/ui/date-format/date-format.component.tsx diff --git a/src/components/date-format/date-format.spec.tsx b/src/ui/date-format/date-format.spec.tsx similarity index 100% rename from src/components/date-format/date-format.spec.tsx rename to src/ui/date-format/date-format.spec.tsx diff --git a/src/components/date-format/date-format.stories.tsx b/src/ui/date-format/date-format.stories.tsx similarity index 100% rename from src/components/date-format/date-format.stories.tsx rename to src/ui/date-format/date-format.stories.tsx diff --git a/src/components/date-format/index.ts b/src/ui/date-format/index.ts similarity index 100% rename from src/components/date-format/index.ts rename to src/ui/date-format/index.ts diff --git a/src/components/distance/distance.component.tsx b/src/ui/distance/distance.component.tsx similarity index 100% rename from src/components/distance/distance.component.tsx rename to src/ui/distance/distance.component.tsx diff --git a/src/components/distance/distance.spec.tsx b/src/ui/distance/distance.spec.tsx similarity index 100% rename from src/components/distance/distance.spec.tsx rename to src/ui/distance/distance.spec.tsx diff --git a/src/components/distance/distance.stories.tsx b/src/ui/distance/distance.stories.tsx similarity index 100% rename from src/components/distance/distance.stories.tsx rename to src/ui/distance/distance.stories.tsx diff --git a/src/components/distance/index.ts b/src/ui/distance/index.ts similarity index 100% rename from src/components/distance/index.ts rename to src/ui/distance/index.ts diff --git a/src/components/divider/divider.component.tsx b/src/ui/divider/divider.component.tsx similarity index 100% rename from src/components/divider/divider.component.tsx rename to src/ui/divider/divider.component.tsx diff --git a/src/components/divider/divider.stories.tsx b/src/ui/divider/divider.stories.tsx similarity index 100% rename from src/components/divider/divider.stories.tsx rename to src/ui/divider/divider.stories.tsx diff --git a/src/components/divider/index.ts b/src/ui/divider/index.ts similarity index 100% rename from src/components/divider/index.ts rename to src/ui/divider/index.ts diff --git a/src/components/form-field/form-field.component.tsx b/src/ui/form-field/form-field.component.tsx similarity index 100% rename from src/components/form-field/form-field.component.tsx rename to src/ui/form-field/form-field.component.tsx diff --git a/src/components/form-field/form-field.spec.tsx b/src/ui/form-field/form-field.spec.tsx similarity index 100% rename from src/components/form-field/form-field.spec.tsx rename to src/ui/form-field/form-field.spec.tsx diff --git a/src/components/form-field/form-field.stories.tsx b/src/ui/form-field/form-field.stories.tsx similarity index 100% rename from src/components/form-field/form-field.stories.tsx rename to src/ui/form-field/form-field.stories.tsx diff --git a/src/components/form-field/index.ts b/src/ui/form-field/index.ts similarity index 100% rename from src/components/form-field/index.ts rename to src/ui/form-field/index.ts diff --git a/src/components/heading/heading.component.tsx b/src/ui/heading/heading.component.tsx similarity index 100% rename from src/components/heading/heading.component.tsx rename to src/ui/heading/heading.component.tsx diff --git a/src/components/heading/heading.stories.tsx b/src/ui/heading/heading.stories.tsx similarity index 100% rename from src/components/heading/heading.stories.tsx rename to src/ui/heading/heading.stories.tsx diff --git a/src/components/heading/index.ts b/src/ui/heading/index.ts similarity index 100% rename from src/components/heading/index.ts rename to src/ui/heading/index.ts diff --git a/src/components/index.ts b/src/ui/index.ts similarity index 84% rename from src/components/index.ts rename to src/ui/index.ts index 3dfe0c2..b84b63a 100644 --- a/src/components/index.ts +++ b/src/ui/index.ts @@ -11,7 +11,10 @@ export * from './inline-property'; export * from './input'; export * from './legend'; export * from './loader'; +export * from './notification'; export * from './property'; +export * from './stack'; export * from './status'; export * from './temperature'; export * from './text-field'; +export * from './typography'; diff --git a/src/components/inline-property/index.ts b/src/ui/inline-property/index.ts similarity index 100% rename from src/components/inline-property/index.ts rename to src/ui/inline-property/index.ts diff --git a/src/components/inline-property/inline-property.component.tsx b/src/ui/inline-property/inline-property.component.tsx similarity index 100% rename from src/components/inline-property/inline-property.component.tsx rename to src/ui/inline-property/inline-property.component.tsx diff --git a/src/components/inline-property/inline-property.stories.tsx b/src/ui/inline-property/inline-property.stories.tsx similarity index 100% rename from src/components/inline-property/inline-property.stories.tsx rename to src/ui/inline-property/inline-property.stories.tsx diff --git a/src/components/input/index.ts b/src/ui/input/index.ts similarity index 100% rename from src/components/input/index.ts rename to src/ui/input/index.ts diff --git a/src/components/input/input-icon-wrapper.component.tsx b/src/ui/input/input-icon-wrapper.component.tsx similarity index 100% rename from src/components/input/input-icon-wrapper.component.tsx rename to src/ui/input/input-icon-wrapper.component.tsx diff --git a/src/components/input/input.component.tsx b/src/ui/input/input.component.tsx similarity index 100% rename from src/components/input/input.component.tsx rename to src/ui/input/input.component.tsx diff --git a/src/components/input/input.spec.tsx b/src/ui/input/input.spec.tsx similarity index 100% rename from src/components/input/input.spec.tsx rename to src/ui/input/input.spec.tsx diff --git a/src/components/input/input.stories.tsx b/src/ui/input/input.stories.tsx similarity index 100% rename from src/components/input/input.stories.tsx rename to src/ui/input/input.stories.tsx diff --git a/src/components/legend/index.ts b/src/ui/legend/index.ts similarity index 100% rename from src/components/legend/index.ts rename to src/ui/legend/index.ts diff --git a/src/components/legend/legend.component.tsx b/src/ui/legend/legend.component.tsx similarity index 100% rename from src/components/legend/legend.component.tsx rename to src/ui/legend/legend.component.tsx diff --git a/src/components/legend/legend.stories.tsx b/src/ui/legend/legend.stories.tsx similarity index 100% rename from src/components/legend/legend.stories.tsx rename to src/ui/legend/legend.stories.tsx diff --git a/src/components/loader/index.ts b/src/ui/loader/index.ts similarity index 100% rename from src/components/loader/index.ts rename to src/ui/loader/index.ts diff --git a/src/components/loader/loader.component.tsx b/src/ui/loader/loader.component.tsx similarity index 100% rename from src/components/loader/loader.component.tsx rename to src/ui/loader/loader.component.tsx diff --git a/src/components/loader/loader.stories.tsx b/src/ui/loader/loader.stories.tsx similarity index 100% rename from src/components/loader/loader.stories.tsx rename to src/ui/loader/loader.stories.tsx diff --git a/src/ui/notification/index.ts b/src/ui/notification/index.ts new file mode 100644 index 0000000..4efd4c7 --- /dev/null +++ b/src/ui/notification/index.ts @@ -0,0 +1,2 @@ +export * from './notification-gateway.component'; +export * from './notification.component'; diff --git a/src/ui/notification/notification-gateway.component.tsx b/src/ui/notification/notification-gateway.component.tsx new file mode 100644 index 0000000..8f27f2e --- /dev/null +++ b/src/ui/notification/notification-gateway.component.tsx @@ -0,0 +1,20 @@ +import React from 'react'; + +import { useNotifications } from '../../context'; +import { Notification } from './notification.component'; + +export const NotificationGateway = () => { + const { notifications, removeNotification } = useNotifications(); + + return ( +
+ {notifications.map(({ id, ...notification }) => ( + removeNotification(id)} + /> + ))} +
+ ); +}; diff --git a/src/ui/notification/notification-icon.component.tsx b/src/ui/notification/notification-icon.component.tsx new file mode 100644 index 0000000..05877f5 --- /dev/null +++ b/src/ui/notification/notification-icon.component.tsx @@ -0,0 +1,35 @@ +import React, { useMemo } from 'react'; +import { MdCheck, MdClose, MdInfo } from 'react-icons/md'; +import clsx from 'clsx'; + +import { NotificationStatus } from './notification.model'; + +type NotificationIconProps = { + status: NotificationStatus; +}; + +export const NotificationIcon = ({ status }: NotificationIconProps) => { + const icon = useMemo(() => { + if (status !== undefined) { + switch (status) { + case 'error': + return ; + case 'success': + return ; + default: + return ( + + ); + } + } + + return ; + }, [status]); + + return
{icon}
; +}; diff --git a/src/ui/notification/notification.component.tsx b/src/ui/notification/notification.component.tsx new file mode 100644 index 0000000..e0219ad --- /dev/null +++ b/src/ui/notification/notification.component.tsx @@ -0,0 +1,61 @@ +import React, { useCallback } from 'react'; +import { MdClose } from 'react-icons/md'; +import clsx from 'clsx'; + +import { useTimeout } from '../../hooks'; +import { Button } from '../button'; +import { Typography } from '../typography'; +import { Notification as NotificationModel } from './notification.model'; +import { NotificationIcon } from './notification-icon.component'; + +export type NotificationProps = { + className?: string; + onClear: () => void; +} & Omit; + +export const Notification = ({ + message, + action, + status = 'default', + className, + onClear, +}: NotificationProps) => { + const handleActionClick = useCallback(() => { + onClear(); + action?.onClick(); + }, [action, onClear]); + + useTimeout({ duration: 10000, onTimeout: onClear }); + + return ( +
+ +
+ {message} +
+
+ {action && ( + + )} + + + {() => } + +
+
+ ); +}; diff --git a/src/ui/notification/notification.model.ts b/src/ui/notification/notification.model.ts new file mode 100644 index 0000000..28392d8 --- /dev/null +++ b/src/ui/notification/notification.model.ts @@ -0,0 +1,20 @@ +import { ReactNode } from 'react'; + +export type NotificationStatus = + | 'default' + | 'success' + | 'warning' + | 'error' + | 'info'; + +export type Notification = { + id: string; + message: ReactNode; + action?: NotificationAction; + status?: NotificationStatus; +}; + +export type NotificationAction = { + label: string; + onClick: () => void; +}; diff --git a/src/ui/notification/notification.spec.tsx b/src/ui/notification/notification.spec.tsx new file mode 100644 index 0000000..03625d6 --- /dev/null +++ b/src/ui/notification/notification.spec.tsx @@ -0,0 +1,80 @@ +import React, { ReactNode } from 'react'; +import { screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; + +import { useNotifications } from '../../context'; +import { renderWithProviders } from '../../utils'; +import { Button } from '../button'; +import { Typography } from '../typography'; +import { NotificationAction } from './notification.model'; + +type TestComponentProps = { + message: ReactNode; + action?: NotificationAction; +}; + +const TestComponent = ({ message, action }: TestComponentProps) => { + const { addNotification } = useNotifications(); + + return ( + + addNotification({ + message, + action, + }) + } + /> + ); +}; + +const renderNotification = ({ + message = , + action, +}: Partial = {}) => + renderWithProviders(); + +test('displays the provided notification message', async () => { + renderNotification(); + + userEvent.click(screen.getByRole('button', { name: 'Show Notification' })); + + expect(screen.getByText('This is a notification!')).toBeInTheDocument(); +}); + +test('displays multiple notifications at a time', async () => { + renderNotification(); + + userEvent.click(screen.getByRole('button', { name: 'Show Notification' })); + userEvent.click(screen.getByRole('button', { name: 'Show Notification' })); + + expect(screen.queryAllByText('This is a notification!')).toHaveLength(2); +}); + +test('closes after clicking on the Close button', async () => { + renderNotification(); + userEvent.click(screen.getByRole('button', { name: 'Show Notification' })); + + expect(screen.getByText('This is a notification!')).toBeInTheDocument(); + + userEvent.click(screen.getByTestId('VALHALLA.ACTIONS.CLOSE')); + + expect(screen.queryByText('This is a notification!')).not.toBeInTheDocument(); +}); + +test('displays the action button and invokes the handler on click', async () => { + const onClick = jest.fn(); + renderNotification({ + action: { + label: 'STORY_BOOK.NOTIFICATION.ACTION', + onClick, + }, + }); + userEvent.click(screen.getByRole('button', { name: 'Show Notification' })); + + userEvent.click(screen.getByRole('button', { name: 'Action' })); + + expect(onClick).toHaveBeenCalled(); +}); diff --git a/src/ui/notification/notification.stories.tsx b/src/ui/notification/notification.stories.tsx new file mode 100644 index 0000000..1904d58 --- /dev/null +++ b/src/ui/notification/notification.stories.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +import { Stack } from '../stack'; +import { Typography } from '../typography'; +import { Notification } from './notification.component'; +import { NotificationStatus } from './notification.model'; + +export default { + title: 'Molecules/Notification', + component: Notification, +} as ComponentMeta; + +export const Default: ComponentStory = () => { + const statuses: NotificationStatus[] = [ + 'success', + 'error', + 'warning', + 'info', + 'default', + ]; + + return ( + + {statuses.map((status) => ( + + } + status={status} + onClear={() => {}} + /> + ))} + + ); +}; diff --git a/src/components/property/index.ts b/src/ui/property/index.ts similarity index 100% rename from src/components/property/index.ts rename to src/ui/property/index.ts diff --git a/src/components/property/property.component.tsx b/src/ui/property/property.component.tsx similarity index 100% rename from src/components/property/property.component.tsx rename to src/ui/property/property.component.tsx diff --git a/src/components/property/property.stories.tsx b/src/ui/property/property.stories.tsx similarity index 100% rename from src/components/property/property.stories.tsx rename to src/ui/property/property.stories.tsx diff --git a/src/ui/stack/index.ts b/src/ui/stack/index.ts new file mode 100644 index 0000000..0e9fc33 --- /dev/null +++ b/src/ui/stack/index.ts @@ -0,0 +1,2 @@ +export * from './stack.component'; +export * from './stack.model'; diff --git a/src/ui/stack/stack.component.tsx b/src/ui/stack/stack.component.tsx new file mode 100644 index 0000000..c0fb7ea --- /dev/null +++ b/src/ui/stack/stack.component.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import clsx from 'clsx'; + +import { StackAlign, StackJustify, StackSpacing } from './stack.model'; +import { getStackClasses } from './stack.styles'; + +export type StackProps = { + vertical?: boolean; + wrap?: boolean; + spacing?: StackSpacing; + items?: StackAlign; + justify?: StackJustify; + className?: string; +}; + +export const Stack: React.FC = ({ + children, + className, + ...props +}) =>
{children}
; diff --git a/src/ui/stack/stack.model.tsx b/src/ui/stack/stack.model.tsx new file mode 100644 index 0000000..c806762 --- /dev/null +++ b/src/ui/stack/stack.model.tsx @@ -0,0 +1,9 @@ +export type StackSpacing = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; +export type StackAlign = 'start' | 'end' | 'center' | 'stretch'; +export type StackJustify = + | 'start' + | 'center' + | 'end' + | 'between' + | 'around' + | 'evenly'; diff --git a/src/ui/stack/stack.spec.tsx b/src/ui/stack/stack.spec.tsx new file mode 100644 index 0000000..6ac66c3 --- /dev/null +++ b/src/ui/stack/stack.spec.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { axe } from 'jest-axe'; + +import { Stack } from './stack.component'; + +describe('Stack', () => { + test('should render default Stack', async () => { + const { container } = render( + +
test
+
+ ); + + expect(screen.getByText('test')).toBeInTheDocument(); + expect(await axe(container)).toHaveNoViolations(); + }); +}); diff --git a/src/ui/stack/stack.stories.tsx b/src/ui/stack/stack.stories.tsx new file mode 100644 index 0000000..8ad4a31 --- /dev/null +++ b/src/ui/stack/stack.stories.tsx @@ -0,0 +1,64 @@ +import React from 'react'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +import { Stack } from './stack.component'; + +export default { + title: 'Atoms/Stack', + component: Stack, + argTypes: { + vertical: { + control: { + type: 'boolean', + }, + }, + wrap: { + control: { + type: 'boolean', + }, + }, + spacing: { + control: { + type: 'number', + min: 0, + max: 9, + }, + }, + alignItems: { + options: ['start', 'center', 'end', 'stretch'], + control: { + type: 'radio', + }, + }, + justify: { + options: ['start', 'center', 'end', 'between', 'around', 'evenly'], + control: { + type: 'radio', + }, + }, + className: { + control: { + type: 'text', + }, + }, + }, +} as ComponentMeta; + +const Box = ({ label }: { label: string }) => ( +
{label}
+); + +const Template: ComponentStory = (args) => ( + + + + + +); + +export const Default = Template.bind({}); +Default.args = { + spacing: 2, + vertical: false, + className: 'border', +}; diff --git a/src/ui/stack/stack.styles.ts b/src/ui/stack/stack.styles.ts new file mode 100644 index 0000000..12cff6c --- /dev/null +++ b/src/ui/stack/stack.styles.ts @@ -0,0 +1,41 @@ +import clsx from 'clsx'; + +import { StackProps } from './stack.component'; + +export const getStackClasses = ({ + spacing = 2, + vertical = false, + wrap = false, + items = 'stretch', + justify = 'start', +}: StackProps) => + clsx( + 'flex', + + { 'flex-col': vertical, 'flex-wrap': wrap }, + { + 'gap-1': spacing === 1, + 'gap-2': spacing === 2, + 'gap-3': spacing === 3, + 'gap-4': spacing === 4, + 'gap-5': spacing === 5, + 'gap-6': spacing === 6, + 'gap-7': spacing === 7, + 'gap-8': spacing === 8, + 'gap-9': spacing === 9, + }, + { + 'items-stretch': items === 'stretch', + 'items-start': items === 'start', + 'items-center': items === 'center', + 'items-end': items === 'end', + }, + { + 'justify-start': justify === 'start', + 'justify-center': justify === 'center', + 'justify-end': justify === 'end', + 'justify-between': justify === 'between', + 'justify-around': justify === 'around', + 'justify-evenly': justify === 'evenly', + } + ); diff --git a/src/components/status/index.ts b/src/ui/status/index.ts similarity index 100% rename from src/components/status/index.ts rename to src/ui/status/index.ts diff --git a/src/components/status/status.component.tsx b/src/ui/status/status.component.tsx similarity index 100% rename from src/components/status/status.component.tsx rename to src/ui/status/status.component.tsx diff --git a/src/components/status/status.constant.ts b/src/ui/status/status.constant.ts similarity index 100% rename from src/components/status/status.constant.ts rename to src/ui/status/status.constant.ts diff --git a/src/components/status/status.stories.tsx b/src/ui/status/status.stories.tsx similarity index 100% rename from src/components/status/status.stories.tsx rename to src/ui/status/status.stories.tsx diff --git a/src/components/temperature/index.ts b/src/ui/temperature/index.ts similarity index 100% rename from src/components/temperature/index.ts rename to src/ui/temperature/index.ts diff --git a/src/components/temperature/temperature.component.tsx b/src/ui/temperature/temperature.component.tsx similarity index 100% rename from src/components/temperature/temperature.component.tsx rename to src/ui/temperature/temperature.component.tsx diff --git a/src/components/temperature/temperature.constant.ts b/src/ui/temperature/temperature.constant.ts similarity index 100% rename from src/components/temperature/temperature.constant.ts rename to src/ui/temperature/temperature.constant.ts diff --git a/src/components/temperature/temperature.spec.tsx b/src/ui/temperature/temperature.spec.tsx similarity index 100% rename from src/components/temperature/temperature.spec.tsx rename to src/ui/temperature/temperature.spec.tsx diff --git a/src/components/temperature/temperature.stories.tsx b/src/ui/temperature/temperature.stories.tsx similarity index 100% rename from src/components/temperature/temperature.stories.tsx rename to src/ui/temperature/temperature.stories.tsx diff --git a/src/components/temperature/temperature.util.ts b/src/ui/temperature/temperature.util.ts similarity index 100% rename from src/components/temperature/temperature.util.ts rename to src/ui/temperature/temperature.util.ts diff --git a/src/components/text-field/index.ts b/src/ui/text-field/index.ts similarity index 100% rename from src/components/text-field/index.ts rename to src/ui/text-field/index.ts diff --git a/src/components/text-field/text-field.component.tsx b/src/ui/text-field/text-field.component.tsx similarity index 100% rename from src/components/text-field/text-field.component.tsx rename to src/ui/text-field/text-field.component.tsx diff --git a/src/ui/typography/index.ts b/src/ui/typography/index.ts new file mode 100644 index 0000000..6b4f8a1 --- /dev/null +++ b/src/ui/typography/index.ts @@ -0,0 +1,2 @@ +export * from './typography.model'; +export * from './typography.component'; diff --git a/src/ui/typography/typography.component.tsx b/src/ui/typography/typography.component.tsx new file mode 100644 index 0000000..9f07c82 --- /dev/null +++ b/src/ui/typography/typography.component.tsx @@ -0,0 +1,51 @@ +import React, { forwardRef } from 'react'; +import { FormattedMessage } from 'react-intl'; + +import { TestId } from '../../models'; +import { + FormattedMessageProps, + TypographyAs, + TypographyAsProps, + TypographyVariant, +} from './typography.model'; +import { extractProps, getTypographyVariantComponent } from './typography.util'; + +export type TypographyProps = + FormattedMessageProps & + TypographyAsProps & + TestId & { + as?: As; + variant?: TypographyVariant; + className?: string; + }; + +export type TypographyRefModel = ( + props: TypographyProps, + ref?: React.Ref +) => React.ReactElement | null; + +const TypographyRef: TypographyRefModel = (props, ref) => { + const { as, id, variant } = props; + const Component = as ?? getTypographyVariantComponent(variant); + const [componentProps, translationProps] = extractProps(props); + + if ('children' in props) { + return ( + + {(...translation) => ( + + {props.children({ id }, ...translation)} + + )} + + ); + } + + return ( + + + + ); +}; + +export const Typography = forwardRef(TypographyRef) as TypographyRefModel; diff --git a/src/ui/typography/typography.model.ts b/src/ui/typography/typography.model.ts new file mode 100644 index 0000000..ab82fce --- /dev/null +++ b/src/ui/typography/typography.model.ts @@ -0,0 +1,52 @@ +import { FormattedMessage } from 'react-intl'; + +import { Button } from './../button'; + +type AllowedTags = + | 'strong' + | 'span' + | 'div' + | 'p' + | 'em' + | 'label' + | 'h1' + | 'h2' + | 'h3' + | 'h4' + | 'h5' + | 'h6'; + +type AllowedComponents = typeof Button; + +export type TypographyAs = AllowedTags | AllowedComponents; + +export type TypographyVariant = + | 'heading1' + | 'heading2' + | 'heading3' + | 'heading4' + | 'subtitle1' + | 'subtitle2' + | 'body' + | 'caption'; + +export type TypographyAsProps = + | Omit< + As extends AllowedTags + ? JSX.IntrinsicElements[As] + : React.ComponentProps, + 'children' + > + | { + children: ( + extraParams: { id?: string }, + ...originalParams: React.ReactNode[] + ) => React.ReactNode; + }; + +export type FormattedMessageProps = Omit< + React.ComponentProps, + 'children' | 'tagName' +> & { + translationKey: string; +}; diff --git a/src/ui/typography/typography.spec.tsx b/src/ui/typography/typography.spec.tsx new file mode 100644 index 0000000..f35e13d --- /dev/null +++ b/src/ui/typography/typography.spec.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import { screen } from '@testing-library/react'; + +import { renderWithProviders } from '../../utils'; +import { Typography } from './typography.component'; +import { TypographyAs, TypographyVariant } from './typography.model'; +import { getTypographyVariantComponent } from './typography.util'; + +const translations = { + FORMATTED_MESSAGE_ID: 'FORMATTED_MESSAGE_ID', +}; + +describe('Typography', () => { + describe('Utils', () => { + const componentTestCases: { + variant: TypographyVariant; + component: TypographyAs; + }[] = [ + { variant: 'body', component: 'p' }, + { variant: 'caption', component: 'p' }, + { variant: 'heading1', component: 'h1' }, + { variant: 'heading2', component: 'h2' }, + { variant: 'heading3', component: 'h3' }, + { variant: 'heading4', component: 'h4' }, + { variant: 'subtitle1', component: 'h5' }, + { variant: 'subtitle2', component: 'h6' }, + ]; + + test.each(componentTestCases)( + 'getTypographyVariantComponent should return the correct components', + ({ variant, component }) => + expect(getTypographyVariantComponent(variant)).toBe(component) + ); + }); + + test('should render default typography in span', () => { + const { container } = renderWithProviders( + , + { translations } + ); + + expect(container.querySelector('span')).toBeInTheDocument(); + expect(screen.getByText('FORMATTED_MESSAGE_ID')).toBeInTheDocument(); + expect(screen.getByTestId('FORMATTED_MESSAGE_ID')).toBeInTheDocument(); + }); + + test('should render typography as a div', () => { + const { container } = renderWithProviders( + , + { translations } + ); + + expect(container.querySelector('span')).not.toBeInTheDocument(); + expect(container.querySelector('div')).toBeInTheDocument(); + expect(screen.getByText('FORMATTED_MESSAGE_ID')).toBeInTheDocument(); + expect(screen.getByTestId('FORMATTED_MESSAGE_ID')).toBeInTheDocument(); + }); + + test('should render formatted message with children', () => { + const { container } = renderWithProviders( + + {(extraParams, placeholder) => ( +
{placeholder}
+ )} +
, + { translations } + ); + + expect(container.querySelector('div')).toBeInTheDocument(); + expect(screen.getByText('FORMATTED_MESSAGE_ID')).toBeInTheDocument(); + expect(screen.getByTestId('FORMATTED_MESSAGE_ID')).toBeInTheDocument(); + }); +}); diff --git a/src/ui/typography/typography.stories.tsx b/src/ui/typography/typography.stories.tsx new file mode 100644 index 0000000..e6ae948 --- /dev/null +++ b/src/ui/typography/typography.stories.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { ComponentMeta, ComponentStory } from '@storybook/react'; + +import { Typography } from './typography.component'; +import { TypographyVariant } from './typography.model'; + +export default { + title: 'Atoms/Typography', + component: Typography, +} as ComponentMeta; + +const typographyEntries: [string, string][] = [ + ['heading1', 'STORY_BOOK.HEADING_ONE'], + ['heading2', 'STORY_BOOK.HEADING_TWO'], + ['heading3', 'STORY_BOOK.HEADING_THREE'], + ['heading4', 'STORY_BOOK.HEADING_FOUR'], + ['subtitle1', 'STORY_BOOK.SUBTITLE_ONE'], + ['subtitle2', 'STORY_BOOK.SUBTITLE_TWO'], + ['body', 'STORY_BOOK.BODY'], + ['caption', 'STORY_BOOK.CAPTION'], +]; + +export const Default: ComponentStory = () => ( +
    + {typographyEntries.map(([variant, title]) => ( +
  • + +
  • + ))} +
+); + +export const Custom: ComponentStory = () => ( + +); diff --git a/src/ui/typography/typography.styles.ts b/src/ui/typography/typography.styles.ts new file mode 100644 index 0000000..034f36f --- /dev/null +++ b/src/ui/typography/typography.styles.ts @@ -0,0 +1,21 @@ +import { TypographyVariant } from './typography.model'; + +const isHeading = (variant: TypographyVariant) => + ['heading1', 'heading2', 'heading3', 'heading4'].includes(variant); + +const isBold = (variant: TypographyVariant) => + ['subtitle1', 'subtitle2'].includes(variant); + +export const getTypographyVariantStyles = (variant: TypographyVariant) => ({ + 'tracking-wide': isHeading(variant), + 'font-normal': !isBold(variant), + 'font-bold': isBold(variant), + 'text-4xl': variant === 'heading1', + 'text-3xl': variant === 'heading2', + 'text-2xl': variant === 'heading3', + 'text-xl': variant === 'heading4', + 'text-lg': variant === 'subtitle1', + 'text-md text-neutral-400': variant === 'subtitle2', + 'text-md': variant === 'body', + 'text-sm text-neutral-400': variant === 'caption', +}); diff --git a/src/ui/typography/typography.util.tsx b/src/ui/typography/typography.util.tsx new file mode 100644 index 0000000..f326340 --- /dev/null +++ b/src/ui/typography/typography.util.tsx @@ -0,0 +1,53 @@ +import clsx from 'clsx'; + +import { TypographyProps } from './typography.component'; +import { TypographyAs, TypographyVariant } from './typography.model'; +import { getTypographyVariantStyles } from './typography.styles'; + +export const getTypographyVariantComponent = ( + variant?: TypographyVariant +): TypographyAs => { + switch (variant) { + case 'body': + case 'caption': + return 'p'; + case 'heading1': + return 'h1'; + case 'heading2': + return 'h2'; + case 'heading3': + return 'h3'; + case 'heading4': + return 'h4'; + case 'subtitle1': + return 'h5'; + case 'subtitle2': + return 'h6'; + default: + return 'span'; + } +}; + +export const extractProps = ({ + id, + translationKey, + values, + description, + defaultMessage, + as, + variant = 'body', + className, + ...props +}: TypographyProps) => [ + { + 'data-testid': translationKey || (props['data-testid'] ?? 'typography'), + className: clsx(getTypographyVariantStyles(variant), className), + ...(props as any), + }, + { + id: translationKey, + values, + description, + defaultMessage, + }, +]; diff --git a/src/utils/index.ts b/src/utils/index.ts index 410926c..f914989 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1 +1,2 @@ export * from './distance.util'; +export * from './test.utils'; diff --git a/src/utils/test.utils.tsx b/src/utils/test.utils.tsx new file mode 100644 index 0000000..e1d9849 --- /dev/null +++ b/src/utils/test.utils.tsx @@ -0,0 +1,33 @@ +import React, { ReactElement, ReactNode } from 'react'; +import { render } from '@testing-library/react'; + +import { Formatting, ValhallaProvider } from '../context'; +import { STORYBOOK_LOCALES } from '../i18n/i18n.constant'; + +type TestRenderConfig = { + formatting?: Formatting; + translations?: Record; +}; + +type DefaultTestProvidersConfig = { + children: ReactNode; +} & TestRenderConfig; + +export const DefaultTestProviders = ({ + children, + formatting, + translations, +}: DefaultTestProvidersConfig) => ( + + {children} + +); + +export const renderWithProviders = ( + ui: ReactElement, + config: TestRenderConfig = {} +) => render({ui}); diff --git a/tsconfig.json b/tsconfig.json index 2d7419f..47f8df8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,6 +30,7 @@ // error out if import and file system have a casing mismatch. Recommended by TS "forceConsistentCasingInFileNames": true, // `tsdx build` ignores this option, but it is commonly used when type-checking separately with `tsc` - "noEmit": true + "noEmit": true, + "resolveJsonModule": true } } diff --git a/yarn.lock b/yarn.lock index 29bd2a0..1caf6d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -481,7 +481,7 @@ "@babel/helper-create-class-features-plugin" "^7.16.10" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-private-property-in-object@^7.16.7": +"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== @@ -1093,7 +1093,7 @@ core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== @@ -1426,6 +1426,76 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@formatjs/ecma402-abstract@1.11.3": + version "1.11.3" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.3.tgz#f25276dfd4ef3dac90da667c3961d8aa9732e384" + integrity sha512-kP/Buv5vVFMAYLHNvvUzr0lwRTU0u2WTy44Tqwku1X3C3lJ5dKqDCYVqA8wL+Y19Bq+MwHgxqd5FZJRCIsLRyQ== + dependencies: + "@formatjs/intl-localematcher" "0.2.24" + tslib "^2.1.0" + +"@formatjs/fast-memoize@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz#e6f5aee2e4fd0ca5edba6eba7668e2d855e0fc21" + integrity sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg== + dependencies: + tslib "^2.1.0" + +"@formatjs/icu-messageformat-parser@2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.18.tgz#b09e8f16b88e988fd125e7c5810300e8a6dd2c42" + integrity sha512-vquIzsAJJmZ5jWVH8dEgUKcbG4yu3KqtyPet+q35SW5reLOvblkfeCXTRW2TpIwNXzdVqsJBwjbTiRiSU9JxwQ== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/icu-skeleton-parser" "1.3.5" + tslib "^2.1.0" + +"@formatjs/icu-skeleton-parser@1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.5.tgz#babc93a1c36383cf87cbb3d2f2145d26c2f7cb40" + integrity sha512-Nhyo2/6kG7ZfgeEfo02sxviOuBcvtzH6SYUharj3DLCDJH3A/4OxkKcmx/2PWGX4bc6iSieh+FA94CsKDxnZBQ== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + tslib "^2.1.0" + +"@formatjs/intl-displaynames@5.4.2": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-5.4.2.tgz#feb6b41087a88286d178032490a8ca78bafd4c56" + integrity sha512-SLesCDan9NCMqBbHPXMEwqAcPn3tnbQw0sv0rssH1JQDLDUQYwKXL93kz30X3yskTyQS7N+pd47bhoIe3kbXyw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/intl-localematcher" "0.2.24" + tslib "^2.1.0" + +"@formatjs/intl-listformat@6.5.2": + version "6.5.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-6.5.2.tgz#7fbc310db89e866250e34084e914894c67e09254" + integrity sha512-/IYagQJkzTvpBlhhaysGYNgM3o72WBg1ZWZcpookkgXEJbINwLP5kVagHxmgxffYKs1CDzQ8rmKHghu2qR/7zw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/intl-localematcher" "0.2.24" + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.24": + version "0.2.24" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.24.tgz#b49fd753c0f54421f26a3c1d0e9cf98a3966e78f" + integrity sha512-K/HRGo6EMnCbhpth/y3u4rW4aXkmQNqRe1L2G+Y5jNr3v0gYhvaucV8WixNju/INAMbPBlbsRBRo/nfjnoOnxQ== + dependencies: + tslib "^2.1.0" + +"@formatjs/intl@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.0.0.tgz#d003f7c5bdb84c0cbeb86d50695a7a87da6bf272" + integrity sha512-EVVIhDeFVBxy7ej3IZFM/PNknM5QkGPUjMbl9PZvoB5q1/zmPQzTcDSqYxCEK+XfkrfT6XB1gHvfum+O8ASI1Q== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/fast-memoize" "1.2.1" + "@formatjs/icu-messageformat-parser" "2.0.18" + "@formatjs/intl-displaynames" "5.4.2" + "@formatjs/intl-listformat" "6.5.2" + intl-messageformat "9.11.4" + tslib "^2.1.0" + "@gar/promisify@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" @@ -2030,6 +2100,188 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== +"@radix-ui/popper@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/popper/-/popper-0.1.0.tgz#c387a38f31b7799e1ea0d2bb1ca0c91c2931b063" + integrity sha512-uzYeElL3w7SeNMuQpXiFlBhTT+JyaNMCwDfjKkrzugEcYrf5n52PHqncNdQPUtR42hJh8V9FsqyEDbDxkeNjJQ== + dependencies: + "@babel/runtime" "^7.13.10" + csstype "^3.0.4" + +"@radix-ui/primitive@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-0.1.0.tgz#6206b97d379994f0d1929809db035733b337e543" + integrity sha512-tqxZKybwN5Fa3VzZry4G6mXAAb9aAqKmPtnVbZpL0vsBwvOHTBwsjHVPXylocYLwEtBY9SCe665bYnNB515uoA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-arrow@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-0.1.4.tgz#a871448a418cd3507d83840fdd47558cb961672b" + integrity sha512-BB6XzAb7Ml7+wwpFdYVtZpK1BlMgqyafSQNGzhIpSZ4uXvXOHPlR5GP8M449JkeQzgQjv9Mp1AsJxFC0KuOtuA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "0.1.4" + +"@radix-ui/react-compose-refs@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz#cff6e780a0f73778b976acff2c2a5b6551caab95" + integrity sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-context@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-0.1.1.tgz#06996829ea124d9a1bc1dbe3e51f33588fab0875" + integrity sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-id@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-0.1.5.tgz#010d311bedd5a2884c1e9bb6aaaa4e6cc1d1d3b8" + integrity sha512-IPc4H/63bes0IZ1GJJozSEkSWcDyhNGtKFWUpJ+XtaLyQ1X3x7Mf6fWwWhDcpqlYEP+5WtAvfqcyEsyjP+ZhBQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "0.1.0" + +"@radix-ui/react-popper@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-0.1.4.tgz#dfc055dcd7dfae6a2eff7a70d333141d15a5d029" + integrity sha512-18gDYof97t8UQa7zwklG1Dr8jIdj3u+rVOQLzPi9f5i1YQak/pVGkaqw8aY+iDUknKKuZniTk/7jbAJUYlKyOw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/popper" "0.1.0" + "@radix-ui/react-arrow" "0.1.4" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-rect" "0.1.1" + "@radix-ui/react-use-size" "0.1.1" + "@radix-ui/rect" "0.1.1" + +"@radix-ui/react-portal@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-0.1.4.tgz#17bdce3d7f1a9a0b35cb5e935ab8bc562441a7d2" + integrity sha512-MO0wRy2eYRTZ/CyOri9NANCAtAtq89DEtg90gicaTlkCfdqCLEBsLb+/q66BZQTr3xX/Vq01nnVfc/TkCqoqvw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-layout-effect" "0.1.0" + +"@radix-ui/react-presence@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-0.1.2.tgz#9f11cce3df73cf65bc348e8b76d891f0d54c1fe3" + integrity sha512-3BRlFZraooIUfRlyN+b/Xs5hq1lanOOo/+3h6Pwu2GMFjkGKKa4Rd51fcqGqnVlbr3jYg+WLuGyAV4KlgqwrQw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-use-layout-effect" "0.1.0" + +"@radix-ui/react-primitive@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz#6c233cf08b0cb87fecd107e9efecb3f21861edc1" + integrity sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-slot" "0.1.2" + +"@radix-ui/react-slot@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-0.1.2.tgz#e6f7ad9caa8ce81cc8d532c854c56f9b8b6307c8" + integrity sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "0.1.0" + +"@radix-ui/react-tooltip@^0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-0.1.7.tgz#6f8c00d6e489565d14abf209ce0fb8853c8c8ee3" + integrity sha512-eiBUsVOHenZ0JR16tl970bB0DafJBz6mFgSGfIGIVpflFj0LIsIDiLMsYyvYdx1KwwsIUDTEZtxcPm/sWjPzqA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "0.1.0" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-id" "0.1.5" + "@radix-ui/react-popper" "0.1.4" + "@radix-ui/react-portal" "0.1.4" + "@radix-ui/react-presence" "0.1.2" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-slot" "0.1.2" + "@radix-ui/react-use-controllable-state" "0.1.0" + "@radix-ui/react-use-escape-keydown" "0.1.0" + "@radix-ui/react-use-previous" "0.1.1" + "@radix-ui/react-use-rect" "0.1.1" + "@radix-ui/react-visually-hidden" "0.1.4" + +"@radix-ui/react-use-callback-ref@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-0.1.0.tgz#934b6e123330f5b3a6b116460e6662cbc663493f" + integrity sha512-Va041McOFFl+aV+sejvl0BS2aeHx86ND9X/rVFmEFQKTXCp6xgUK0NGUAGcgBlIjnJSbMYPGEk1xKSSlVcN2Aw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-controllable-state@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-0.1.0.tgz#4fced164acfc69a4e34fb9d193afdab973a55de1" + integrity sha512-zv7CX/PgsRl46a52Tl45TwqwVJdmqnlQEQhaYMz/yBOD2sx2gCkCFSoF/z9mpnYWmS6DTLNTg5lIps3fV6EnXg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "0.1.0" + +"@radix-ui/react-use-escape-keydown@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-0.1.0.tgz#dc80cb3753e9d1bd992adbad9a149fb6ea941874" + integrity sha512-tDLZbTGFmvXaazUXXv8kYbiCcbAE8yKgng9s95d8fCO+Eundv0Jngbn/hKPhDDs4jj9ChwRX5cDDnlaN+ugYYQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "0.1.0" + +"@radix-ui/react-use-layout-effect@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz#ebf71bd6d2825de8f1fbb984abf2293823f0f223" + integrity sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-previous@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-0.1.1.tgz#0226017f72267200f6e832a7103760e96a6db5d0" + integrity sha512-O/ZgrDBr11dR8rhO59ED8s5zIXBRFi8MiS+CmFGfi7MJYdLbfqVOmQU90Ghf87aifEgWe6380LA69KBneaShAg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-rect@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-0.1.1.tgz#6c15384beee59c086e75b89a7e66f3d2e583a856" + integrity sha512-kHNNXAsP3/PeszEmM/nxBBS9Jbo93sO+xuMTcRfwzXsmxT5gDXQzAiKbZQ0EecCPtJIzqvr7dlaQi/aP1PKYqQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/rect" "0.1.1" + +"@radix-ui/react-use-size@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-0.1.1.tgz#f6b75272a5d41c3089ca78c8a2e48e5f204ef90f" + integrity sha512-pTgWM5qKBu6C7kfKxrKPoBI2zZYZmp2cSXzpUiGM3qEBQlMLtYhaY2JXdXUCxz+XmD1YEjc8oRwvyfsD4AG4WA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-visually-hidden@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-0.1.4.tgz#6c75eae34fb5d084b503506fbfc05587ced05f03" + integrity sha512-K/q6AEEzqeeEq/T0NPChvBqnwlp8Tl4NnQdrI/y8IOY7BRR+Ug0PEsVk6g48HJ7cA1//COugdxXXVVK/m0X1mA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "0.1.4" + +"@radix-ui/rect@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-0.1.1.tgz#95b5ba51f469bea6b1b841e2d427e17e37d38419" + integrity sha512-g3hnE/UcOg7REdewduRPAK88EPuLZtaq7sA9ouu8S+YEtnyFRI16jgv6GZYe3VMoQLL1T171ebmEPtDjyxWLzw== + dependencies: + "@babel/runtime" "^7.13.10" + "@reach/router@^1.2.1": version "1.3.4" resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c" @@ -2207,29 +2459,7 @@ "@size-limit/esbuild" "7.0.8" "@size-limit/file" "7.0.8" -"@storybook/addon-a11y@^6.4.12": - version "6.4.18" - resolved "https://registry.yarnpkg.com/@storybook/addon-a11y/-/addon-a11y-6.4.18.tgz#c61f71cd7b17aff408835ee35e29bf4a0716ece7" - integrity sha512-sqsA5pXXKKDsquSXu5KC8WxQ1gg5ZoNIltWRgmJCEt4a0bkGUzn2iz+uW/gbt4NOVWGPXKvmMBLT/q4Q9gb+og== - dependencies: - "@storybook/addons" "6.4.18" - "@storybook/api" "6.4.18" - "@storybook/channels" "6.4.18" - "@storybook/client-logger" "6.4.18" - "@storybook/components" "6.4.18" - "@storybook/core-events" "6.4.18" - "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/theming" "6.4.18" - axe-core "^4.2.0" - core-js "^3.8.2" - global "^4.4.0" - lodash "^4.17.21" - react-sizeme "^3.0.1" - regenerator-runtime "^0.13.7" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - -"@storybook/addon-actions@6.4.18", "@storybook/addon-actions@^6.4.12": +"@storybook/addon-actions@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.4.18.tgz#e997060e1b0af62f9f831301a56a3addfc1f1365" integrity sha512-qPw5qfbWPmyOdaXxAVAbdVLVVE31gRrkH0ESUps+FXVNypRz1/0lJ6M2VrtOHMrFbGBl94SALdqsHOx6OYZKwg== @@ -2342,7 +2572,59 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/addon-essentials@^6.4.18": +"@storybook/addon-docs@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-6.5.0-alpha.41.tgz#ce7c0e5ca9862cb1d71bef5b1803fb948bde314c" + integrity sha512-exTIc5jhEyg9l92scMEwPnK3Qot5qXFBSHcyxRJkp5v3kgEpAlgZJaYcc5GHQ2bhmjYDuapl0Mk8c65Te4gPuA== + dependencies: + "@babel/core" "^7.12.10" + "@babel/generator" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/plugin-transform-react-jsx" "^7.12.12" + "@babel/preset-env" "^7.12.11" + "@jest/transform" "^26.6.2" + "@mdx-js/loader" "^1.6.22" + "@mdx-js/mdx" "^1.6.22" + "@mdx-js/react" "^1.6.22" + "@storybook/addons" "6.5.0-alpha.41" + "@storybook/api" "6.5.0-alpha.41" + "@storybook/builder-webpack4" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/components" "6.5.0-alpha.41" + "@storybook/core" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + "@storybook/csf" "0.0.2--canary.87bc651.0" + "@storybook/csf-tools" "6.5.0-alpha.41" + "@storybook/node-logger" "6.5.0-alpha.41" + "@storybook/postinstall" "6.5.0-alpha.41" + "@storybook/preview-web" "6.5.0-alpha.41" + "@storybook/source-loader" "6.5.0-alpha.41" + "@storybook/store" "6.5.0-alpha.41" + "@storybook/theming" "6.5.0-alpha.41" + acorn "^7.4.1" + acorn-jsx "^5.3.1" + acorn-walk "^7.2.0" + core-js "^3.8.2" + doctrine "^3.0.0" + escodegen "^2.0.0" + fast-deep-equal "^3.1.3" + global "^4.4.0" + html-tags "^3.1.0" + js-string-escape "^1.0.1" + loader-utils "^2.0.0" + lodash "^4.17.21" + nanoid "^3.1.23" + p-limit "^3.1.0" + prettier ">=2.2.1 <=2.3.0" + prop-types "^15.7.2" + react-element-to-jsx-string "^14.3.4" + regenerator-runtime "^0.13.7" + remark-external-links "^8.0.0" + remark-slug "^6.0.0" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + +"@storybook/addon-essentials@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-6.4.18.tgz#0f8a90a53887bfd5dfc0d147d634bf0ae19a9a5d" integrity sha512-AWKF0Gn7HagzB4ZbZdSXauJ8rgjbIB0Y1jgNCYtReZ//9QDSmF9yrFE0fLJi8O0WBHiQOTeV8Vj+yooGGWRRWQ== @@ -2362,7 +2644,7 @@ regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" -"@storybook/addon-info@^5.3.21": +"@storybook/addon-info@5.3.21": version "5.3.21" resolved "https://registry.yarnpkg.com/@storybook/addon-info/-/addon-info-5.3.21.tgz#fc8fd61d0471f4743b32f5ae8e5b7c84b52ff112" integrity sha512-A/K9HzmoXMuOUxH3AozTvjNZwTlYVHob2OaDRfMza0gYMzG0tOrxqcdNTigeAWAjS//Z0G3enue6rHulQZK/+g== @@ -2383,7 +2665,7 @@ react-lifecycles-compat "^3.0.4" util-deprecate "^1.0.2" -"@storybook/addon-links@^6.4.18": +"@storybook/addon-links@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-6.4.18.tgz#edb61db6c291056f7d3c64566aea436a6796c50a" integrity sha512-yIbL57+tV1Ei2b7zTGU/T7muBFByTPm/8IN5SA5tSFYRTR9VtFuvBXco6I9Wz9GLN/REyVa4+AoDahokk7+vPQ== @@ -2431,7 +2713,7 @@ regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" -"@storybook/addon-postcss@^2.0.0": +"@storybook/addon-postcss@2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@storybook/addon-postcss/-/addon-postcss-2.0.0.tgz#ec61cb9bb2662f408072b35c466c7df801c28498" integrity sha512-Nt82A7e9zJH4+A+VzLKKswUfru+T6FJTakj4dccP0i8DSn7a0CkzRPrLuZBq8tg4voV6gD74bcDf3gViCVBGtA== @@ -2484,7 +2766,7 @@ global "^4.3.2" util-deprecate "^1.0.2" -"@storybook/addons@6.4.18", "@storybook/addons@^6.4.18": +"@storybook/addons@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.4.18.tgz#fc92a4a608680f2e182a5e896ed382792f6b774e" integrity sha512-fd3S79P4jJCYZNA2JxA1Xnkj0UlHGQ4Vg72aroWy4OQFlgGQor1LgPfM6RaJ9rh/4k4BXYPXsS7wzI0UWKG3Lw== @@ -2501,6 +2783,23 @@ global "^4.4.0" regenerator-runtime "^0.13.7" +"@storybook/addons@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.5.0-alpha.41.tgz#426af480c275e0b8f460947a419bc7edefbdab10" + integrity sha512-Dcs6Hr+rAVUFI82+S/Ra47TY7sc7FUDe6BaKJqRmfwfCSNqZlNruLUYSkxzlSH92Qzub1KGwYI2say2QIEBPNQ== + dependencies: + "@storybook/api" "6.5.0-alpha.41" + "@storybook/channels" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + "@storybook/csf" "0.0.2--canary.87bc651.0" + "@storybook/router" "6.5.0-alpha.41" + "@storybook/theming" "6.5.0-alpha.41" + "@types/webpack-env" "^1.16.0" + core-js "^3.8.2" + global "^4.4.0" + regenerator-runtime "^0.13.7" + "@storybook/api@5.3.21": version "5.3.21" resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.21.tgz#8f1772de53b65e1a65d2f0257463d621a8617c58" @@ -2550,6 +2849,29 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" +"@storybook/api@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.5.0-alpha.41.tgz#6e6ec5370606cd68faa9a2f2e168e4cfcf12724d" + integrity sha512-PbDRB1Y6iKCVsmrHlLEfA13/ZIxVM5HWr9dsa4XAVMwkYs951mXVWogZhLH3jkEtjuW897RLPi1faw46h6tEBg== + dependencies: + "@storybook/channels" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + "@storybook/csf" "0.0.2--canary.87bc651.0" + "@storybook/router" "6.5.0-alpha.41" + "@storybook/semver" "^7.3.2" + "@storybook/theming" "6.5.0-alpha.41" + 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 "^5.3.3" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + "@storybook/builder-webpack4@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.4.18.tgz#8bae72b9e982d35a5a9f2b7f9af9d85a9c2dc966" @@ -2625,6 +2947,81 @@ webpack-hot-middleware "^2.25.1" webpack-virtual-modules "^0.2.2" +"@storybook/builder-webpack4@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.5.0-alpha.41.tgz#390ceb8dc73e22a2c694cb8590daf168ed349e29" + integrity sha512-3/cTpLqXCgIdv6fO2/c1vGa4S8zWy0I6ByFffulPLAeb7zPYWJSV76Le7dZvHO1t6BxDKaKjOClNxYbB5GGP0A== + dependencies: + "@babel/core" "^7.12.10" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-decorators" "^7.12.12" + "@babel/plugin-proposal-export-default-from" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.12" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/preset-env" "^7.12.11" + "@babel/preset-react" "^7.12.10" + "@babel/preset-typescript" "^7.12.7" + "@storybook/addons" "6.5.0-alpha.41" + "@storybook/api" "6.5.0-alpha.41" + "@storybook/channel-postmessage" "6.5.0-alpha.41" + "@storybook/channels" "6.5.0-alpha.41" + "@storybook/client-api" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/components" "6.5.0-alpha.41" + "@storybook/core-common" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + "@storybook/node-logger" "6.5.0-alpha.41" + "@storybook/preview-web" "6.5.0-alpha.41" + "@storybook/router" "6.5.0-alpha.41" + "@storybook/semver" "^7.3.2" + "@storybook/store" "6.5.0-alpha.41" + "@storybook/theming" "6.5.0-alpha.41" + "@storybook/ui" "6.5.0-alpha.41" + "@types/node" "^14.0.10 || ^16.0.0" + "@types/webpack" "^4.41.26" + autoprefixer "^9.8.6" + babel-loader "^8.0.0" + babel-plugin-macros "^2.8.0" + babel-plugin-polyfill-corejs3 "^0.1.0" + case-sensitive-paths-webpack-plugin "^2.3.0" + core-js "^3.8.2" + css-loader "^3.6.0" + file-loader "^6.2.0" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^4.1.6" + glob "^7.1.6" + glob-promise "^3.4.0" + global "^4.4.0" + html-webpack-plugin "^4.0.0" + pnp-webpack-plugin "1.6.4" + postcss "^7.0.36" + postcss-flexbugs-fixes "^4.2.1" + postcss-loader "^4.2.0" + raw-loader "^4.0.2" + stable "^0.1.8" + style-loader "^1.3.0" + terser-webpack-plugin "^4.2.3" + ts-dedent "^2.0.0" + url-loader "^4.1.1" + util-deprecate "^1.0.2" + webpack "4" + webpack-dev-middleware "^3.7.3" + webpack-filter-warnings-plugin "^1.2.1" + webpack-hot-middleware "^2.25.1" + webpack-virtual-modules "^0.2.2" + "@storybook/channel-postmessage@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.4.18.tgz#24547fe7cee599969fd62df22142ba7046099a8e" @@ -2638,6 +3035,19 @@ qs "^6.10.0" telejson "^5.3.2" +"@storybook/channel-postmessage@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.5.0-alpha.41.tgz#ac3e2add198522e375a011d0a7fb9730be4aaf11" + integrity sha512-f5llzoec2eC+9tpVtCe8uF+Q2qRfWKW/d1QUeP+Zg+bd/mIR6XKwqjivI0fUZNqvoz6wyvBBOx9ZXs3bxeEXMQ== + dependencies: + "@storybook/channels" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + core-js "^3.8.2" + global "^4.4.0" + qs "^6.10.0" + telejson "^5.3.3" + "@storybook/channel-websocket@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-6.4.18.tgz#cf3a03e88b983c2953cb76a40a964806790567c4" @@ -2649,6 +3059,17 @@ global "^4.4.0" telejson "^5.3.2" +"@storybook/channel-websocket@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-6.5.0-alpha.41.tgz#1f2a6ace22010a3147d69f938e5ddca10e5c2ac8" + integrity sha512-+3lLuMchKpIgBhRv0tMROTbUsrR60yESXBWtVpCwI3nyTycK9rBHZs8GAhiY/epI+9AElerTUUhlaCB1UVqflg== + dependencies: + "@storybook/channels" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + core-js "^3.8.2" + global "^4.4.0" + telejson "^5.3.3" + "@storybook/channels@5.3.21": version "5.3.21" resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.3.21.tgz#53ba622b171d68b3b102983a62aa05149a49497b" @@ -2665,6 +3086,15 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" +"@storybook/channels@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.5.0-alpha.41.tgz#54abb2adadd4a1e5a9626d95004770c2dc8bef10" + integrity sha512-rhwxy704TltBb5Fo2rKcewJlOgiVMNZxSSvVmokhWm/RDutEp1xIkA+3ZR+B3bFiE7VxIdB9u75u6ldWLR3uWg== + dependencies: + core-js "^3.8.2" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + "@storybook/client-api@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.4.18.tgz#61c7c90f3f099e4d3bcc36576d2adbe2e5ef6eee" @@ -2691,6 +3121,32 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" +"@storybook/client-api@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.5.0-alpha.41.tgz#a5501fd1df4dcfdd61adb5128f9954827db1b11a" + integrity sha512-FtOYv1GmoPdtO33WZrGarfG4t6fl4r7Rc8h2CU/BUwWOE9pM3FSCD9m6Fc7hFu43V2Xb9jcXT7vd+TZHeE88zQ== + dependencies: + "@storybook/addons" "6.5.0-alpha.41" + "@storybook/channel-postmessage" "6.5.0-alpha.41" + "@storybook/channels" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + "@storybook/csf" "0.0.2--canary.87bc651.0" + "@storybook/store" "6.5.0-alpha.41" + "@types/qs" "^6.9.5" + "@types/webpack-env" "^1.16.0" + core-js "^3.8.2" + fast-deep-equal "^3.1.3" + global "^4.4.0" + lodash "^4.17.21" + memoizerific "^1.11.3" + qs "^6.10.0" + regenerator-runtime "^0.13.7" + store2 "^2.12.0" + synchronous-promise "^2.0.15" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + "@storybook/client-logger@5.3.21": version "5.3.21" resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.3.21.tgz#912c83b0d358e70acad1ad4abe199de4c38b109f" @@ -2706,6 +3162,14 @@ core-js "^3.8.2" global "^4.4.0" +"@storybook/client-logger@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.5.0-alpha.41.tgz#43dc98d783da117c86df33fa4562bcc6b98fae3a" + integrity sha512-aMitb0q1DxPXFHCq3J83utSIAQej7lMKPBTU9XVxzYyRFzVMTHorzXGWXi6MT40yBO2ILz5eoGQHejwft+XvUw== + dependencies: + core-js "^3.8.2" + global "^4.4.0" + "@storybook/components@5.3.21": version "5.3.21" resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.21.tgz#17ee371a2455c6e807c3d3135a9266e63ad7651a" @@ -2763,6 +3227,17 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" +"@storybook/components@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.5.0-alpha.41.tgz#d2501a3636b645052783810e6273e621c87a3801" + integrity sha512-MxzhhNM+5q9hJKrfevj8TIVO/bhHnq7MckH/zhsu/V8Vbk7BskWs+T83fSxgIih+XrYysKO2gHvIVXDt+K5/FA== + dependencies: + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/csf" "0.0.2--canary.87bc651.0" + "@storybook/theming" "6.5.0-alpha.41" + core-js "^3.8.2" + regenerator-runtime "^0.13.7" + "@storybook/core-client@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-6.4.18.tgz#7f2feb961864dcf6de501a94a41900fd36b43657" @@ -2786,13 +3261,94 @@ qs "^6.10.0" regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" - unfetch "^4.2.0" + unfetch "^4.2.0" + util-deprecate "^1.0.2" + +"@storybook/core-client@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-6.5.0-alpha.41.tgz#9202309f3436469fb85d85b23313d94a0ea0a35a" + integrity sha512-tXHpuNWMSWnhbCI78vKjL3uIykumkeLloyhA2GfZXOLGiwiBZ1kgBMkGwLXlMWo4D1GH2ZWlTI5KrtAggzAdYA== + dependencies: + "@storybook/addons" "6.5.0-alpha.41" + "@storybook/channel-postmessage" "6.5.0-alpha.41" + "@storybook/channel-websocket" "6.5.0-alpha.41" + "@storybook/client-api" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + "@storybook/csf" "0.0.2--canary.87bc651.0" + "@storybook/preview-web" "6.5.0-alpha.41" + "@storybook/store" "6.5.0-alpha.41" + "@storybook/ui" "6.5.0-alpha.41" + airbnb-js-shims "^2.2.1" + ansi-to-html "^0.6.11" + core-js "^3.8.2" + global "^4.4.0" + lodash "^4.17.21" + qs "^6.10.0" + regenerator-runtime "^0.13.7" + ts-dedent "^2.0.0" + unfetch "^4.2.0" + util-deprecate "^1.0.2" + +"@storybook/core-common@6.4.18": + version "6.4.18" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.4.18.tgz#0688a0a4a80cdbc161966c5a7ff49e755d64bbab" + integrity sha512-y4e43trNyQ3/v0Wpi240on7yVooUQvJBhJxOGEfcxAMRtcDa0ZCxHO4vAFX3k3voQOSmiXItXfJ1eGo/K+u0Fw== + dependencies: + "@babel/core" "^7.12.10" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-decorators" "^7.12.12" + "@babel/plugin-proposal-export-default-from" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.12" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/preset-env" "^7.12.11" + "@babel/preset-react" "^7.12.10" + "@babel/preset-typescript" "^7.12.7" + "@babel/register" "^7.12.1" + "@storybook/node-logger" "6.4.18" + "@storybook/semver" "^7.3.2" + "@types/node" "^14.0.10" + "@types/pretty-hrtime" "^1.0.0" + babel-loader "^8.0.0" + babel-plugin-macros "^3.0.1" + babel-plugin-polyfill-corejs3 "^0.1.0" + chalk "^4.1.0" + core-js "^3.8.2" + express "^4.17.1" + file-system-cache "^1.0.5" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.0.4" + fs-extra "^9.0.1" + glob "^7.1.6" + handlebars "^4.7.7" + interpret "^2.2.0" + json5 "^2.1.3" + lazy-universal-dotenv "^3.0.1" + picomatch "^2.3.0" + pkg-dir "^5.0.0" + pretty-hrtime "^1.0.3" + resolve-from "^5.0.0" + slash "^3.0.0" + telejson "^5.3.2" + ts-dedent "^2.0.0" util-deprecate "^1.0.2" + webpack "4" -"@storybook/core-common@6.4.18": - version "6.4.18" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.4.18.tgz#0688a0a4a80cdbc161966c5a7ff49e755d64bbab" - integrity sha512-y4e43trNyQ3/v0Wpi240on7yVooUQvJBhJxOGEfcxAMRtcDa0ZCxHO4vAFX3k3voQOSmiXItXfJ1eGo/K+u0Fw== +"@storybook/core-common@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.5.0-alpha.41.tgz#fcecfee1d93630a538cb9a39f0adabc38587562d" + integrity sha512-naq+Vld1/+lAnq/E/2d/xdxsh6yjxqQhh14B0cDHuxCuTZRt1x8WaFdbEGC+TO5StwZpj0M25pdHUnBiH5SBxQ== dependencies: "@babel/core" "^7.12.10" "@babel/plugin-proposal-class-properties" "^7.12.1" @@ -2802,6 +3358,7 @@ "@babel/plugin-proposal-object-rest-spread" "^7.12.1" "@babel/plugin-proposal-optional-chaining" "^7.12.7" "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-private-property-in-object" "^7.12.1" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-transform-arrow-functions" "^7.12.1" "@babel/plugin-transform-block-scoping" "^7.12.12" @@ -2815,9 +3372,9 @@ "@babel/preset-react" "^7.12.10" "@babel/preset-typescript" "^7.12.7" "@babel/register" "^7.12.1" - "@storybook/node-logger" "6.4.18" + "@storybook/node-logger" "6.5.0-alpha.41" "@storybook/semver" "^7.3.2" - "@types/node" "^14.0.10" + "@types/node" "^14.0.10 || ^16.0.0" "@types/pretty-hrtime" "^1.0.0" babel-loader "^8.0.0" babel-plugin-macros "^3.0.1" @@ -2839,7 +3396,7 @@ pretty-hrtime "^1.0.3" resolve-from "^5.0.0" slash "^3.0.0" - telejson "^5.3.2" + telejson "^5.3.3" ts-dedent "^2.0.0" util-deprecate "^1.0.2" webpack "4" @@ -2858,6 +3415,13 @@ dependencies: core-js "^3.8.2" +"@storybook/core-events@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.5.0-alpha.41.tgz#baa83594e238147bc05d270c90a5fc0bcec1ee43" + integrity sha512-ODMK7vCdqixqwxrdtJLtMk0TUAr5bAclYzFMJii//D8isGg/dGrofybvYnTk0U3aALo8Jmciuwb6D3bYMU6Dtw== + dependencies: + core-js "^3.8.2" + "@storybook/core-server@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-6.4.18.tgz#520935f7f330a734488e733ad4cf15a9556679b5" @@ -2906,6 +3470,55 @@ webpack "4" ws "^8.2.3" +"@storybook/core-server@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-6.5.0-alpha.41.tgz#50198f4edb8a1a60c9680b7d895c522d46fbb810" + integrity sha512-J4PgE+RfhHIirN+ost8Nw5vFJOYNqb7sqxKS/vxYigInIHdlfaUQDtupBnur30O3w2xI1Vbx+dzeISiSnDieVw== + dependencies: + "@discoveryjs/json-ext" "^0.5.3" + "@storybook/builder-webpack4" "6.5.0-alpha.41" + "@storybook/core-client" "6.5.0-alpha.41" + "@storybook/core-common" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + "@storybook/csf" "0.0.2--canary.87bc651.0" + "@storybook/csf-tools" "6.5.0-alpha.41" + "@storybook/manager-webpack4" "6.5.0-alpha.41" + "@storybook/node-logger" "6.5.0-alpha.41" + "@storybook/semver" "^7.3.2" + "@storybook/store" "6.5.0-alpha.41" + "@types/node" "^14.0.10 || ^16.0.0" + "@types/node-fetch" "^2.5.7" + "@types/pretty-hrtime" "^1.0.0" + "@types/webpack" "^4.41.26" + better-opn "^2.1.1" + boxen "^5.1.2" + chalk "^4.1.0" + cli-table3 "^0.6.1" + commander "^6.2.1" + compression "^1.7.4" + core-js "^3.8.2" + cpy "^8.1.2" + detect-port "^1.3.0" + express "^4.17.1" + fs-extra "^9.0.1" + globby "^11.0.2" + ip "^1.1.5" + lodash "^4.17.21" + node-fetch "^2.6.7" + open "^8.4.0" + pretty-hrtime "^1.0.3" + prompts "^2.4.0" + regenerator-runtime "^0.13.7" + serve-favicon "^2.5.0" + slash "^3.0.0" + telejson "^5.3.3" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + watchpack "^2.2.0" + webpack "4" + ws "^8.2.3" + x-default-browser "^0.4.0" + "@storybook/core@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.4.18.tgz#56f7bb0f20dbcfa205d860022b7bf30bf42fd472" @@ -2914,6 +3527,14 @@ "@storybook/core-client" "6.4.18" "@storybook/core-server" "6.4.18" +"@storybook/core@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.5.0-alpha.41.tgz#51a9d40e0ceb2883631e805565a42318b3c1a60d" + integrity sha512-gm2oOEGFuk7G/OWeAeJ0lZsGO9QYRzrpbuiiqsF8ddjsGEQo3jFuwKtU6u7iquDpodS/M7AIcyMplE9omqXh3w== + dependencies: + "@storybook/core-client" "6.5.0-alpha.41" + "@storybook/core-server" "6.5.0-alpha.41" + "@storybook/csf-tools@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-6.4.18.tgz#cdd40b543f9bea79c1481c236868b8ea04af6bd7" @@ -2937,6 +3558,29 @@ regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" +"@storybook/csf-tools@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-6.5.0-alpha.41.tgz#8a88832100c5828a8c783f0b6dfd0dc884c59326" + integrity sha512-24h9udcTQ+X8XKgmIkpQOwfR8U/zgXoC8G+Xm/Fa4JFS+U92NygIHqolYLItgFFoikHaAlG+iTIytsWgEN+4FQ== + dependencies: + "@babel/core" "^7.12.10" + "@babel/generator" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/plugin-transform-react-jsx" "^7.12.12" + "@babel/preset-env" "^7.12.11" + "@babel/traverse" "^7.12.11" + "@babel/types" "^7.12.11" + "@mdx-js/mdx" "^1.6.22" + "@storybook/csf" "0.0.2--canary.87bc651.0" + core-js "^3.8.2" + fs-extra "^9.0.1" + global "^4.4.0" + js-string-escape "^1.0.1" + lodash "^4.17.21" + prettier ">=2.2.1 <=2.3.0" + regenerator-runtime "^0.13.7" + ts-dedent "^2.0.0" + "@storybook/csf@0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.0.1.tgz#95901507dc02f0bc6f9ac8ee1983e2fc5bb98ce6" @@ -2993,6 +3637,47 @@ webpack-dev-middleware "^3.7.3" webpack-virtual-modules "^0.2.2" +"@storybook/manager-webpack4@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/manager-webpack4/-/manager-webpack4-6.5.0-alpha.41.tgz#d7053f0b0aa66c3e1944e6f55f94f358a69140f3" + integrity sha512-6y7qeC4Kj9ozgGrnegKvmxFVKe5bosmenLYXHOC9+bLrB8AX54yQ2igHTLMBBjwEJMYof2LOxPeNUgQhZXUGiQ== + dependencies: + "@babel/core" "^7.12.10" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/preset-react" "^7.12.10" + "@storybook/addons" "6.5.0-alpha.41" + "@storybook/core-client" "6.5.0-alpha.41" + "@storybook/core-common" "6.5.0-alpha.41" + "@storybook/node-logger" "6.5.0-alpha.41" + "@storybook/theming" "6.5.0-alpha.41" + "@storybook/ui" "6.5.0-alpha.41" + "@types/node" "^14.0.10 || ^16.0.0" + "@types/webpack" "^4.41.26" + babel-loader "^8.0.0" + case-sensitive-paths-webpack-plugin "^2.3.0" + chalk "^4.1.0" + core-js "^3.8.2" + css-loader "^3.6.0" + express "^4.17.1" + file-loader "^6.2.0" + find-up "^5.0.0" + fs-extra "^9.0.1" + html-webpack-plugin "^4.0.0" + node-fetch "^2.6.7" + pnp-webpack-plugin "1.6.4" + read-pkg-up "^7.0.1" + regenerator-runtime "^0.13.7" + resolve-from "^5.0.0" + style-loader "^1.3.0" + telejson "^5.3.3" + terser-webpack-plugin "^4.2.3" + ts-dedent "^2.0.0" + url-loader "^4.1.1" + util-deprecate "^1.0.2" + webpack "4" + webpack-dev-middleware "^3.7.3" + webpack-virtual-modules "^0.2.2" + "@storybook/node-logger@6.4.18", "@storybook/node-logger@^6.1.14": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.4.18.tgz#8759761ba7526b2fa03a1a08fe82d6d892d7a072" @@ -3004,6 +3689,17 @@ npmlog "^5.0.1" pretty-hrtime "^1.0.3" +"@storybook/node-logger@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.5.0-alpha.41.tgz#11630fb1383207e6613fd8c41fc0c32c163fc4dd" + integrity sha512-T6Pzueg/ank0h3cIynT/wO7ng+Ay7u2nES6AqOYfkspycPAe6jBj6vas3MnJJX5qpdx0aPU2+cTdQTZffRzFRg== + dependencies: + "@types/npmlog" "^4.1.2" + chalk "^4.1.0" + core-js "^3.8.2" + npmlog "^5.0.1" + pretty-hrtime "^1.0.3" + "@storybook/postinstall@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-6.4.18.tgz#e94350471fa3df98215ad3c8f3d0574a3a0a8e04" @@ -3011,6 +3707,13 @@ dependencies: core-js "^3.8.2" +"@storybook/postinstall@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-6.5.0-alpha.41.tgz#5b31121fcfe40b6fd844cc381ba00948a90bf4c9" + integrity sha512-zQvcnshTSTV1E7HbpCjs4haCKUPx3Wg+yz82k8WWIBWm0481hKva+zFDQHM/i35+fQ52g7l3qpUtM7I6IuPKYw== + dependencies: + core-js "^3.8.2" + "@storybook/preview-web@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/preview-web/-/preview-web-6.4.18.tgz#47c908bf27d2089ccf3296c376a6f5b1e8674b5a" @@ -3033,6 +3736,28 @@ unfetch "^4.2.0" util-deprecate "^1.0.2" +"@storybook/preview-web@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/preview-web/-/preview-web-6.5.0-alpha.41.tgz#a83c98f6621d91185ad22cca25ec65ec3a4fda20" + integrity sha512-rASudfBmlWvZ64Co/DtI5mgep0eatHj4tqWf5s8qKyMDJwIR1e2Vt3rfn5Bs2t/G071a1y94xkjg1iIPqDupoA== + dependencies: + "@storybook/addons" "6.5.0-alpha.41" + "@storybook/channel-postmessage" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + "@storybook/csf" "0.0.2--canary.87bc651.0" + "@storybook/store" "6.5.0-alpha.41" + ansi-to-html "^0.6.11" + core-js "^3.8.2" + global "^4.4.0" + lodash "^4.17.21" + qs "^6.10.0" + regenerator-runtime "^0.13.7" + synchronous-promise "^2.0.15" + ts-dedent "^2.0.0" + unfetch "^4.2.0" + util-deprecate "^1.0.2" + "@storybook/react-docgen-typescript-plugin@1.0.2-canary.253f8c1.0": version "1.0.2-canary.253f8c1.0" resolved "https://registry.yarnpkg.com/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.2-canary.253f8c1.0.tgz#f2da40e6aae4aa586c2fb284a4a1744602c3c7fa" @@ -3046,7 +3771,7 @@ react-docgen-typescript "^2.0.0" tslib "^2.0.0" -"@storybook/react@^6.4.18": +"@storybook/react@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.4.18.tgz#22624af56a9873c6616b5dc6a1e30c968bac95d2" integrity sha512-dKxwsvJEGTm/aNIJSJMI4MImsI4EhmBa42FtwVvtFkrokuMf2CsmTJsaaAh+1or9SKGTiFuGsYDGhX5joE3XUQ== @@ -3108,6 +3833,15 @@ react-router-dom "^6.0.0" ts-dedent "^2.0.0" +"@storybook/router@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.5.0-alpha.41.tgz#f9e4cf12f92d2511f0ada92e4b21369cc33f7580" + integrity sha512-OCOxRuMZwsEyhmd+nIn5uDuvsC7ADdihSjALpYgeUr/tNUtGNuGhZhQ2GvxDpC7H9wKx+zcUvSiHhKnrZaQS2A== + dependencies: + "@storybook/client-logger" "6.5.0-alpha.41" + core-js "^3.8.2" + regenerator-runtime "^0.13.7" + "@storybook/semver@^7.3.2": version "7.3.2" resolved "https://registry.yarnpkg.com/@storybook/semver/-/semver-7.3.2.tgz#f3b9c44a1c9a0b933c04e66d0048fcf2fa10dac0" @@ -3132,6 +3866,22 @@ prettier ">=2.2.1 <=2.3.0" regenerator-runtime "^0.13.7" +"@storybook/source-loader@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-6.5.0-alpha.41.tgz#6586f5845282f025015635397553b6342d9fd843" + integrity sha512-YGHCUoRagypiwGshfnBK+EO8vEfa63Q+JJ7CRF96GLy7Uo+qoMOIT+zY9jNruB2uDoYrE/g6B0MsWSdd3jd83A== + dependencies: + "@storybook/addons" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/csf" "0.0.2--canary.87bc651.0" + core-js "^3.8.2" + estraverse "^5.2.0" + global "^4.4.0" + loader-utils "^2.0.0" + lodash "^4.17.21" + prettier ">=2.2.1 <=2.3.0" + regenerator-runtime "^0.13.7" + "@storybook/store@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/store/-/store-6.4.18.tgz#3b693c9d5555d5cfc04e2318e104746d9d55ad66" @@ -3153,7 +3903,28 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/storybook-deployer@^2.8.10": +"@storybook/store@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/store/-/store-6.5.0-alpha.41.tgz#e8cf51c8d6660dfde043d6cf77ca2380e7957d47" + integrity sha512-grd2fPmd5Ogh7D019M+7tgVzG52CFa9vogpBkhQ4bgU7TPr/WIwVmsTOhnMsmB+3aQptc3PnTmVd0mz8XNCrHQ== + dependencies: + "@storybook/addons" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + "@storybook/csf" "0.0.2--canary.87bc651.0" + 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" + slash "^3.0.0" + stable "^0.1.8" + synchronous-promise "^2.0.15" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + +"@storybook/storybook-deployer@2.8.10": version "2.8.10" resolved "https://registry.yarnpkg.com/@storybook/storybook-deployer/-/storybook-deployer-2.8.10.tgz#3cf96aea823d424fbfce98e76fca108d07470ec2" integrity sha512-2uleH0AFuI98sdTkbyHt1BgPa0kmLxhC3zwfwtacE8FB+2ffdRdqBlp6GYDZ7CZ+R4B4XuPYhsgUKWkB+zngyQ== @@ -3200,6 +3971,15 @@ resolve-from "^5.0.0" ts-dedent "^2.0.0" +"@storybook/theming@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.5.0-alpha.41.tgz#d9a85b6dd900b4c8fb83138b11abfcf84c179821" + integrity sha512-4HMwDBcsNG9TDiIBi0Io8PkibVuZ1jG3hoq3X4+N5n7TA+ja+dgnIQ+eIwHLAaYxqjVCH122NWZgOP96uylGSQ== + dependencies: + "@storybook/client-logger" "6.5.0-alpha.41" + core-js "^3.8.2" + regenerator-runtime "^0.13.7" + "@storybook/ui@6.4.18": version "6.4.18" resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.4.18.tgz#3ceaf6b317f8f2c1d7d1cdc49daaac7eaf10af6b" @@ -3234,6 +4014,24 @@ resolve-from "^5.0.0" store2 "^2.12.0" +"@storybook/ui@6.5.0-alpha.41": + version "6.5.0-alpha.41" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.5.0-alpha.41.tgz#84997ecc4682e42a065a3c63520e089cd2f51513" + integrity sha512-7KMZTFFo0aVpeS0OUMLHzhxqWgZ+aq8f8S9kRTKArjk2neYx2t0jVD/JguekGAKgLfBkJtbMGSnJMQEtOccPQA== + dependencies: + "@storybook/addons" "6.5.0-alpha.41" + "@storybook/api" "6.5.0-alpha.41" + "@storybook/channels" "6.5.0-alpha.41" + "@storybook/client-logger" "6.5.0-alpha.41" + "@storybook/components" "6.5.0-alpha.41" + "@storybook/core-events" "6.5.0-alpha.41" + "@storybook/router" "6.5.0-alpha.41" + "@storybook/semver" "^7.3.2" + "@storybook/theming" "6.5.0-alpha.41" + core-js "^3.8.2" + regenerator-runtime "^0.13.7" + resolve-from "^5.0.0" + "@tailwindcss/forms@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.4.0.tgz#a46715e347a32d216a3973eb67473bd29ae3798e" @@ -3407,6 +4205,14 @@ dependencies: "@types/unist" "*" +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/html-minifier-terser@^5.0.0": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" @@ -3513,6 +4319,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.11.tgz#9bd810a959e1728d78df0f68b5c825b8ea7156f4" integrity sha512-zCoCEMA+IPpsRkyCFBqew5vGb7r8RSiB3uwdu/map7uwLAfu1MTazW26/pUDWoNnF88vJz4W3U56i5gtXNqxGg== +"@types/node@^14.0.10 || ^16.0.0": + version "16.11.26" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.26.tgz#63d204d136c9916fb4dcd1b50f9740fe86884e47" + integrity sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ== + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" @@ -3593,7 +4404,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^17.0.39": +"@types/react@*", "@types/react@16 || 17", "@types/react@^17.0.39": version "17.0.39" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.39.tgz#d0f4cde092502a6db00a1cded6e6bf2abb7633ce" integrity sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug== @@ -4294,6 +5105,11 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -4503,7 +5319,7 @@ axe-core@^3.5.5: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.6.tgz#e762a90d7f6dbd244ceacb4e72760ff8aad521b5" integrity sha512-LEUDjgmdJoA3LqklSTwKYqkjcZ4HKc4ddIYGSAiSkr46NTjzg2L9RNB+lekO9P7Dlpa87+hBtzc2Fzn/+GUWMQ== -axe-core@^4.2.0, axe-core@^4.3.5: +axe-core@^4.3.5: version "4.4.1" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw== @@ -4780,6 +5596,11 @@ better-opn@^2.1.1: dependencies: open "^7.0.3" +big-integer@^1.6.7: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -4869,6 +5690,13 @@ boxen@^5.1.2: widest-line "^3.1.0" wrap-ansi "^7.0.0" +bplist-parser@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" + integrity sha1-1g1dzCDLptx+HymbNdPh+V2vuuY= + dependencies: + big-integer "^1.6.7" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -5166,6 +5994,14 @@ camelcase-css@2.0.1, camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -5175,6 +6011,11 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -6164,11 +7005,18 @@ csstype@^2.5.7: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa" integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ== -csstype@^3.0.2: +csstype@^3.0.2, csstype@^3.0.4: version "3.0.10" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" @@ -6272,7 +7120,7 @@ decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -6319,6 +7167,15 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== +default-browser-id@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-1.0.4.tgz#e59d09a5d157b828b876c26816e61c3d2a2c203a" + integrity sha1-5Z0JpdFXuCi4dsJoFuYcPSosIDo= + dependencies: + bplist-parser "^0.1.0" + meow "^3.1.0" + untildify "^2.0.0" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -6326,6 +7183,11 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -6785,7 +7647,7 @@ errno@^0.1.3, errno@~0.1.7: dependencies: prr "~1.0.1" -error-ex@^1.3.1: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -7728,6 +8590,14 @@ find-root@1.1.0, find-root@^1.1.0: resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -8115,6 +8985,11 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -8632,7 +9507,7 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.3.0: +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -8916,6 +9791,13 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -9034,6 +9916,16 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +intl-messageformat@9.11.4: + version "9.11.4" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.11.4.tgz#0f9030bc6d10e6a48592142f88e646d88f05f1f2" + integrity sha512-77TSkNubIy/hsapz6LQpyR6OADcxhWdhSaboPb5flMaALCVkPvAIxr48AlPqaMl4r1anNcvR9rpLWVdwUY1IKg== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/fast-memoize" "1.2.1" + "@formatjs/icu-messageformat-parser" "2.0.18" + tslib "^2.1.0" + into-stream@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" @@ -9223,7 +10115,7 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" -is-docker@^2.0.0: +is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== @@ -9253,6 +10145,11 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -9446,7 +10343,7 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-utf8@^0.2.1: +is-utf8@^0.2.0, is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= @@ -9483,7 +10380,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.1.1: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -10488,6 +11385,17 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -10675,6 +11583,14 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4 dependencies: js-tokens "^3.0.0 || ^4.0.0" +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -10805,7 +11721,7 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0: +map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= @@ -10963,6 +11879,22 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" +meow@^3.1.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + meow@^8.0.0: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -11125,7 +12057,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@1.2.5, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@1.2.5, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -11476,7 +12408,7 @@ nopt@^5.0.0: dependencies: abbrev "1" -normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -11730,7 +12662,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -11881,6 +12813,15 @@ open@^7.0.3: is-docker "^2.0.0" is-wsl "^2.1.1" +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" @@ -11917,6 +12858,11 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -12172,6 +13118,13 @@ parse-entities@^2.0.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -12258,6 +13211,13 @@ path-dirname@^1.0.0: resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -12293,6 +13253,15 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -12336,6 +13305,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatc resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -12351,6 +13325,18 @@ pify@^5.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + pirates@^4.0.1, pirates@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" @@ -13299,6 +14285,22 @@ react-inspector@^5.1.0: is-dom "^1.0.0" prop-types "^15.0.0" +react-intl@^5.24.6: + version "5.24.6" + resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-5.24.6.tgz#d3dcd07ff967f804504cfdfd5dfa4ee1f64b4f80" + integrity sha512-6gUhQwNAeAoRpN6F3N+bR66aot/mI6yduRwQS5ajfmXHX/YFvOfINkgMFTTrcbf3+qjBhACNU3ek4wFt6cn2ww== + dependencies: + "@formatjs/ecma402-abstract" "1.11.3" + "@formatjs/icu-messageformat-parser" "2.0.18" + "@formatjs/intl" "2.0.0" + "@formatjs/intl-displaynames" "5.4.2" + "@formatjs/intl-listformat" "6.5.2" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/react" "16 || 17" + hoist-non-react-statics "^3.3.2" + intl-messageformat "9.11.4" + tslib "^2.1.0" + react-is@17.0.2, react-is@^17.0.1, react-is@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" @@ -13461,6 +14463,14 @@ read-package-json@^4.1.1: normalize-package-data "^3.0.0" npm-normalize-package-bin "^1.0.0" +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + read-pkg-up@^7.0.0, read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -13470,6 +14480,15 @@ read-pkg-up@^7.0.0, read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + read-pkg@^5.0.0, read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" @@ -13557,6 +14576,14 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -13770,6 +14797,13 @@ repeat-string@^1.5.4, repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -14914,6 +15948,13 @@ strip-bom@4.0.0, strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -14929,6 +15970,13 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -15390,6 +16438,11 @@ treeverse@^1.0.4: resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -15843,6 +16896,13 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +untildify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0" + integrity sha1-F+soB5h/dpUunASF/DEdBqgmouA= + dependencies: + os-homedir "^1.0.0" + untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" @@ -16388,6 +17448,13 @@ ws@^8.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== +x-default-browser@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/x-default-browser/-/x-default-browser-0.4.0.tgz#70cf0da85da7c0ab5cb0f15a897f2322a6bdd481" + integrity sha1-cM8NqF2nwKtcsPFaiX8jIqa91IE= + optionalDependencies: + default-browser-id "^1.0.4" + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"