From 04ac5c52b8feb3c1ebc6efd291d51b75f8add4f4 Mon Sep 17 00:00:00 2001 From: danivelop Date: Thu, 17 Sep 2020 19:11:07 +0900 Subject: [PATCH 01/16] =?UTF-8?q?dynamic=20overlay=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.stories.tsx | 107 ++++++++ src/components/Overlay/Overlay.styled.ts | 24 ++ src/components/Overlay/Overlay.tsx | 284 +++++++++++++++++++++ src/components/Overlay/Overlay.types.ts | 45 ++++ src/components/Overlay/OverlayPosition.ts | 16 ++ src/components/Overlay/index.ts | 10 + src/index.ts | 1 + 7 files changed, 487 insertions(+) create mode 100644 src/components/Overlay/Overlay.stories.tsx create mode 100644 src/components/Overlay/Overlay.styled.ts create mode 100644 src/components/Overlay/Overlay.tsx create mode 100644 src/components/Overlay/Overlay.types.ts create mode 100644 src/components/Overlay/OverlayPosition.ts create mode 100644 src/components/Overlay/index.ts diff --git a/src/components/Overlay/Overlay.stories.tsx b/src/components/Overlay/Overlay.stories.tsx new file mode 100644 index 0000000000..dbae2e9c0f --- /dev/null +++ b/src/components/Overlay/Overlay.stories.tsx @@ -0,0 +1,107 @@ +/* External dependencies */ +import React, { useRef } from 'react' +import { base } from 'paths.macro' + +/* Internal dependencies */ +import { getTitle } from '../../utils/utils' +import { styled } from '../../styling/Theme' +import Palette from '../../styling/Palette' +import Overlay from './Overlay' +import OverlayPosition from './OverlayPosition' + +export default { + title: getTitle(base), + component: Overlay, + argTypes: { + placement: { + control: { + type: 'radio', + options: [ + OverlayPosition.TOP, + OverlayPosition.TOP_LEFT, + OverlayPosition.TOP_RIGHT, + OverlayPosition.RIGHT, + OverlayPosition.RIGHT_TOP, + OverlayPosition.RIGHT_BOTTOM, + OverlayPosition.BOTTOM, + OverlayPosition.BOTTOM_LEFT, + OverlayPosition.BOTTOM_RIGHT, + OverlayPosition.LEFT, + OverlayPosition.LEFT_TOP, + OverlayPosition.LEFT_BOTTOM, + ], + }, + }, + marginX: { + control: { + type: 'range', + min: -200, + max: 200, + step: 1, + }, + }, + marginY: { + control: { + type: 'range', + min: -200, + max: 200, + step: 1, + }, + }, + }, +} + +const Container = styled.div` + display: flex; + justify-content: center; + align-items: center; + width: 600px; + height: 500px; + border: 1px solid ${Palette.grey700}; +` + +const Target = styled.div` + display: flex; + justify-content: center; + align-items: center; + width: 70px; + height: 40px; + background-color: ${Palette.grey300}; + border-radius: 4px; +` + +const Children = styled.div` + display: flex; + justify-content: center; + align-items: center; + width: 250px; + height: 150px; + background-color: ${Palette.grey500}; + border-radius: 4px; +` + +const Template = (props) => { + const targetRef = useRef() + + return ( + + + target + + + overlay + + + ) +} + +export const Primary = Template.bind({}) +Primary.args = { + show: false, + placement: OverlayPosition.BOTTOM, + marginX: 0, + marginY: 0, +} diff --git a/src/components/Overlay/Overlay.styled.ts b/src/components/Overlay/Overlay.styled.ts new file mode 100644 index 0000000000..cca2cdcacb --- /dev/null +++ b/src/components/Overlay/Overlay.styled.ts @@ -0,0 +1,24 @@ +/* Internal dependencies */ +import { styled, css } from '../../styling/Theme' +import { StyledOverlayProps } from './Overlay.types' + +export const Container = styled.div` + width: 100%; + height: 100%; + position: fixed; + top: 0; + left: 0; +` + +export const Wrapper = styled.div` + width: 100%; + height: 100%; + position: relative; +` + +export const StyledOverlay = styled.div` + position: absolute; + ${props => props.isHidden && css` + visibility: hidden; + `} +` diff --git a/src/components/Overlay/Overlay.tsx b/src/components/Overlay/Overlay.tsx new file mode 100644 index 0000000000..8c0226bf42 --- /dev/null +++ b/src/components/Overlay/Overlay.tsx @@ -0,0 +1,284 @@ +/* External dependencies */ +import React, { + useState, + useEffect, + useMemo, + useRef, + useCallback, + Ref, + forwardRef, +} from 'react' +import ReactDOM from 'react-dom' +import { noop } from 'lodash-es' + +/* Internal dependencies */ +import useMergeRefs from '../../hooks/useMergeRefs' +import OverlayProps, { + EventHandler, + getOverlayStyleProps, + getOverlayPositionProps, + getOverlayTranslateProps, +} from './Overlay.types' +import OverlayPosition from './OverlayPosition' +import { Container, Wrapper, StyledOverlay } from './Overlay.styled' + +export const CONTAINER_TEST_ID = 'ch-design-system-container' +export const WRAPPER_TEST_ID = 'ch-design-system-wrapper' +export const OVERLAY_TEST_ID = 'ch-design-system-overlay' + +const ESCAPE_KEY = 'Escape' +const rootElement = document.getElementById('root') + +function listen(element: any, eventName: K, handler: EventHandler) { + if (!element) return noop + + element.addEventListener(eventName, handler) + return function cleanup() { + element.removeEventListener(eventName, handler) + } +} + +function getOverlayPosition({ container, target }: getOverlayPositionProps) { + const { top: targetTop, left: targetLeft } = target.getBoundingClientRect() + + const top = container ? + targetTop - target.clientTop - container.getBoundingClientRect().top + container.scrollTop : + targetTop - target.clientTop + const left = container ? + targetLeft - target.clientLeft - container.getBoundingClientRect().left + container.scrollLeft : + targetLeft - target.clientLeft + + return { top, left } +} + +function getOverlayTranslate({ + container, + target, + overlay, + placement, + marginX, + marginY, +}: getOverlayTranslateProps) { + const containerElement = container || rootElement as HTMLElement + const { + width: containerWidth, + height: containerHeight, + top: containerTop, + left: containerLeft, + } = containerElement.getBoundingClientRect() + const { width: targetWidth, height: targetHeight, top: targetTop, left: targetLeft } = target.getBoundingClientRect() + const { width: overlayWidth, height: overlayHeight } = overlay.getBoundingClientRect() + + let translateX = 0 + let translateY = 0 + + // pre position + switch (placement) { + case OverlayPosition.TOP: + case OverlayPosition.TOP_LEFT: + case OverlayPosition.TOP_RIGHT: + translateY -= (overlayHeight + marginY) + translateX += marginX + break + case OverlayPosition.RIGHT: + case OverlayPosition.RIGHT_TOP: + case OverlayPosition.RIGHT_BOTTOM: + translateX += (targetWidth + marginX) + translateY += marginY + break + case OverlayPosition.BOTTOM: + case OverlayPosition.BOTTOM_LEFT: + case OverlayPosition.BOTTOM_RIGHT: + translateY += (targetHeight + marginY) + translateX += marginX + break + case OverlayPosition.LEFT: + case OverlayPosition.LEFT_TOP: + case OverlayPosition.LEFT_BOTTOM: + translateX -= (overlayWidth + marginX) + translateY += marginY + break + } + // post position + switch (placement) { + case OverlayPosition.TOP: + case OverlayPosition.BOTTOM: + translateX -= ((overlayWidth / 2) - (targetWidth / 2)) + break + case OverlayPosition.TOP_RIGHT: + case OverlayPosition.BOTTOM_RIGHT: + translateX -= (overlayWidth - targetWidth) + break + case OverlayPosition.RIGHT: + case OverlayPosition.LEFT: + translateY -= ((overlayHeight / 2) - (targetHeight / 2)) + break + case OverlayPosition.RIGHT_BOTTOM: + case OverlayPosition.LEFT_BOTTOM: + translateY -= (overlayHeight - targetHeight) + break + } + + const isOverTop = targetTop + translateY < containerTop + const isOverBottom = targetTop + translateY + overlayHeight > containerTop + containerHeight + const isOverLeft = targetLeft + translateX < containerLeft + const isOverRight = targetLeft + translateX + overlayWidth > containerLeft + containerWidth + + if (isOverTop || isOverBottom) { + translateY = targetHeight - translateY - overlayHeight + } + if (isOverLeft || isOverRight) { + translateX = targetWidth - translateX - overlayWidth + } + + const transform = `translate(${translateX}px, ${translateY}px)` + return { transform } +} + +function getOverlayStyle({ + container, + target, + overlay, + placement, + marginX, + marginY, +}: getOverlayStyleProps) { + if (target) { + const overlayPositionStyle = getOverlayPosition({ container, target }) + const overlayTranslateStyle = getOverlayTranslate({ container, target, overlay, placement, marginX, marginY }) + + const combinedStyle = { + ...overlayPositionStyle, + ...overlayTranslateStyle, + willChange: 'left, top', + } + + return combinedStyle + } + return {} +} + +function Overlay( + { + as, + containerTestId = CONTAINER_TEST_ID, + wrapperTestId = WRAPPER_TEST_ID, + testId = OVERLAY_TEST_ID, + show = false, + className = '', + style, + container, + target, + placement = OverlayPosition.LEFT, + marginX = 0, + marginY = 0, + children, + onHide = noop, + }: OverlayProps, + forwardedRef: Ref, +) { + const [overlayStyle, setOverlayStyle] = useState() + const overlayRef = useRef(null) + const mergedRef = useMergeRefs(overlayRef, forwardedRef) + + const overlay = useMemo(() => { + if (container) { + return ( + + { children } + + ) + } + return ( + + + + { children } + + + + ) + }, [ + as, + container, + className, + style, + overlayStyle, + children, + containerTestId, + wrapperTestId, + testId, + mergedRef, + ]) + + const handleHideOverlay = useCallback((event: any) => { + if (!event.target?.closest(StyledOverlay)) { + onHide() + } + }, [onHide]) + + const handleClickTarget = useCallback((event: HTMLElementEventMap['click']) => { + onHide() + event.stopPropagation() + }, [onHide]) + + const handleKeydown = useCallback((event: HTMLElementEventMap['keyup']) => { + if (event.key === ESCAPE_KEY) { + onHide() + } + }, [onHide]) + + useEffect(() => { + if (show) { + const removeDocumentClickListener = listen(document, 'click', handleHideOverlay) + const removeDocumentKeyupListener = listen(document, 'keyup', handleKeydown) + const removeTargetClickListener = listen(target, 'click', handleClickTarget) + + return () => { + removeDocumentClickListener() + removeDocumentKeyupListener() + removeTargetClickListener() + } + } + return noop + }, [show, target, handleHideOverlay, handleKeydown, handleClickTarget]) + + useEffect(() => { + if (show) { + const tempOverlayStyle = getOverlayStyle({ + container, + target, + overlay: overlayRef.current as HTMLElement, + placement, + marginX, + marginY, + }) + setOverlayStyle(tempOverlayStyle) + + return () => { + setOverlayStyle(undefined) + } + } + return noop + }, [show, container, marginX, marginY, placement, target]) + + if (!show) return null + + return ReactDOM.createPortal(overlay, container || rootElement as HTMLElement) +} + +export default forwardRef(Overlay) diff --git a/src/components/Overlay/Overlay.types.ts b/src/components/Overlay/Overlay.types.ts new file mode 100644 index 0000000000..f0bbc6dc7f --- /dev/null +++ b/src/components/Overlay/Overlay.types.ts @@ -0,0 +1,45 @@ +/* Internal dependencies */ +import { UIComponentProps } from '../../types/ComponentProps' +import OverlayPosition from './OverlayPosition' + +export default interface OverlayProps extends UIComponentProps { + show?: boolean + className?: string + style?: React.CSSProperties + container?: HTMLElement + target: HTMLElement | null + placement?: OverlayPosition + marginX?: number + marginY?: number + children: React.ReactNode + onHide?: () => void +} + +export interface getOverlayStyleProps { + container?: HTMLElement + target: HTMLElement | null + overlay: HTMLElement + placement: OverlayPosition + marginX: number + marginY: number +} + +export interface getOverlayPositionProps { + container?: HTMLElement + target: HTMLElement +} + +export interface getOverlayTranslateProps { + container?: HTMLElement + target: HTMLElement + overlay: HTMLElement + placement: OverlayPosition + marginX: number + marginY: number +} + +export interface StyledOverlayProps { + isHidden: boolean +} + +export type EventHandler = (event: HTMLElementEventMap[K]) => any diff --git a/src/components/Overlay/OverlayPosition.ts b/src/components/Overlay/OverlayPosition.ts new file mode 100644 index 0000000000..f271b639e2 --- /dev/null +++ b/src/components/Overlay/OverlayPosition.ts @@ -0,0 +1,16 @@ +enum OverlayPosition { + TOP = 'top', + TOP_LEFT = 'topLeft', + TOP_RIGHT = 'topRight', + RIGHT = 'right', + RIGHT_TOP = 'rightTop', + RIGHT_BOTTOM = 'rightBottom', + BOTTOM = 'bottom', + BOTTOM_LEFT = 'bottomLeft', + BOTTOM_RIGHT = 'bottomRight', + LEFT = 'left', + LEFT_TOP = 'leftTop', + LEFT_BOTTOM = 'leftBottom', +} + +export default OverlayPosition diff --git a/src/components/Overlay/index.ts b/src/components/Overlay/index.ts new file mode 100644 index 0000000000..677f4d51a0 --- /dev/null +++ b/src/components/Overlay/index.ts @@ -0,0 +1,10 @@ +import Overlay from './Overlay' +import type OverlayProps from './Overlay.types' + +export type { + OverlayProps, +} + +export { + Overlay, +} diff --git a/src/index.ts b/src/index.ts index 6f6afe352a..5c3a3cc219 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,6 +9,7 @@ export * from './components/Switch' export * from './components/Text' export * from './components/Radio' export * from './components/Checkbox' +export * from './components/Overlay' /* Layout */ export * from './layout/GNB' From 11d0060bf53ca85dbc263b052aa60525fa8b611d Mon Sep 17 00:00:00 2001 From: danivelop Date: Mon, 12 Oct 2020 17:02:45 +0900 Subject: [PATCH 02/16] =?UTF-8?q?container=EB=A5=BC=20props=EB=A1=9C=20?= =?UTF-8?q?=EC=A3=BC=EC=A7=80=20=EC=95=8A=EC=95=98=EC=9D=84=EB=95=8C=20ove?= =?UTF-8?q?rlay=EA=B0=80=20=EC=97=B4=EB=A0=A4=EC=9E=88=EC=9C=BC=EB=A9=B4?= =?UTF-8?q?=20=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EC=95=88=EB=90=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=A7=89=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.tsx | 41 +++++++++++++++++------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/components/Overlay/Overlay.tsx b/src/components/Overlay/Overlay.tsx index 8c0226bf42..233d116791 100644 --- a/src/components/Overlay/Overlay.tsx +++ b/src/components/Overlay/Overlay.tsx @@ -181,6 +181,27 @@ function Overlay( const overlayRef = useRef(null) const mergedRef = useMergeRefs(overlayRef, forwardedRef) + const handleBlockMouseWheel = useCallback((e: React.MouseEvent) => { + e.stopPropagation() + }, []) + + const handleHideOverlay = useCallback((event: any) => { + if (!event.target?.closest(StyledOverlay)) { + onHide() + } + }, [onHide]) + + const handleClickTarget = useCallback((event: HTMLElementEventMap['click']) => { + onHide() + event.stopPropagation() + }, [onHide]) + + const handleKeydown = useCallback((event: HTMLElementEventMap['keyup']) => { + if (event.key === ESCAPE_KEY) { + onHide() + } + }, [onHide]) + const overlay = useMemo(() => { if (container) { return ( @@ -197,7 +218,7 @@ function Overlay( ) } return ( - + { - if (!event.target?.closest(StyledOverlay)) { - onHide() - } - }, [onHide]) - - const handleClickTarget = useCallback((event: HTMLElementEventMap['click']) => { - onHide() - event.stopPropagation() - }, [onHide]) - - const handleKeydown = useCallback((event: HTMLElementEventMap['keyup']) => { - if (event.key === ESCAPE_KEY) { - onHide() - } - }, [onHide]) - useEffect(() => { if (show) { const removeDocumentClickListener = listen(document, 'click', handleHideOverlay) From ce31accffc39d871844b9cd540f47e20e55203b9 Mon Sep 17 00:00:00 2001 From: groovypark Date: Wed, 14 Oct 2020 15:33:52 +0900 Subject: [PATCH 03/16] =?UTF-8?q?icon=20warning=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Icon/Icon.styled.ts | 10 +++++----- src/components/Icon/Icon.tsx | 8 ++++---- src/components/Icon/Icon.types.ts | 16 ++++++++-------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/components/Icon/Icon.styled.ts b/src/components/Icon/Icon.styled.ts index 59b6db616a..63cfd1da3d 100644 --- a/src/components/Icon/Icon.styled.ts +++ b/src/components/Icon/Icon.styled.ts @@ -3,12 +3,12 @@ import { styled } from '../../styling/Theme' import { IconStyledProps } from './Icon.types' function getMargin({ - marginTop, - marginRight, - marginBottom, - marginLeft, + margintop, + marginright, + marginbottom, + marginleft, }: IconStyledProps): string { - return `${marginTop}px ${marginRight}px ${marginBottom}px ${marginLeft}px` + return `${margintop}px ${marginright}px ${marginbottom}px ${marginleft}px` } const Icon = styled.svg` diff --git a/src/components/Icon/Icon.tsx b/src/components/Icon/Icon.tsx index 5b6e507067..e02d80b193 100644 --- a/src/components/Icon/Icon.tsx +++ b/src/components/Icon/Icon.tsx @@ -29,10 +29,10 @@ function Icon({ as={icons[name]} width={size} height={size} - marginTop={marginTop} - marginRight={marginRight} - marginBottom={marginBottom} - marginLeft={marginLeft} + margintop={marginTop} + marginright={marginRight} + marginbottom={marginBottom} + marginleft={marginLeft} /> ) } diff --git a/src/components/Icon/Icon.types.ts b/src/components/Icon/Icon.types.ts index 616be50c1e..3614551453 100644 --- a/src/components/Icon/Icon.types.ts +++ b/src/components/Icon/Icon.types.ts @@ -17,18 +17,18 @@ export enum IconSize { export interface IconStyledProps { color?: string - marginTop: number - marginRight: number - marginBottom: number - marginLeft: number + margintop: number + marginright: number + marginbottom: number + marginleft: number } export default interface IconProps extends StylableComponentProps, Omit { name: IconName color?: string size?: IconSize - marginTop?: number - marginRight?: number - marginBottom?: number - marginLeft?: number + margintop?: number + marginright?: number + marginbottom?: number + marginleft?: number } From 15893080404930a86cac1713c31d625f030fc2fd Mon Sep 17 00:00:00 2001 From: groovypark Date: Wed, 14 Oct 2020 15:49:19 +0900 Subject: [PATCH 04/16] =?UTF-8?q?=EB=8C=80=EB=8B=88=EC=96=BC,=20=EB=A0=88?= =?UTF-8?q?=EC=98=A4=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Icon/Icon.types.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/Icon/Icon.types.ts b/src/components/Icon/Icon.types.ts index 3614551453..ac3f2b5b55 100644 --- a/src/components/Icon/Icon.types.ts +++ b/src/components/Icon/Icon.types.ts @@ -27,8 +27,8 @@ export default interface IconProps extends StylableComponentProps, Omit Date: Thu, 15 Oct 2020 18:07:42 +0900 Subject: [PATCH 05/16] =?UTF-8?q?container=20props=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.tsx | 58 +++++++------------------ src/components/Overlay/Overlay.types.ts | 4 -- 2 files changed, 16 insertions(+), 46 deletions(-) diff --git a/src/components/Overlay/Overlay.tsx b/src/components/Overlay/Overlay.tsx index 233d116791..418950a4a1 100644 --- a/src/components/Overlay/Overlay.tsx +++ b/src/components/Overlay/Overlay.tsx @@ -27,7 +27,7 @@ export const WRAPPER_TEST_ID = 'ch-design-system-wrapper' export const OVERLAY_TEST_ID = 'ch-design-system-overlay' const ESCAPE_KEY = 'Escape' -const rootElement = document.getElementById('root') +const rootElement = document.getElementById('root') as HTMLElement function listen(element: any, eventName: K, handler: EventHandler) { if (!element) return noop @@ -38,34 +38,28 @@ function listen(element: any, eventName: K, } } -function getOverlayPosition({ container, target }: getOverlayPositionProps) { +function getOverlayPosition({ target }: getOverlayPositionProps) { const { top: targetTop, left: targetLeft } = target.getBoundingClientRect() - const top = container ? - targetTop - target.clientTop - container.getBoundingClientRect().top + container.scrollTop : - targetTop - target.clientTop - const left = container ? - targetLeft - target.clientLeft - container.getBoundingClientRect().left + container.scrollLeft : - targetLeft - target.clientLeft + const top = targetTop - target.clientTop + const left = targetLeft - target.clientLeft return { top, left } } function getOverlayTranslate({ - container, target, overlay, placement, marginX, marginY, }: getOverlayTranslateProps) { - const containerElement = container || rootElement as HTMLElement const { width: containerWidth, height: containerHeight, top: containerTop, left: containerLeft, - } = containerElement.getBoundingClientRect() + } = rootElement.getBoundingClientRect() const { width: targetWidth, height: targetHeight, top: targetTop, left: targetLeft } = target.getBoundingClientRect() const { width: overlayWidth, height: overlayHeight } = overlay.getBoundingClientRect() @@ -136,7 +130,6 @@ function getOverlayTranslate({ } function getOverlayStyle({ - container, target, overlay, placement, @@ -144,8 +137,8 @@ function getOverlayStyle({ marginY, }: getOverlayStyleProps) { if (target) { - const overlayPositionStyle = getOverlayPosition({ container, target }) - const overlayTranslateStyle = getOverlayTranslate({ container, target, overlay, placement, marginX, marginY }) + const overlayPositionStyle = getOverlayPosition({ target }) + const overlayTranslateStyle = getOverlayTranslate({ target, overlay, placement, marginX, marginY }) const combinedStyle = { ...overlayPositionStyle, @@ -167,7 +160,6 @@ function Overlay( show = false, className = '', style, - container, target, placement = OverlayPosition.LEFT, marginX = 0, @@ -202,40 +194,23 @@ function Overlay( } }, [onHide]) - const overlay = useMemo(() => { - if (container) { - return ( + const overlay = useMemo(() => ( + + { children } - ) - } - return ( - - - - { children } - - - - ) - }, [ + + + ), [ as, - container, className, style, overlayStyle, @@ -265,7 +240,6 @@ function Overlay( useEffect(() => { if (show) { const tempOverlayStyle = getOverlayStyle({ - container, target, overlay: overlayRef.current as HTMLElement, placement, @@ -279,11 +253,11 @@ function Overlay( } } return noop - }, [show, container, marginX, marginY, placement, target]) + }, [show, marginX, marginY, placement, target]) if (!show) return null - return ReactDOM.createPortal(overlay, container || rootElement as HTMLElement) + return ReactDOM.createPortal(overlay, rootElement as HTMLElement) } export default forwardRef(Overlay) diff --git a/src/components/Overlay/Overlay.types.ts b/src/components/Overlay/Overlay.types.ts index f0bbc6dc7f..24e945c9d5 100644 --- a/src/components/Overlay/Overlay.types.ts +++ b/src/components/Overlay/Overlay.types.ts @@ -6,7 +6,6 @@ export default interface OverlayProps extends UIComponentProps { show?: boolean className?: string style?: React.CSSProperties - container?: HTMLElement target: HTMLElement | null placement?: OverlayPosition marginX?: number @@ -16,7 +15,6 @@ export default interface OverlayProps extends UIComponentProps { } export interface getOverlayStyleProps { - container?: HTMLElement target: HTMLElement | null overlay: HTMLElement placement: OverlayPosition @@ -25,12 +23,10 @@ export interface getOverlayStyleProps { } export interface getOverlayPositionProps { - container?: HTMLElement target: HTMLElement } export interface getOverlayTranslateProps { - container?: HTMLElement target: HTMLElement overlay: HTMLElement placement: OverlayPosition From 278bcb2954b85ecb3de49f333630feab7e8b670a Mon Sep 17 00:00:00 2001 From: danivelop Date: Thu, 15 Oct 2020 18:14:38 +0900 Subject: [PATCH 06/16] =?UTF-8?q?OverlayPosition=EC=86=8D=EC=84=B1?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD(leo,=20lloyd=EB=A6=AC=EB=B7=B0?= =?UTF-8?q?=EB=B0=98=EC=98=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.tsx | 42 +++++++++++------------ src/components/Overlay/OverlayPosition.ts | 24 ++++++------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/components/Overlay/Overlay.tsx b/src/components/Overlay/Overlay.tsx index 418950a4a1..c4428097e4 100644 --- a/src/components/Overlay/Overlay.tsx +++ b/src/components/Overlay/Overlay.tsx @@ -68,47 +68,47 @@ function getOverlayTranslate({ // pre position switch (placement) { - case OverlayPosition.TOP: - case OverlayPosition.TOP_LEFT: - case OverlayPosition.TOP_RIGHT: + case OverlayPosition.TopCenter: + case OverlayPosition.TopLeft: + case OverlayPosition.TopRight: translateY -= (overlayHeight + marginY) translateX += marginX break - case OverlayPosition.RIGHT: - case OverlayPosition.RIGHT_TOP: - case OverlayPosition.RIGHT_BOTTOM: + case OverlayPosition.RightCenter: + case OverlayPosition.RightTop: + case OverlayPosition.RightBottom: translateX += (targetWidth + marginX) translateY += marginY break - case OverlayPosition.BOTTOM: - case OverlayPosition.BOTTOM_LEFT: - case OverlayPosition.BOTTOM_RIGHT: + case OverlayPosition.BottomCenter: + case OverlayPosition.BottomLeft: + case OverlayPosition.BottomRight: translateY += (targetHeight + marginY) translateX += marginX break - case OverlayPosition.LEFT: - case OverlayPosition.LEFT_TOP: - case OverlayPosition.LEFT_BOTTOM: + case OverlayPosition.LeftCenter: + case OverlayPosition.LeftTop: + case OverlayPosition.LeftBottom: translateX -= (overlayWidth + marginX) translateY += marginY break } // post position switch (placement) { - case OverlayPosition.TOP: - case OverlayPosition.BOTTOM: + case OverlayPosition.TopCenter: + case OverlayPosition.BottomCenter: translateX -= ((overlayWidth / 2) - (targetWidth / 2)) break - case OverlayPosition.TOP_RIGHT: - case OverlayPosition.BOTTOM_RIGHT: + case OverlayPosition.TopRight: + case OverlayPosition.BottomRight: translateX -= (overlayWidth - targetWidth) break - case OverlayPosition.RIGHT: - case OverlayPosition.LEFT: + case OverlayPosition.RightCenter: + case OverlayPosition.LeftCenter: translateY -= ((overlayHeight / 2) - (targetHeight / 2)) break - case OverlayPosition.RIGHT_BOTTOM: - case OverlayPosition.LEFT_BOTTOM: + case OverlayPosition.RightBottom: + case OverlayPosition.LeftBottom: translateY -= (overlayHeight - targetHeight) break } @@ -161,7 +161,7 @@ function Overlay( className = '', style, target, - placement = OverlayPosition.LEFT, + placement = OverlayPosition.LeftCenter, marginX = 0, marginY = 0, children, diff --git a/src/components/Overlay/OverlayPosition.ts b/src/components/Overlay/OverlayPosition.ts index f271b639e2..7b5d9e0e39 100644 --- a/src/components/Overlay/OverlayPosition.ts +++ b/src/components/Overlay/OverlayPosition.ts @@ -1,16 +1,16 @@ enum OverlayPosition { - TOP = 'top', - TOP_LEFT = 'topLeft', - TOP_RIGHT = 'topRight', - RIGHT = 'right', - RIGHT_TOP = 'rightTop', - RIGHT_BOTTOM = 'rightBottom', - BOTTOM = 'bottom', - BOTTOM_LEFT = 'bottomLeft', - BOTTOM_RIGHT = 'bottomRight', - LEFT = 'left', - LEFT_TOP = 'leftTop', - LEFT_BOTTOM = 'leftBottom', + TopCenter = 'topCenter', + TopLeft = 'topLeft', + TopRight = 'topRight', + RightCenter = 'rightCenter', + RightTop = 'rightTop', + RightBottom = 'rightBottom', + BottomCenter = 'bottomCenter', + BottomLeft = 'bottomLeft', + BottomRight = 'bottomRight', + LeftCenter = 'leftCenter', + LeftTop = 'leftTop', + LeftBottom = 'leftBottom', } export default OverlayPosition From f98fcf2cd791a9e7bc1dc8be18f6c5a0610d2187 Mon Sep 17 00:00:00 2001 From: danivelop Date: Fri, 16 Oct 2020 13:46:46 +0900 Subject: [PATCH 07/16] =?UTF-8?q?=ED=83=80=EC=9E=85=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=8F=20target=20falsy=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.tsx | 154 ++++++++++++------------ src/components/Overlay/Overlay.types.ts | 9 +- 2 files changed, 83 insertions(+), 80 deletions(-) diff --git a/src/components/Overlay/Overlay.tsx b/src/components/Overlay/Overlay.tsx index c4428097e4..9e1b4d766e 100644 --- a/src/components/Overlay/Overlay.tsx +++ b/src/components/Overlay/Overlay.tsx @@ -17,7 +17,7 @@ import OverlayProps, { EventHandler, getOverlayStyleProps, getOverlayPositionProps, - getOverlayTranslateProps, + getOverlayTranslatationProps, } from './Overlay.types' import OverlayPosition from './OverlayPosition' import { Container, Wrapper, StyledOverlay } from './Overlay.styled' @@ -39,12 +39,15 @@ function listen(element: any, eventName: K, } function getOverlayPosition({ target }: getOverlayPositionProps) { - const { top: targetTop, left: targetLeft } = target.getBoundingClientRect() + if (target) { + const { top: targetTop, left: targetLeft } = target.getBoundingClientRect() - const top = targetTop - target.clientTop - const left = targetLeft - target.clientLeft + const top = targetTop - target.clientTop + const left = targetLeft - target.clientLeft - return { top, left } + return { top, left } + } + return {} } function getOverlayTranslate({ @@ -53,80 +56,83 @@ function getOverlayTranslate({ placement, marginX, marginY, -}: getOverlayTranslateProps) { - const { - width: containerWidth, - height: containerHeight, - top: containerTop, - left: containerLeft, - } = rootElement.getBoundingClientRect() - const { width: targetWidth, height: targetHeight, top: targetTop, left: targetLeft } = target.getBoundingClientRect() - const { width: overlayWidth, height: overlayHeight } = overlay.getBoundingClientRect() +}: getOverlayTranslatationProps) { + if (target) { + const { + width: containerWidth, + height: containerHeight, + top: containerTop, + left: containerLeft, + } = rootElement.getBoundingClientRect() + const { width: targetWidth, height: targetHeight, top: targetTop, left: targetLeft } = target.getBoundingClientRect() + const { width: overlayWidth, height: overlayHeight } = overlay.getBoundingClientRect() - let translateX = 0 - let translateY = 0 + let translateX = 0 + let translateY = 0 - // pre position - switch (placement) { - case OverlayPosition.TopCenter: - case OverlayPosition.TopLeft: - case OverlayPosition.TopRight: - translateY -= (overlayHeight + marginY) - translateX += marginX - break - case OverlayPosition.RightCenter: - case OverlayPosition.RightTop: - case OverlayPosition.RightBottom: - translateX += (targetWidth + marginX) - translateY += marginY - break - case OverlayPosition.BottomCenter: - case OverlayPosition.BottomLeft: - case OverlayPosition.BottomRight: - translateY += (targetHeight + marginY) - translateX += marginX - break - case OverlayPosition.LeftCenter: - case OverlayPosition.LeftTop: - case OverlayPosition.LeftBottom: - translateX -= (overlayWidth + marginX) - translateY += marginY - break - } - // post position - switch (placement) { - case OverlayPosition.TopCenter: - case OverlayPosition.BottomCenter: - translateX -= ((overlayWidth / 2) - (targetWidth / 2)) - break - case OverlayPosition.TopRight: - case OverlayPosition.BottomRight: - translateX -= (overlayWidth - targetWidth) - break - case OverlayPosition.RightCenter: - case OverlayPosition.LeftCenter: - translateY -= ((overlayHeight / 2) - (targetHeight / 2)) - break - case OverlayPosition.RightBottom: - case OverlayPosition.LeftBottom: - translateY -= (overlayHeight - targetHeight) - break - } + // pre position + switch (placement) { + case OverlayPosition.TopCenter: + case OverlayPosition.TopLeft: + case OverlayPosition.TopRight: + translateY -= (overlayHeight + marginY) + translateX += marginX + break + case OverlayPosition.RightCenter: + case OverlayPosition.RightTop: + case OverlayPosition.RightBottom: + translateX += (targetWidth + marginX) + translateY += marginY + break + case OverlayPosition.BottomCenter: + case OverlayPosition.BottomLeft: + case OverlayPosition.BottomRight: + translateY += (targetHeight + marginY) + translateX += marginX + break + case OverlayPosition.LeftCenter: + case OverlayPosition.LeftTop: + case OverlayPosition.LeftBottom: + translateX -= (overlayWidth + marginX) + translateY += marginY + break + } + // post position + switch (placement) { + case OverlayPosition.TopCenter: + case OverlayPosition.BottomCenter: + translateX -= ((overlayWidth / 2) - (targetWidth / 2)) + break + case OverlayPosition.TopRight: + case OverlayPosition.BottomRight: + translateX -= (overlayWidth - targetWidth) + break + case OverlayPosition.RightCenter: + case OverlayPosition.LeftCenter: + translateY -= ((overlayHeight / 2) - (targetHeight / 2)) + break + case OverlayPosition.RightBottom: + case OverlayPosition.LeftBottom: + translateY -= (overlayHeight - targetHeight) + break + } - const isOverTop = targetTop + translateY < containerTop - const isOverBottom = targetTop + translateY + overlayHeight > containerTop + containerHeight - const isOverLeft = targetLeft + translateX < containerLeft - const isOverRight = targetLeft + translateX + overlayWidth > containerLeft + containerWidth + const isOverTop = targetTop + translateY < containerTop + const isOverBottom = targetTop + translateY + overlayHeight > containerTop + containerHeight + const isOverLeft = targetLeft + translateX < containerLeft + const isOverRight = targetLeft + translateX + overlayWidth > containerLeft + containerWidth - if (isOverTop || isOverBottom) { - translateY = targetHeight - translateY - overlayHeight - } - if (isOverLeft || isOverRight) { - translateX = targetWidth - translateX - overlayWidth - } + if (isOverTop || isOverBottom) { + translateY = targetHeight - translateY - overlayHeight + } + if (isOverLeft || isOverRight) { + translateX = targetWidth - translateX - overlayWidth + } - const transform = `translate(${translateX}px, ${translateY}px)` - return { transform } + const transform = `translate(${translateX}px, ${translateY}px)` + return { transform } + } + return {} } function getOverlayStyle({ diff --git a/src/components/Overlay/Overlay.types.ts b/src/components/Overlay/Overlay.types.ts index 24e945c9d5..2796d119b6 100644 --- a/src/components/Overlay/Overlay.types.ts +++ b/src/components/Overlay/Overlay.types.ts @@ -1,16 +1,13 @@ /* Internal dependencies */ -import { UIComponentProps } from '../../types/ComponentProps' +import { UIComponentProps, ChildrenComponentProps } from '../../types/ComponentProps' import OverlayPosition from './OverlayPosition' -export default interface OverlayProps extends UIComponentProps { +export default interface OverlayProps extends UIComponentProps, ChildrenComponentProps { show?: boolean - className?: string - style?: React.CSSProperties target: HTMLElement | null placement?: OverlayPosition marginX?: number marginY?: number - children: React.ReactNode onHide?: () => void } @@ -26,7 +23,7 @@ export interface getOverlayPositionProps { target: HTMLElement } -export interface getOverlayTranslateProps { +export interface getOverlayTranslatationProps { target: HTMLElement overlay: HTMLElement placement: OverlayPosition From a66717c6daf4694e36e7651843a16d5a9627427a Mon Sep 17 00:00:00 2001 From: danivelop Date: Fri, 16 Oct 2020 13:52:55 +0900 Subject: [PATCH 08/16] =?UTF-8?q?manuel=EB=A6=AC=EB=B7=B0=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/components/Overlay/Overlay.tsx b/src/components/Overlay/Overlay.tsx index 9e1b4d766e..ec31e91aa2 100644 --- a/src/components/Overlay/Overlay.tsx +++ b/src/components/Overlay/Overlay.tsx @@ -38,7 +38,7 @@ function listen(element: any, eventName: K, } } -function getOverlayPosition({ target }: getOverlayPositionProps) { +function getOverlayPosition({ target }: getOverlayPositionProps): React.CSSProperties { if (target) { const { top: targetTop, left: targetLeft } = target.getBoundingClientRect() @@ -56,7 +56,7 @@ function getOverlayTranslate({ placement, marginX, marginY, -}: getOverlayTranslatationProps) { +}: getOverlayTranslatationProps): React.CSSProperties { if (target) { const { width: containerWidth, @@ -141,7 +141,7 @@ function getOverlayStyle({ placement, marginX, marginY, -}: getOverlayStyleProps) { +}: getOverlayStyleProps): React.CSSProperties { if (target) { const overlayPositionStyle = getOverlayPosition({ target }) const overlayTranslateStyle = getOverlayTranslate({ target, overlay, placement, marginX, marginY }) @@ -176,6 +176,7 @@ function Overlay( forwardedRef: Ref, ) { const [overlayStyle, setOverlayStyle] = useState() + const [isHidden, setIsHidden] = useState(true) const overlayRef = useRef(null) const mergedRef = useMergeRefs(overlayRef, forwardedRef) @@ -206,7 +207,7 @@ function Overlay( { setOverlayStyle(undefined) + setIsHidden(true) } } return noop From aea649180af190a331af59ab2a8b2fb32be22e27 Mon Sep 17 00:00:00 2001 From: danivelop Date: Fri, 16 Oct 2020 13:54:32 +0900 Subject: [PATCH 09/16] =?UTF-8?q?storybook=EC=9D=98=20OverlayPosition?= =?UTF-8?q?=EC=86=8D=EC=84=B1=EB=AA=85=EB=8F=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.stories.tsx | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/components/Overlay/Overlay.stories.tsx b/src/components/Overlay/Overlay.stories.tsx index dbae2e9c0f..b9731c52d4 100644 --- a/src/components/Overlay/Overlay.stories.tsx +++ b/src/components/Overlay/Overlay.stories.tsx @@ -17,18 +17,18 @@ export default { control: { type: 'radio', options: [ - OverlayPosition.TOP, - OverlayPosition.TOP_LEFT, - OverlayPosition.TOP_RIGHT, - OverlayPosition.RIGHT, - OverlayPosition.RIGHT_TOP, - OverlayPosition.RIGHT_BOTTOM, - OverlayPosition.BOTTOM, - OverlayPosition.BOTTOM_LEFT, - OverlayPosition.BOTTOM_RIGHT, - OverlayPosition.LEFT, - OverlayPosition.LEFT_TOP, - OverlayPosition.LEFT_BOTTOM, + OverlayPosition.TopCenter, + OverlayPosition.TopLeft, + OverlayPosition.TopRight, + OverlayPosition.RightCenter, + OverlayPosition.RightTop, + OverlayPosition.RightBottom, + OverlayPosition.BottomCenter, + OverlayPosition.BottomLeft, + OverlayPosition.BottomRight, + OverlayPosition.LeftCenter, + OverlayPosition.LeftTop, + OverlayPosition.LeftBottom, ], }, }, @@ -101,7 +101,7 @@ const Template = (props) => { export const Primary = Template.bind({}) Primary.args = { show: false, - placement: OverlayPosition.BOTTOM, + placement: OverlayPosition.BottomCenter, marginX: 0, marginY: 0, } From 7dcb06fdca9a787bf82b8328aaee0fb341fb8d95 Mon Sep 17 00:00:00 2001 From: danivelop Date: Fri, 16 Oct 2020 15:06:56 +0900 Subject: [PATCH 10/16] =?UTF-8?q?overlay=EC=9D=98=20root=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.tsx | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/components/Overlay/Overlay.tsx b/src/components/Overlay/Overlay.tsx index ec31e91aa2..a17f242183 100644 --- a/src/components/Overlay/Overlay.tsx +++ b/src/components/Overlay/Overlay.tsx @@ -27,7 +27,10 @@ export const WRAPPER_TEST_ID = 'ch-design-system-wrapper' export const OVERLAY_TEST_ID = 'ch-design-system-overlay' const ESCAPE_KEY = 'Escape' -const rootElement = document.getElementById('root') as HTMLElement +const rootElement = + document.getElementById('main') || + document.getElementById('root') || + document.getElementsByTagName('body')[0] as HTMLElement function listen(element: any, eventName: K, handler: EventHandler) { if (!element) return noop @@ -59,10 +62,10 @@ function getOverlayTranslate({ }: getOverlayTranslatationProps): React.CSSProperties { if (target) { const { - width: containerWidth, - height: containerHeight, - top: containerTop, - left: containerLeft, + width: rootWidth, + height: rootHeight, + top: rootTop, + left: rootLeft, } = rootElement.getBoundingClientRect() const { width: targetWidth, height: targetHeight, top: targetTop, left: targetLeft } = target.getBoundingClientRect() const { width: overlayWidth, height: overlayHeight } = overlay.getBoundingClientRect() @@ -117,10 +120,10 @@ function getOverlayTranslate({ break } - const isOverTop = targetTop + translateY < containerTop - const isOverBottom = targetTop + translateY + overlayHeight > containerTop + containerHeight - const isOverLeft = targetLeft + translateX < containerLeft - const isOverRight = targetLeft + translateX + overlayWidth > containerLeft + containerWidth + const isOverTop = targetTop + translateY < rootTop + const isOverBottom = targetTop + translateY + overlayHeight > rootTop + rootHeight + const isOverLeft = targetLeft + translateX < rootLeft + const isOverRight = targetLeft + translateX + overlayWidth > rootLeft + rootWidth if (isOverTop || isOverBottom) { translateY = targetHeight - translateY - overlayHeight From 22c9eeda503a39f0beb5211d81947577f4393f60 Mon Sep 17 00:00:00 2001 From: danivelop Date: Fri, 16 Oct 2020 15:12:16 +0900 Subject: [PATCH 11/16] =?UTF-8?q?storybook=EC=97=90=EC=84=9C=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=B4?= =?UTF-8?q?=EB=B3=BC=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.stories.tsx | 32 ++++++++++++++-------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/components/Overlay/Overlay.stories.tsx b/src/components/Overlay/Overlay.stories.tsx index b9731c52d4..c8d89f569a 100644 --- a/src/components/Overlay/Overlay.stories.tsx +++ b/src/components/Overlay/Overlay.stories.tsx @@ -52,14 +52,20 @@ export default { } const Container = styled.div` - display: flex; - justify-content: center; - align-items: center; width: 600px; height: 500px; + overflow: scroll; border: 1px solid ${Palette.grey700}; ` +const Wrapper = styled.div` + display: flex; + justify-content: center; + align-items: center; + width: 900px; + height: 800px; +` + const Target = styled.div` display: flex; justify-content: center; @@ -85,15 +91,17 @@ const Template = (props) => { return ( - - target - - - overlay - + + + target + + + overlay + + ) } From 5ab96ea8a5ac1b2444ab5103d4dccd9db6ffd1f7 Mon Sep 17 00:00:00 2001 From: Leo Jeong Date: Tue, 20 Oct 2020 14:05:32 +0900 Subject: [PATCH 12/16] =?UTF-8?q?eslint=207=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EB=B0=98=EC=98=81=20(#147)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * eslint 7 업데이트 반영 * eslintrc.js 를 eslint 에 포함 --- .eslintrc.js | 8 +- package-lock.json | 1331 ++++++++++++++++++------- package.json | 19 +- src/components/Button/Button.types.ts | 2 +- src/components/TabItem/TabItem.tsx | 4 +- src/styling/Colors.ts | 4 +- tsconfig.eslint.json | 8 + 7 files changed, 988 insertions(+), 388 deletions(-) create mode 100644 tsconfig.eslint.json diff --git a/.eslintrc.js b/.eslintrc.js index 5964718bf8..e3cf9e8215 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,7 +1,11 @@ module.exports = { - "extends": "@channel.io/eslint-config", + extends: ['@channel.io/eslint-config'], + parserOptions: { + project: ['./tsconfig.eslint.json'], + }, rules: { 'no-restricted-imports': 'off', 'no-restricted-modules': 'off', + 'react/jsx-props-no-spreading': 'off', }, -}; +} diff --git a/package-lock.json b/package-lock.json index 9cfbbc1382..6e0baf0f80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2985,12 +2985,12 @@ "dev": true }, "@channel.io/eslint-config": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@channel.io/eslint-config/-/eslint-config-1.0.5.tgz", - "integrity": "sha512-KRxs9BTr/A1+NX839bIM9EzykPrOEAoLLPjSfGZE8f6gMVS9zSPYliIh/eshWUM4NHwivpxRjbOEgCxJTyBucA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@channel.io/eslint-config/-/eslint-config-1.0.8.tgz", + "integrity": "sha512-MHg6MffXjyj0XaNmmxwVqjY8NNwFxYkFXjZC1b+OD8e9bxGaPnS3pU9Xb2BiKfUYKVvjqz42H+j0GhEfw9laew==", "dev": true, "requires": { - "eslint-config-airbnb-typescript": "^4.0.1" + "eslint-config-airbnb-typescript": "^12.0.0" } }, "@channel.io/stylelint-config": { @@ -3137,6 +3137,68 @@ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==", "dev": true }, + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "@icons/material": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", @@ -5802,12 +5864,6 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", @@ -6286,63 +6342,184 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.4.1.tgz", + "integrity": "sha512-O+8Utz8pb4OmcA+Nfi5THQnQpHSD2sDUNw9AxNHpuYOo326HZTtG8gsfT+EAYuVrFNaLyNb2QnUNkmTRDskuRA==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/experimental-utils": "4.4.1", + "@typescript-eslint/scope-manager": "4.4.1", + "debug": "^4.1.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", + "semver": "^7.3.2", "tsutils": "^3.17.1" }, "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.4.1.tgz", + "integrity": "sha512-Nt4EVlb1mqExW9cWhpV6pd1a3DkUbX9DeyYsdoeziKOpIJ04S2KMVDO+SEidsXRH/XHDpbzXykKcMTLdTXH6cQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", + "@typescript-eslint/scope-manager": "4.4.1", + "@typescript-eslint/types": "4.4.1", + "@typescript-eslint/typescript-estree": "4.4.1", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.4.1.tgz", + "integrity": "sha512-wP/V7ScKzgSdtcY1a0pZYBoCxrCstLrgRQ2O9MmCUZDtmgxCO/TCqOTGRVwpP4/2hVfqMz/Vw1ZYrG8cVxvN3g==", "dev": true, "requires": { + "@typescript-eslint/types": "4.4.1", + "@typescript-eslint/visitor-keys": "4.4.1", "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", + "globby": "^11.0.1", "is-glob": "^4.0.1", "lodash": "^4.17.15", "semver": "^7.3.2", "tsutils": "^3.17.1" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" } }, "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6354,6 +6531,21 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } } } }, @@ -6369,61 +6561,138 @@ } }, "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.4.1.tgz", + "integrity": "sha512-S0fuX5lDku28Au9REYUsV+hdJpW/rNW0gWlc4SXzF/kdrRaAVX9YCxKpziH7djeWT/HFAjLZcnY7NJD8xTeUEg==", "dev": true, "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/scope-manager": "4.4.1", + "@typescript-eslint/types": "4.4.1", + "@typescript-eslint/typescript-estree": "4.4.1", + "debug": "^4.1.1" }, "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.4.1.tgz", + "integrity": "sha512-wP/V7ScKzgSdtcY1a0pZYBoCxrCstLrgRQ2O9MmCUZDtmgxCO/TCqOTGRVwpP4/2hVfqMz/Vw1ZYrG8cVxvN3g==", "dev": true, "requires": { + "@typescript-eslint/types": "4.4.1", + "@typescript-eslint/visitor-keys": "4.4.1", "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", + "globby": "^11.0.1", "is-glob": "^4.0.1", "lodash": "^4.17.15", "semver": "^7.3.2", "tsutils": "^3.17.1" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "path-type": "^4.0.0" + } + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" } }, "ms": { @@ -6437,9 +6706,40 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } } } }, + "@typescript-eslint/scope-manager": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.4.1.tgz", + "integrity": "sha512-2oD/ZqD4Gj41UdFeWZxegH3cVEEH/Z6Bhr/XvwTtGv66737XkR4C9IqEkebCuqArqBJQSj4AgNHHiN1okzD/wQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.4.1", + "@typescript-eslint/visitor-keys": "4.4.1" + } + }, + "@typescript-eslint/types": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.4.1.tgz", + "integrity": "sha512-KNDfH2bCyax5db+KKIZT4rfA8rEk5N0EJ8P0T5AJjo5xrV26UAzaiqoJCxeaibqc0c/IvZxp7v2g3difn2Pn3w==", + "dev": true + }, "@typescript-eslint/typescript-estree": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", @@ -6458,6 +6758,24 @@ } } }, + "@typescript-eslint/visitor-keys": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.4.1.tgz", + "integrity": "sha512-H2JMWhLaJNeaylSnMSQFEhT/S/FsJbebQALmoJxMPMxLtlVAMy2uJP/Z543n9IizhjRayLSqoInehCeNW9rWcw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.4.1", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + } + } + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -7012,12 +7330,6 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", - "dev": true - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -7283,10 +7595,16 @@ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", "dev": true }, + "axe-core": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", + "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==", + "dev": true + }, "axobject-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz", - "integrity": "sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, "babel-code-frame": { @@ -11023,325 +11341,550 @@ } }, "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", + "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", + "levn": "^0.4.1", + "lodash": "^4.17.19", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", + "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", "table": "^5.2.3", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "ansi-regex": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-config-airbnb": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.0.tgz", + "integrity": "sha512-Fz4JIUKkrhO0du2cg5opdyPKQXOI2MvF8KUvN2710nJMT6jaRUpRE2swrJftAjVGL7T1otLM5ieo5RqS1v9Udg==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^14.2.0", + "object.assign": "^4.1.0", + "object.entries": "^1.1.2" + }, + "dependencies": { + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + } + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz", + "integrity": "sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.9", + "object.assign": "^4.1.0", + "object.entries": "^1.1.2" + }, + "dependencies": { + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + } + } + }, + "eslint-config-airbnb-typescript": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.0.0.tgz", + "integrity": "sha512-TUCVru1Z09eKnVAX5i3XoNzjcCOU3nDQz2/jQGkg1jVYm+25fKClveziSl16celfCq+npU0MBPW/ZnXdGFZ9lw==", + "dev": true, + "requires": { + "@typescript-eslint/parser": "4.4.1", + "eslint-config-airbnb": "18.2.0", + "eslint-config-airbnb-base": "14.2.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", "dev": true }, - "cli-cursor": { + "@typescript-eslint/parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.4.1.tgz", + "integrity": "sha512-S0fuX5lDku28Au9REYUsV+hdJpW/rNW0gWlc4SXzF/kdrRaAVX9YCxKpziH7djeWT/HFAjLZcnY7NJD8xTeUEg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.4.1", + "@typescript-eslint/types": "4.4.1", + "@typescript-eslint/typescript-estree": "4.4.1", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.4.1.tgz", + "integrity": "sha512-wP/V7ScKzgSdtcY1a0pZYBoCxrCstLrgRQ2O9MmCUZDtmgxCO/TCqOTGRVwpP4/2hVfqMz/Vw1ZYrG8cVxvN3g==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.4.1", + "@typescript-eslint/visitor-keys": "4.4.1", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "fill-range": "^7.0.1" } }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "path-type": "^4.0.0" } }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "to-regex-range": "^5.0.1" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "braces": "^3.0.1", + "picomatch": "^2.0.5" } }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "eslint-config-airbnb": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-17.1.1.tgz", - "integrity": "sha512-xCu//8a/aWqagKljt+1/qAM62BYZeNq04HmdevG5yUGWpja0I/xhqd6GdLRch5oetEGFiJAnvtGuTEAese53Qg==", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "^13.2.0", - "object.assign": "^4.1.0", - "object.entries": "^1.1.0" - } - }, - "eslint-config-airbnb-base": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz", - "integrity": "sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w==", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.5", - "object.assign": "^4.1.0", - "object.entries": "^1.1.0" - } - }, - "eslint-config-airbnb-typescript": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-4.0.1.tgz", - "integrity": "sha512-4LHD0O0X1e08k+e8AngAsKPYNc7nL+5PzK7OEl9qZ6d7C+wo8BN2fMxBhhiUmRggJxArrldp7Dgb1s2f1/Robg==", - "dev": true, - "requires": { - "@typescript-eslint/parser": "^1.11.0", - "eslint-config-airbnb": "^17.1.0", - "eslint-config-airbnb-base": "^13.1.0" - }, - "dependencies": { - "@typescript-eslint/parser": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz", - "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "1.13.0", - "@typescript-eslint/typescript-estree": "1.13.0", - "eslint-visitor-keys": "^1.0.0" + "is-number": "^7.0.0" } } } }, "eslint-import-resolver-node": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", - "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, "requires": { "debug": "^2.6.9", "resolve": "^1.13.1" } }, - "eslint-import-resolver-webpack": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.10.1.tgz", - "integrity": "sha512-RN49nnyQpBCP3TqVhct+duJjH8kaVg08fFevWvA+4Cr1xeN7OFQRse4wMvzBto9/4VmOJWvqPfdmNTEG3jc8SQ==", + "eslint-import-resolver-typescript": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.3.0.tgz", + "integrity": "sha512-MHSXvmj5e0SGOOBhBbt7C+fWj1bJbtSYFAD85Xeg8nvUtuooTod2HQb8bfhE9f5QyyNxEfgzqOYFCvmdDIcCuw==", "dev": true, "requires": { - "array-find": "^1.0.0", - "debug": "^2.6.8", - "enhanced-resolve": "~0.9.0", - "find-root": "^1.1.0", - "has": "^1.0.1", - "interpret": "^1.0.0", - "lodash": "^4.17.4", - "node-libs-browser": "^1.0.0 || ^2.0.0", - "resolve": "^1.4.0", - "semver": "^5.3.0" + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { - "enhanced-resolve": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.2.0", - "tapable": "^0.1.8" + "ms": "2.1.2" } }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "memory-fs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", - "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "tapable": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", - "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -11426,9 +11969,9 @@ } }, "eslint-plugin-import": { - "version": "2.21.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz", - "integrity": "sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA==", + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", "dev": true, "requires": { "array-includes": "^3.1.1", @@ -11436,7 +11979,7 @@ "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.3", + "eslint-import-resolver-node": "^0.3.4", "eslint-module-utils": "^2.6.0", "has": "^1.0.3", "minimatch": "^3.0.4", @@ -11553,57 +12096,78 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", - "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz", + "integrity": "sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g==", "dev": true, "requires": { - "@babel/runtime": "^7.4.5", - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", + "@babel/runtime": "^7.10.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.2", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^7.0.2", + "axe-core": "^3.5.4", + "axobject-query": "^2.1.2", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.2.1" + "jsx-ast-utils": "^2.4.1", + "language-tags": "^1.0.5" }, "dependencies": { + "@babel/runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz", + "integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==", + "dev": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + } + }, "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" } }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "emoji-regex": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.1.1.tgz", + "integrity": "sha512-AaWyDiNO9rbtMIcGl7tdxMcNu8SOLaDLxmQEFT5JhgKufOJzPPkYmgN2QwqTgw4doWMZZQttC6sUWVQjb+1VdA==", "dev": true } } }, "eslint-plugin-react": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz", - "integrity": "sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.4.tgz", + "integrity": "sha512-uHeQ8A0hg0ltNDXFu3qSfFqTNPXm1XithH6/SY318UX76CMj7Q599qWpgmMhVQyvhq36pm7qvoN3pb6/3jsTFg==", "dev": true, "requires": { "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.2.3", - "object.entries": "^1.1.1", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", "object.fromentries": "^2.0.2", "object.values": "^1.1.1", "prop-types": "^15.7.2", - "resolve": "^1.15.1", - "string.prototype.matchall": "^4.0.2", - "xregexp": "^4.3.0" + "resolve": "^1.17.0", + "string.prototype.matchall": "^4.0.2" }, "dependencies": { "doctrine": { @@ -11614,13 +12178,24 @@ "requires": { "esutils": "^2.0.2" } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } } } }, "eslint-plugin-react-hooks": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", - "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.1.2.tgz", + "integrity": "sha512-ykUeqkGyUGgwTtk78C0o8UG2fzwmgJ0qxBGPp2WqRKsTwcLuVf01kTDRAtOsd4u6whX2XOC8749n2vPydP82fg==", "dev": true }, "eslint-rule-composer": { @@ -11655,14 +12230,28 @@ "dev": true }, "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "esprima": { @@ -11681,9 +12270,9 @@ }, "dependencies": { "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } @@ -16703,6 +17292,21 @@ "integrity": "sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA==", "dev": true }, + "language-subtag-registry": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", + "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -18600,12 +19204,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -21707,9 +22305,9 @@ } }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "style-loader": { @@ -24007,15 +24605,6 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, - "xregexp": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz", - "integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==", - "dev": true, - "requires": { - "@babel/runtime-corejs3": "^7.8.3" - } - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index fb3a054280..8e79382f99 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@babel/preset-env": "^7.10.4", "@babel/preset-react": "^7.10.4", "@babel/preset-typescript": "^7.10.4", - "@channel.io/eslint-config": "^1.0.5", + "@channel.io/eslint-config": "^1.0.8", "@channel.io/stylelint-config": "^1.1.0", "@rollup/plugin-babel": "^5.1.0", "@rollup/plugin-commonjs": "^11.0.2", @@ -87,8 +87,8 @@ "@types/react": "^16.9.34", "@types/styled-components": "^5.1.0", "@types/uuid": "^8.3.0", - "@typescript-eslint/eslint-plugin": "^2.34.0", - "@typescript-eslint/parser": "^2.34.0", + "@typescript-eslint/eslint-plugin": "^4.4.1", + "@typescript-eslint/parser": "^4.4.1", "babel-eslint": "^8.2.6", "babel-jest": "^26.2.2", "babel-loader": "^8.1.0", @@ -96,15 +96,14 @@ "babel-preset-react-app": "^9.1.2", "core-js": "^3.6.5", "cross-env": "^7.0.2", - "eslint": "^5.16.0", - "eslint-config-airbnb-typescript": "^4.0.1", - "eslint-import-resolver-webpack": "^0.10.1", + "eslint": "^7.11.0", + "eslint-import-resolver-typescript": "^2.3.0", "eslint-plugin-babel": "^5.3.0", - "eslint-plugin-import": "^2.21.2", + "eslint-plugin-import": "^2.22.1", "eslint-plugin-jest": "^22.21.0", - "eslint-plugin-jsx-a11y": "^6.2.3", - "eslint-plugin-react": "^7.20.0", - "eslint-plugin-react-hooks": "^1.7.0", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-react": "^7.21.4", + "eslint-plugin-react-hooks": "^4.1.2", "husky": "^4.2.5", "identity-obj-proxy": "^3.0.0", "jest": "^26.0.1", diff --git a/src/components/Button/Button.types.ts b/src/components/Button/Button.types.ts index 146778cd73..0c88835f04 100644 --- a/src/components/Button/Button.types.ts +++ b/src/components/Button/Button.types.ts @@ -4,7 +4,7 @@ import { StylableComponentProps } from '../../types/ComponentProps' import type { IconName } from '../Icon/generated' export enum ButtonTheme { - Normal = 'normal' + Normal = 'normal', } export default interface ButtonProps extends StylableComponentProps { diff --git a/src/components/TabItem/TabItem.tsx b/src/components/TabItem/TabItem.tsx index 7765838c6a..b87945f0eb 100644 --- a/src/components/TabItem/TabItem.tsx +++ b/src/components/TabItem/TabItem.tsx @@ -31,7 +31,7 @@ function TabItemComponent({ onClick = _.noop, ...otherProps }: TabItemProps, forwardedRef: Ref) { - const _className = useMemo(() => ( + const clazzName = useMemo(() => ( mergeClassNames(className, ((active && activeClassName) || undefined)) ), [ className, @@ -49,7 +49,7 @@ function TabItemComponent({ base?: string } @@ -88,7 +88,7 @@ function getColorsFromKeyword(keyword: string) { export function createColors({ colors, base = 'light', -}: createColorsConfig): Colors { +}: CreateColorsConfig): Colors { return { ...getColorsFromKeyword(base), ...colors, diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 0000000000..af2531b2b5 --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "src/**/*", + ".eslintrc.js" + ], + "exclude": [] +} From 1ce9161fb1316835e2e5d99f656980f122a83e56 Mon Sep 17 00:00:00 2001 From: Leo Jeong Date: Tue, 20 Oct 2020 14:05:51 +0900 Subject: [PATCH 13/16] =?UTF-8?q?npm=20install=20=EB=8C=80=EC=8B=A0=20npm?= =?UTF-8?q?=20ci=20=EC=93=B0=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD=20(#12?= =?UTF-8?q?1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index afc08d43d6..e46adc617c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -29,7 +29,7 @@ jobs: - restore_cache: keys: - design-system-dependencies-{{ checksum "package.json" }} - - run: npm install + - run: npm ci - save_cache: paths: - node_modules From 0e992117c9c7d76fdaaadf444abb6bd595ce0caa Mon Sep 17 00:00:00 2001 From: danivelop Date: Mon, 26 Oct 2020 17:08:58 +0900 Subject: [PATCH 14/16] =?UTF-8?q?lloyd=20=EB=A6=AC=EB=B7=B0=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.styled.ts | 2 ++ src/components/Overlay/Overlay.tsx | 17 ++++++++++------- src/components/Overlay/Overlay.types.ts | 4 ++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/components/Overlay/Overlay.styled.ts b/src/components/Overlay/Overlay.styled.ts index cca2cdcacb..0124bd76af 100644 --- a/src/components/Overlay/Overlay.styled.ts +++ b/src/components/Overlay/Overlay.styled.ts @@ -8,6 +8,8 @@ export const Container = styled.div` position: fixed; top: 0; left: 0; + bottom: 0; + right: 0; ` export const Wrapper = styled.div` diff --git a/src/components/Overlay/Overlay.tsx b/src/components/Overlay/Overlay.tsx index a17f242183..a291bdd793 100644 --- a/src/components/Overlay/Overlay.tsx +++ b/src/components/Overlay/Overlay.tsx @@ -53,7 +53,7 @@ function getOverlayPosition({ target }: getOverlayPositionProps): React.CSSPrope return {} } -function getOverlayTranslate({ +function getOverlayTranslation({ target, overlay, placement, @@ -147,7 +147,7 @@ function getOverlayStyle({ }: getOverlayStyleProps): React.CSSProperties { if (target) { const overlayPositionStyle = getOverlayPosition({ target }) - const overlayTranslateStyle = getOverlayTranslate({ target, overlay, placement, marginX, marginY }) + const overlayTranslateStyle = getOverlayTranslation({ target, overlay, placement, marginX, marginY }) const combinedStyle = { ...overlayPositionStyle, @@ -181,10 +181,12 @@ function Overlay( const [overlayStyle, setOverlayStyle] = useState() const [isHidden, setIsHidden] = useState(true) const overlayRef = useRef(null) + const containerRef = useRef(null) const mergedRef = useMergeRefs(overlayRef, forwardedRef) - const handleBlockMouseWheel = useCallback((e: React.MouseEvent) => { - e.stopPropagation() + const handleBlockMouseWheel = useCallback((event: HTMLElementEventMap['wheel']) => { + event.stopPropagation() + event.preventDefault() }, []) const handleHideOverlay = useCallback((event: any) => { @@ -205,7 +207,7 @@ function Overlay( }, [onHide]) const overlay = useMemo(() => ( - + { @@ -238,15 +239,17 @@ function Overlay( const removeDocumentClickListener = listen(document, 'click', handleHideOverlay) const removeDocumentKeyupListener = listen(document, 'keyup', handleKeydown) const removeTargetClickListener = listen(target, 'click', handleClickTarget) + const remoteContainerWheelListener = listen(containerRef.current, 'wheel', handleBlockMouseWheel) return () => { removeDocumentClickListener() removeDocumentKeyupListener() removeTargetClickListener() + remoteContainerWheelListener() } } return noop - }, [show, target, handleHideOverlay, handleKeydown, handleClickTarget]) + }, [show, target, handleHideOverlay, handleKeydown, handleClickTarget, handleBlockMouseWheel]) useEffect(() => { if (show) { diff --git a/src/components/Overlay/Overlay.types.ts b/src/components/Overlay/Overlay.types.ts index 2796d119b6..8674eb1478 100644 --- a/src/components/Overlay/Overlay.types.ts +++ b/src/components/Overlay/Overlay.types.ts @@ -4,7 +4,7 @@ import OverlayPosition from './OverlayPosition' export default interface OverlayProps extends UIComponentProps, ChildrenComponentProps { show?: boolean - target: HTMLElement | null + target: HTMLElement | null | undefined placement?: OverlayPosition marginX?: number marginY?: number @@ -12,7 +12,7 @@ export default interface OverlayProps extends UIComponentProps, ChildrenComponen } export interface getOverlayStyleProps { - target: HTMLElement | null + target: HTMLElement | null | undefined overlay: HTMLElement placement: OverlayPosition marginX: number From a05c14fd1bf4e2e0d69ac15bbeedb02cc0b0e3c0 Mon Sep 17 00:00:00 2001 From: danivelop Date: Mon, 26 Oct 2020 17:24:11 +0900 Subject: [PATCH 15/16] =?UTF-8?q?lloyd=20=EB=A6=AC=EB=B7=B0=EB=B0=98?= =?UTF-8?q?=EC=98=81(=ED=83=80=EC=9E=85=EC=88=98=EC=A0=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Overlay/Overlay.types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Overlay/Overlay.types.ts b/src/components/Overlay/Overlay.types.ts index 8674eb1478..081e9f0f32 100644 --- a/src/components/Overlay/Overlay.types.ts +++ b/src/components/Overlay/Overlay.types.ts @@ -4,7 +4,7 @@ import OverlayPosition from './OverlayPosition' export default interface OverlayProps extends UIComponentProps, ChildrenComponentProps { show?: boolean - target: HTMLElement | null | undefined + target?: HTMLElement | null placement?: OverlayPosition marginX?: number marginY?: number @@ -12,7 +12,7 @@ export default interface OverlayProps extends UIComponentProps, ChildrenComponen } export interface getOverlayStyleProps { - target: HTMLElement | null | undefined + target?: HTMLElement | null overlay: HTMLElement placement: OverlayPosition marginX: number From 8a269cc20158154c6aad7f64ac4fb9dea1bf24c8 Mon Sep 17 00:00:00 2001 From: Lloyd Junbong Lee Date: Mon, 26 Oct 2020 17:46:13 +0900 Subject: [PATCH 16/16] =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20v0.2.12=20(#153)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e0baf0f80..18f3ea1c71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@channel.io/design-system", - "version": "0.2.11", + "version": "0.2.12", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 8e79382f99..8407f5b6b9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@channel.io/design-system", - "version": "0.2.11", + "version": "0.2.12", "description": "Design System by Channel", "repository": { "type": "git",