@amboss/design-system 1.20.4 → 1.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/build-tokens/visualConfig.js +11 -0
- package/build/cjs/src/components/Popover/Popover.js +8 -3
- package/build/cjs/src/components/Sheet/Sheet.js +315 -0
- package/build/cjs/src/components/Toggletip/BasePopover.js +43 -8
- package/build/cjs/src/components/Tooltip/BaseTooltip.js +1 -1
- package/build/cjs/src/components/Tooltip/TooltipContent.js +41 -22
- package/build/cjs/src/components/UserHighlightTooltip/UserHighlightTooltip.js +1 -1
- package/build/cjs/src/index.js +2 -0
- package/build/cjs/src/shared/FocusTrapWrapper.js +41 -0
- package/build/cjs/src/shared/useDragDown.js +84 -0
- package/build/esm/build-tokens/_colors.json +9 -0
- package/build/esm/build-tokens/_sizes.json +1 -1
- package/build/esm/build-tokens/visualConfig.d.ts +8 -0
- package/build/esm/build-tokens/visualConfig.js +11 -0
- package/build/esm/build-tokens/visualConfig.js.map +1 -1
- package/build/esm/src/components/Popover/Popover.d.ts +2 -3
- package/build/esm/src/components/Popover/Popover.js +8 -3
- package/build/esm/src/components/Popover/Popover.js.map +1 -1
- package/build/esm/src/components/Sheet/Sheet.d.ts +15 -0
- package/build/esm/src/components/Sheet/Sheet.js +308 -0
- package/build/esm/src/components/Sheet/Sheet.js.map +1 -0
- package/build/esm/src/components/Toggletip/BasePopover.d.ts +5 -5
- package/build/esm/src/components/Toggletip/BasePopover.js +43 -7
- package/build/esm/src/components/Toggletip/BasePopover.js.map +1 -1
- package/build/esm/src/components/Toggletip/Toggletip.d.ts +1 -1
- package/build/esm/src/components/Toggletip/Toggletip.js.map +1 -1
- package/build/esm/src/components/Tooltip/BaseTooltip.js +1 -1
- package/build/esm/src/components/Tooltip/BaseTooltip.js.map +1 -1
- package/build/esm/src/components/Tooltip/TooltipContent.js +42 -23
- package/build/esm/src/components/Tooltip/TooltipContent.js.map +1 -1
- package/build/esm/src/components/UserHighlightTooltip/UserHighlightTooltip.js +1 -1
- package/build/esm/src/components/UserHighlightTooltip/UserHighlightTooltip.js.map +1 -1
- package/build/esm/src/index.d.ts +1 -0
- package/build/esm/src/index.js +1 -0
- package/build/esm/src/index.js.map +1 -1
- package/build/esm/src/shared/FocusTrapWrapper.d.ts +10 -0
- package/build/esm/src/shared/FocusTrapWrapper.js +35 -0
- package/build/esm/src/shared/FocusTrapWrapper.js.map +1 -0
- package/build/esm/src/shared/useDragDown.d.ts +13 -0
- package/build/esm/src/shared/useDragDown.js +83 -0
- package/build/esm/src/shared/useDragDown.js.map +1 -0
- package/build/scss/_theming.scss +2 -0
- package/build/scss/_variables.scss +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasePopover.js","sources":["../../../../../src/components/Toggletip/BasePopover.tsx"],"sourcesContent":["import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n ReactElement,\n PropsWithChildren,\n} from \"react\";\nimport FocusTrap from \"focus-trap-react\";\nimport type { TooltipContentProps } from \"../Tooltip/TooltipContent\";\nimport { TooltipContent } from \"../Tooltip/TooltipContent\";\nimport { TooltipConditionalProps } from \"../Tooltip/types\";\n\ntype BaseProps = Pick<\n TooltipContentProps,\n | \"placement\"\n | \"portalContainer\"\n | \"maxWidth\"\n | \"contentPadding\"\n | \"hideArrow\"\n | \"hasInvertedSubTheme\"\n> & {\n name?: string;\n // Popover content\n content: ReactElement;\n \"data-e2e-test-id\"?: string;\n // Programmatically toggle Popover visibility with this prop\n isVisible?: boolean;\n /* Called when tooltip appears and disappears */\n onVisibilityChange?: (isVisible: boolean) => void;\n /* Controls whether BasePopover closes on outside click */\n dismissOnOutsideClick?: boolean;\n disableInitialFocus?: boolean;\n disableReturnFocusToTrigger?: boolean;\n};\n\nexport type BasePopoverProps = BaseProps;\n\ntype BasePopoverInternalProps = BaseProps &\n TooltipConditionalProps &\n Pick<TooltipContentProps, \"defaultVerticalPlacement\">;\n\nconst FocusTrapContent = React.forwardRef<\n HTMLDivElement,\n PropsWithChildren<unknown>\n>(({ children }, ref) => <div ref={ref}>{children}</div>);\n\nexport function BasePopover({\n placement = \"auto\",\n content,\n children,\n contentPadding = \"m\",\n maxWidth,\n externalTriggerRef,\n portalContainer,\n name = \"Popover\",\n isVisible: isPopoverVisible,\n dismissOnOutsideClick = true,\n \"data-e2e-test-id\": dataE2eTestId,\n hasInvertedSubTheme,\n defaultVerticalPlacement,\n onVisibilityChange,\n disableInitialFocus = false,\n disableReturnFocusToTrigger = false,\n ...restContentProps\n}: BasePopoverInternalProps): React.ReactElement {\n const tooltipId = useMemo(\n () => `DS${name}_${Math.floor(Date.now() * Math.random())}`,\n [name]\n );\n const [isVisible, setVisible] = useState(isPopoverVisible);\n const internalTriggerRef = useRef(null);\n const triggerRef = externalTriggerRef || internalTriggerRef;\n const isOutsideClickOnTrigger = useRef(false);\n\n const toggleVisibility = useCallback(\n (status: boolean) => {\n setVisible(status);\n\n if (onVisibilityChange) {\n onVisibilityChange(status);\n }\n },\n [onVisibilityChange]\n );\n\n // Outside click is also fired when the Popover is open and trigger is clicked. `isOutsideClickOnTrigger` saves this condition and we check for it so as to not toggle the Popover twice.\n const handleTriggerClick = useCallback(() => {\n if (!isOutsideClickOnTrigger.current) {\n toggleVisibility(!isVisible);\n } else {\n // reset this value so that Popover can open in next click\n isOutsideClickOnTrigger.current = false;\n }\n }, [toggleVisibility, isVisible]);\n\n const handleClickOutsideDeactivates = useCallback(\n (evt) => {\n if (triggerRef.current.contains(evt.target)) {\n isOutsideClickOnTrigger.current = true;\n }\n return true;\n },\n [triggerRef, isOutsideClickOnTrigger]\n );\n\n useEffect(() => {\n setVisible(isPopoverVisible);\n }, [isPopoverVisible]);\n\n useEffect(() => {\n let trigger: HTMLElement;\n\n if (externalTriggerRef?.current && !children) {\n trigger = externalTriggerRef.current;\n\n trigger.setAttribute(\"tabindex\", \"0\");\n trigger.addEventListener(\"click\", handleTriggerClick);\n }\n\n return () => {\n if (trigger) {\n trigger.removeEventListener(\"click\", handleTriggerClick);\n }\n };\n }, [externalTriggerRef, children, handleTriggerClick]);\n\n useEffect(() => {\n if (externalTriggerRef?.current && !children) {\n const trigger = externalTriggerRef.current;\n\n if (isVisible) {\n trigger.setAttribute(\"aria-expanded\", true);\n trigger.setAttribute(\"aria-controls\", tooltipId);\n } else {\n trigger.removeAttribute(\"aria-expanded\");\n trigger.removeAttribute(\"aria-controls\");\n }\n }\n }, [externalTriggerRef, children, tooltipId, isVisible]);\n\n const triggerElm = children\n ? React.cloneElement(children, {\n ref: triggerRef,\n ...(isVisible && {\n \"aria-expanded\": true,\n \"aria-controls\": tooltipId,\n }),\n tabIndex: 0,\n onClick: (evt: React.MouseEvent) => {\n handleTriggerClick();\n if (children.props.onClick) {\n children.props.onClick(evt);\n }\n },\n })\n : null;\n\n const contentElm = (\n <FocusTrap\n focusTrapOptions={{\n clickOutsideDeactivates:\n dismissOnOutsideClick && handleClickOutsideDeactivates, // de-active focus trap on outside click\n allowOutsideClick: true,\n escapeDeactivates: true, // de-activate focus trap on escape key\n fallbackFocus: `#${tooltipId}`, // set focus to tooltip content container if it has no focusable element\n onDeactivate: () => {\n toggleVisibility(false);\n },\n preventScroll: true,\n initialFocus: () => !disableInitialFocus,\n returnFocusOnDeactivate: !disableReturnFocusToTrigger,\n }}\n >\n <FocusTrapContent>{content}</FocusTrapContent>\n </FocusTrap>\n );\n\n const tooltipElm = (\n <TooltipContent\n {...restContentProps} // eslint-disable-line react/jsx-props-no-spreading\n defaultVerticalPlacement={defaultVerticalPlacement}\n dataDSId={name}\n content={contentElm}\n contentPadding={contentPadding}\n maxWidth={maxWidth}\n placement={placement}\n portalContainer={portalContainer}\n dataE2eTestId={dataE2eTestId}\n hasInvertedSubTheme={hasInvertedSubTheme}\n isVisible={isVisible}\n tooltipId={tooltipId}\n tabIndex={-1}\n triggerRef={triggerRef}\n />\n );\n return (\n <>\n {triggerElm}\n {tooltipElm}\n </>\n );\n}\n"],"names":["FocusTrapContent","React","forwardRef","_ref","ref","children","createElement","BasePopover","_ref2","placement","content","contentPadding","maxWidth","externalTriggerRef","portalContainer","name","isVisible","isPopoverVisible","dismissOnOutsideClick","dataE2eTestId","hasInvertedSubTheme","defaultVerticalPlacement","onVisibilityChange","disableInitialFocus","disableReturnFocusToTrigger","restContentProps","tooltipId","useMemo","Math","floor","Date","now","random","setVisible","useState","internalTriggerRef","useRef","triggerRef","isOutsideClickOnTrigger","toggleVisibility","useCallback","status","handleTriggerClick","current","handleClickOutsideDeactivates","evt","contains","target","useEffect","trigger","setAttribute","addEventListener","removeEventListener","removeAttribute","triggerElm","cloneElement","tabIndex","onClick","props","contentElm","FocusTrap","focusTrapOptions","clickOutsideDeactivates","allowOutsideClick","escapeDeactivates","fallbackFocus","onDeactivate","preventScroll","initialFocus","returnFocusOnDeactivate","tooltipElm","TooltipContent","_extends","dataDSId","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BasePopover.js","sources":["../../../../../src/components/Toggletip/BasePopover.tsx"],"sourcesContent":["import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n ReactElement,\n PropsWithChildren,\n} from \"react\";\nimport type { TooltipContentProps } from \"../Tooltip/TooltipContent\";\nimport { TooltipContent } from \"../Tooltip/TooltipContent\";\nimport { TooltipConditionalProps } from \"../Tooltip/types\";\nimport { Sheet } from \"../Sheet/Sheet\";\nimport { FocusTrapWrapper } from \"../../shared/FocusTrapWrapper\";\nimport breakpoints from \"../../../build-tokens/_breakpoints.json\";\n\ntype BaseProps = Pick<\n TooltipContentProps,\n | \"placement\"\n | \"portalContainer\"\n | \"maxWidth\"\n | \"contentPadding\"\n | \"hideArrow\"\n | \"hasInvertedSubTheme\"\n | \"defaultVerticalPlacement\"\n> & {\n name?: string;\n // Popover content\n content: ReactElement;\n \"data-e2e-test-id\"?: string;\n // Programmatically toggle Popover visibility with this prop\n isVisible?: boolean;\n /* Called when tooltip appears and disappears */\n onVisibilityChange?: (isVisible: boolean, reason: string) => void;\n /* Controls whether BasePopover closes on outside click */\n dismissOnOutsideClick?: boolean;\n /* Option for focus-trap, controls whether the first focuable item recieves focus */\n disableInitialFocus?: boolean;\n /* Option for focus-trap, controls whether the trigger should receive back the focus on popover close */\n disableReturnFocusToTrigger?: boolean;\n /* Render as sheet on mobile web */\n renderAsSheetOnMobile?: boolean;\n};\n\nexport type BasePopoverProps = BaseProps & TooltipConditionalProps;\n\nconst FocusTrapContent = React.forwardRef<\n HTMLDivElement,\n PropsWithChildren<unknown>\n>(({ children }, ref) => <div ref={ref}>{children}</div>);\n\nconst VisibilityChangeReason = {\n triggerClick: \"triggerClick\",\n outsideClick: \"outsideClick\",\n};\n\nexport function BasePopover({\n placement = \"auto\",\n content,\n children,\n contentPadding = \"m\",\n maxWidth,\n externalTriggerRef,\n portalContainer,\n name = \"Popover\",\n isVisible: isPopoverVisible,\n dismissOnOutsideClick = true,\n \"data-e2e-test-id\": dataE2eTestId,\n hasInvertedSubTheme,\n defaultVerticalPlacement,\n onVisibilityChange,\n disableInitialFocus = false,\n disableReturnFocusToTrigger = false,\n renderAsSheetOnMobile = false,\n ...restContentProps\n}: BasePopoverProps): React.ReactElement {\n const tooltipId = useMemo(\n () => `DS${name}_${Math.floor(Date.now() * Math.random())}`,\n [name]\n );\n const [isVisible, setVisible] = useState(isPopoverVisible);\n const [isMobileBreakPoint, setIsMobileBreakpoint] = useState(false);\n const internalTriggerRef = useRef(null);\n const triggerRef = externalTriggerRef || internalTriggerRef;\n const isOutsideClickOnTrigger = useRef(false);\n const isPrevMobileBreakPointRef = useRef(false);\n\n const toggleVisibility = useCallback(\n (status: boolean, reason: string) => {\n setVisible(status);\n\n if (onVisibilityChange) {\n onVisibilityChange(status, reason);\n }\n },\n [onVisibilityChange]\n );\n\n // Outside click is also fired when the Popover is open and trigger is clicked. `isOutsideClickOnTrigger` saves this condition and we check for it so as to not toggle the Popover twice.\n const handleTriggerClick = useCallback(() => {\n if (!isOutsideClickOnTrigger.current) {\n toggleVisibility(!isVisible, VisibilityChangeReason.triggerClick);\n } else {\n // reset this value so that Popover can open in next click\n isOutsideClickOnTrigger.current = false;\n }\n }, [toggleVisibility, isVisible]);\n\n const handleClickOutsideDeactivates = useCallback(\n (evt) => {\n if (triggerRef.current.contains(evt.target)) {\n isOutsideClickOnTrigger.current = true;\n }\n\n return true;\n },\n [triggerRef, isOutsideClickOnTrigger]\n );\n\n const handleSheetClose = useCallback(() => {\n toggleVisibility(false, \"sheetClose\");\n }, [toggleVisibility]);\n\n useEffect(() => {\n setVisible(isPopoverVisible);\n }, [isPopoverVisible]);\n\n useEffect(() => {\n // Check if this is a mobile breakpoint\n if (renderAsSheetOnMobile) {\n setIsMobileBreakpoint(window.innerWidth <= breakpoints.medium.value);\n }\n }, [isVisible, renderAsSheetOnMobile]);\n\n useEffect(() => {\n isPrevMobileBreakPointRef.current = isMobileBreakPoint;\n }, [isMobileBreakPoint]);\n\n useEffect(() => {\n let trigger: HTMLElement;\n\n if (externalTriggerRef?.current && !children) {\n trigger = externalTriggerRef.current;\n\n trigger.setAttribute(\"tabindex\", \"0\");\n trigger.addEventListener(\"click\", handleTriggerClick);\n }\n\n return () => {\n if (trigger) {\n trigger.removeEventListener(\"click\", handleTriggerClick);\n }\n };\n }, [externalTriggerRef, children, handleTriggerClick]);\n\n useEffect(() => {\n if (externalTriggerRef?.current && !children) {\n const trigger = externalTriggerRef.current;\n\n if (isVisible) {\n trigger.setAttribute(\"aria-expanded\", true);\n trigger.setAttribute(\"aria-controls\", tooltipId);\n } else {\n trigger.removeAttribute(\"aria-expanded\");\n trigger.removeAttribute(\"aria-controls\");\n }\n }\n }, [externalTriggerRef, children, tooltipId, isVisible]);\n\n const triggerElm = children\n ? React.cloneElement(children, {\n ref: triggerRef,\n ...(isVisible && {\n \"aria-expanded\": true,\n \"aria-controls\": tooltipId,\n }),\n tabIndex: 0,\n onClick: (evt: React.MouseEvent) => {\n handleTriggerClick();\n if (children.props.onClick) {\n children.props.onClick(evt);\n }\n },\n })\n : null;\n\n if (isMobileBreakPoint) {\n // render as Sheet\n const sheetElm = (\n <Sheet\n id={tooltipId}\n isVisible={isVisible}\n onClose={handleSheetClose}\n dismissOnOutsideClick={dismissOnOutsideClick}\n disableInitialFocus={disableInitialFocus}\n disableReturnFocusToTrigger={disableReturnFocusToTrigger}\n >\n {content}\n </Sheet>\n );\n\n return (\n <>\n {triggerElm}\n {sheetElm}\n </>\n );\n }\n\n // render as Popover\n const contentElm = (\n <FocusTrapWrapper\n focusTrapOptions={{\n clickOutsideDeactivates:\n dismissOnOutsideClick && handleClickOutsideDeactivates, // de-active focus trap on outside click\n allowOutsideClick: true,\n escapeDeactivates: true, // de-activate focus trap on escape key\n fallbackFocus: `#${tooltipId}`, // set focus to tooltip content container if it has no focusable element\n onPostDeactivate: () => {\n const reason = isOutsideClickOnTrigger.current\n ? VisibilityChangeReason.triggerClick\n : VisibilityChangeReason.outsideClick;\n\n toggleVisibility(false, reason);\n },\n preventScroll: true,\n initialFocus: () => !disableInitialFocus,\n returnFocusOnDeactivate: !disableReturnFocusToTrigger,\n }}\n >\n <FocusTrapContent>{content}</FocusTrapContent>\n </FocusTrapWrapper>\n );\n\n const tooltipElm = (\n <TooltipContent\n {...restContentProps} // eslint-disable-line react/jsx-props-no-spreading\n defaultVerticalPlacement={defaultVerticalPlacement}\n dataDSId={name}\n content={contentElm}\n contentPadding={contentPadding}\n maxWidth={maxWidth}\n placement={placement}\n portalContainer={portalContainer}\n dataE2eTestId={dataE2eTestId}\n hasInvertedSubTheme={hasInvertedSubTheme}\n isVisible={isVisible}\n tooltipId={tooltipId}\n tabIndex={-1}\n triggerRef={triggerRef}\n />\n );\n\n return (\n <>\n {triggerElm}\n {tooltipElm}\n </>\n );\n}\n"],"names":["FocusTrapContent","React","forwardRef","_ref","ref","children","createElement","VisibilityChangeReason","triggerClick","outsideClick","BasePopover","_ref2","placement","content","contentPadding","maxWidth","externalTriggerRef","portalContainer","name","isVisible","isPopoverVisible","dismissOnOutsideClick","dataE2eTestId","hasInvertedSubTheme","defaultVerticalPlacement","onVisibilityChange","disableInitialFocus","disableReturnFocusToTrigger","renderAsSheetOnMobile","restContentProps","tooltipId","useMemo","Math","floor","Date","now","random","setVisible","useState","isMobileBreakPoint","setIsMobileBreakpoint","internalTriggerRef","useRef","triggerRef","isOutsideClickOnTrigger","isPrevMobileBreakPointRef","toggleVisibility","useCallback","status","reason","handleTriggerClick","current","handleClickOutsideDeactivates","evt","contains","target","handleSheetClose","useEffect","window","innerWidth","breakpoints","medium","value","trigger","setAttribute","addEventListener","removeEventListener","removeAttribute","triggerElm","cloneElement","tabIndex","onClick","props","sheetElm","Sheet","id","onClose","Fragment","contentElm","FocusTrapWrapper","focusTrapOptions","clickOutsideDeactivates","allowOutsideClick","escapeDeactivates","fallbackFocus","onPostDeactivate","preventScroll","initialFocus","returnFocusOnDeactivate","tooltipElm","TooltipContent","_extends","dataDSId"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { BasePopoverProps } from "./BasePopover";
|
|
3
3
|
import { TooltipConditionalProps } from "../Tooltip/types";
|
|
4
|
-
export type ToggletipProps = Omit<BasePopoverProps, "name" | "defaultVerticalPlacement"> & TooltipConditionalProps;
|
|
4
|
+
export type ToggletipProps = Omit<BasePopoverProps, "name" | "defaultVerticalPlacement" | "hideArrow" | "hasInvertedSubTheme" | "renderAsSheetOnMobile"> & TooltipConditionalProps;
|
|
5
5
|
export declare function Toggletip(props: ToggletipProps): React.ReactElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toggletip.js","sources":["../../../../../src/components/Toggletip/Toggletip.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { BasePopover, BasePopoverProps } from \"./BasePopover\";\nimport { TooltipConditionalProps } from \"../Tooltip/types\";\n\nexport type ToggletipProps = Omit<\n BasePopoverProps,\n \"name\"
|
|
1
|
+
{"version":3,"file":"Toggletip.js","sources":["../../../../../src/components/Toggletip/Toggletip.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { BasePopover, BasePopoverProps } from \"./BasePopover\";\nimport { TooltipConditionalProps } from \"../Tooltip/types\";\n\nexport type ToggletipProps = Omit<\n BasePopoverProps,\n | \"name\"\n | \"defaultVerticalPlacement\"\n | \"hideArrow\"\n | \"hasInvertedSubTheme\"\n | \"renderAsSheetOnMobile\"\n> &\n TooltipConditionalProps;\n\nexport function Toggletip(props: ToggletipProps): React.ReactElement {\n return (\n <BasePopover\n name=\"Toggletip\"\n {...props} // eslint-disable-line react/jsx-props-no-spreading\n />\n );\n}\n"],"names":["Toggletip","props","React","createElement","BasePopover","_extends","name"],"mappings":";;;;AAeO,SAASA,SAASA,CAACC,KAAqB,EAAsB;AACnE,EAAA,oBACEC,KAAA,CAAAC,aAAA,CAACC,WAAW,EAAAC,QAAA,CAAA;AACVC,IAAAA,IAAI,EAAC,WAAA;GACDL,EAAAA,KAAK,CACV,CAAC,CAAA;AAEN;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTooltip.js","sources":["../../../../../src/components/Tooltip/BaseTooltip.tsx"],"sourcesContent":["import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from \"react\";\nimport type { TooltipContentProps } from \"./TooltipContent\";\nimport { TooltipContent } from \"./TooltipContent\";\nimport { TooltipConditionalProps } from \"./types\";\n\ntype BaseProps = Pick<\n TooltipContentProps,\n \"placement\" | \"portalContainer\" | \"contentPadding\" | \"maxWidth\"\n> & {\n /* Tooltip content */\n content: React.ReactElement;\n \"data-e2e-test-id\"?: string;\n /* Called when tooltip appears and disappears */\n onVisibilityChange?: (isVisible: boolean) => void;\n};\n\nexport type BaseTooltipProps = BaseProps & TooltipConditionalProps;\n\nconst SHOW_HIDE_DELAY = 200;\n\nexport function BaseTooltip({\n placement = \"auto\",\n content,\n children,\n externalTriggerRef,\n portalContainer,\n contentPadding = \"m\",\n maxWidth,\n \"data-e2e-test-id\": dataE2eTestId,\n onVisibilityChange,\n}: BaseTooltipProps): React.ReactElement {\n const tooltipId = useMemo(\n () => `DSTooltip_${Math.floor(Date.now() * Math.random())}`,\n []\n );\n const [isVisible, setVisible] = useState(false);\n const triggeredByEvent = useRef(null); // indicates if triggered by hover or focus\n const isTooltipHovered = useRef(false);\n const isTriggerHovered = useRef(false);\n const hideTooltipTimeoutId = useRef(null);\n const showTooltipTimeoutId = useRef(null);\n const internalTriggerRef = useRef(null);\n const triggerRef = externalTriggerRef || internalTriggerRef;\n\n const toggleVisibility = useCallback(\n (status: boolean) => {\n setVisible(status);\n\n if (onVisibilityChange) {\n onVisibilityChange(status);\n }\n },\n [onVisibilityChange]\n );\n\n const handleTriggerPointerEnter = useCallback(() => {\n isTriggerHovered.current = true;\n if (!isTooltipHovered.current) {\n clearTimeout(showTooltipTimeoutId.current);\n // Delay show tooltip to prevent flickering when mouse moves quickly over trigger\n showTooltipTimeoutId.current = setTimeout(() => {\n if (isTriggerHovered.current) {\n triggeredByEvent.current = \"hover\";\n toggleVisibility(true);\n }\n }, SHOW_HIDE_DELAY);\n }\n }, [toggleVisibility]);\n\n const handleTriggerPointerLeave = useCallback(() => {\n isTriggerHovered.current = false;\n clearTimeout(hideTooltipTimeoutId.current);\n // Delay removing tooltip from DOM to allow hover over tooltip element\n hideTooltipTimeoutId.current = setTimeout(() => {\n if (\n !isTooltipHovered.current &&\n triggeredByEvent.current === \"hover\" &&\n !isTriggerHovered.current\n ) {\n toggleVisibility(false);\n }\n }, SHOW_HIDE_DELAY);\n }, [toggleVisibility]);\n\n const handleTriggerFocus = useCallback(() => {\n triggeredByEvent.current = \"focus\";\n toggleVisibility(true);\n }, [toggleVisibility]);\n\n const handleTriggerBlur = useCallback(() => {\n if (triggeredByEvent.current === \"focus\") {\n toggleVisibility(false);\n }\n }, [toggleVisibility]);\n\n const handleTriggerKeyDown = useCallback(\n (evt) => {\n if (evt.key === \"Escape\") {\n toggleVisibility(false);\n }\n },\n [toggleVisibility]\n );\n\n const handleTooltipPointerEnter = () => {\n isTooltipHovered.current = true;\n };\n\n const handleTooltipPointerLeave = () => {\n isTooltipHovered.current = false;\n if (triggeredByEvent.current === \"hover\") {\n toggleVisibility(false);\n }\n };\n\n useEffect(\n () => () => {\n // clear timers\n clearTimeout(showTooltipTimeoutId.current);\n clearTimeout(hideTooltipTimeoutId.current);\n },\n []\n );\n\n useEffect(() => {\n let trigger: HTMLElement;\n\n if (externalTriggerRef?.current && !children) {\n trigger = externalTriggerRef.current;\n\n trigger.setAttribute(\"tabindex\", \"0\");\n trigger.addEventListener(\"pointerenter\", handleTriggerPointerEnter);\n trigger.addEventListener(\"pointerleave\", handleTriggerPointerLeave);\n trigger.addEventListener(\"focus\", handleTriggerFocus);\n trigger.addEventListener(\"blur\", handleTriggerBlur);\n trigger.addEventListener(\"keydown\", handleTriggerKeyDown);\n }\n\n return () => {\n if (trigger) {\n trigger.removeEventListener(\"pointerenter\", handleTriggerPointerEnter);\n trigger.removeEventListener(\"pointerleave\", handleTriggerPointerLeave);\n trigger.removeEventListener(\"focus\", handleTriggerFocus);\n trigger.removeEventListener(\"blur\", handleTriggerBlur);\n trigger.removeEventListener(\"keydown\", handleTriggerKeyDown);\n }\n };\n }, [\n externalTriggerRef,\n children,\n handleTriggerPointerEnter,\n handleTriggerPointerLeave,\n handleTriggerFocus,\n handleTriggerBlur,\n handleTriggerKeyDown,\n ]);\n\n useEffect(() => {\n if (externalTriggerRef?.current && !children) {\n const trigger = externalTriggerRef.current;\n\n if (isVisible) {\n trigger.setAttribute(\"aria-describedby\", tooltipId);\n } else {\n trigger.removeAttribute(\"aria-describedby\");\n }\n }\n }, [externalTriggerRef, children, tooltipId, isVisible]);\n\n const triggerElm = children\n ? React.cloneElement(children, {\n ref: triggerRef,\n ...(isVisible && {\n \"aria-describedby\": tooltipId,\n }),\n tabIndex: 0,\n onPointerEnter: handleTriggerPointerEnter,\n onPointerLeave: handleTriggerPointerLeave,\n onFocus: (evt: FocusEvent) => {\n handleTriggerFocus();\n if (children.props.onFocus) {\n children.props.onFocus(evt);\n }\n },\n onBlur: (evt: FocusEvent) => {\n handleTriggerBlur();\n if (children.props.onBlur) {\n if (children.props.onBlur) {\n children.props.onBlur(evt);\n }\n }\n },\n onKeyDown: handleTriggerKeyDown,\n })\n : null;\n\n const tooltipElm = (\n <TooltipContent\n dataDSId=\"Tooltip\"\n content={content}\n placement={placement}\n portalContainer={portalContainer}\n dataE2eTestId={dataE2eTestId}\n isVisible={isVisible}\n tooltipId={tooltipId}\n triggerRef={triggerRef}\n aria-hidden\n role=\"tooltip\"\n contentPadding={contentPadding}\n maxWidth={maxWidth}\n onTooltipPointerEnter={handleTooltipPointerEnter}\n onTooltipPointerLeave={handleTooltipPointerLeave}\n />\n );\n return (\n <>\n {triggerElm}\n {tooltipElm}\n </>\n );\n}\n"],"names":["SHOW_HIDE_DELAY","BaseTooltip","_ref","placement","content","children","externalTriggerRef","portalContainer","contentPadding","maxWidth","dataE2eTestId","onVisibilityChange","tooltipId","useMemo","Math","floor","Date","now","random","isVisible","setVisible","useState","triggeredByEvent","useRef","isTooltipHovered","isTriggerHovered","hideTooltipTimeoutId","showTooltipTimeoutId","internalTriggerRef","triggerRef","toggleVisibility","useCallback","status","handleTriggerPointerEnter","current","clearTimeout","setTimeout","handleTriggerPointerLeave","handleTriggerFocus","handleTriggerBlur","handleTriggerKeyDown","evt","key","handleTooltipPointerEnter","handleTooltipPointerLeave","useEffect","trigger","setAttribute","addEventListener","removeEventListener","removeAttribute","triggerElm","React","cloneElement","ref","tabIndex","onPointerEnter","onPointerLeave","onFocus","props","onBlur","onKeyDown","tooltipElm","createElement","TooltipContent","dataDSId","role","onTooltipPointerEnter","onTooltipPointerLeave","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BaseTooltip.js","sources":["../../../../../src/components/Tooltip/BaseTooltip.tsx"],"sourcesContent":["import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from \"react\";\nimport type { TooltipContentProps } from \"./TooltipContent\";\nimport { TooltipContent } from \"./TooltipContent\";\nimport { TooltipConditionalProps } from \"./types\";\n\ntype BaseProps = Pick<\n TooltipContentProps,\n \"placement\" | \"portalContainer\" | \"contentPadding\" | \"maxWidth\"\n> & {\n /* Tooltip content */\n content: React.ReactElement;\n \"data-e2e-test-id\"?: string;\n /* Called when tooltip appears and disappears */\n onVisibilityChange?: (isVisible: boolean) => void;\n};\n\nexport type BaseTooltipProps = BaseProps & TooltipConditionalProps;\n\nconst SHOW_HIDE_DELAY = 200;\n\nexport function BaseTooltip({\n placement = \"auto\",\n content,\n children,\n externalTriggerRef,\n portalContainer,\n contentPadding,\n maxWidth,\n \"data-e2e-test-id\": dataE2eTestId,\n onVisibilityChange,\n}: BaseTooltipProps): React.ReactElement {\n const tooltipId = useMemo(\n () => `DSTooltip_${Math.floor(Date.now() * Math.random())}`,\n []\n );\n const [isVisible, setVisible] = useState(false);\n const triggeredByEvent = useRef(null); // indicates if triggered by hover or focus\n const isTooltipHovered = useRef(false);\n const isTriggerHovered = useRef(false);\n const hideTooltipTimeoutId = useRef(null);\n const showTooltipTimeoutId = useRef(null);\n const internalTriggerRef = useRef(null);\n const triggerRef = externalTriggerRef || internalTriggerRef;\n\n const toggleVisibility = useCallback(\n (status: boolean) => {\n setVisible(status);\n\n if (onVisibilityChange) {\n onVisibilityChange(status);\n }\n },\n [onVisibilityChange]\n );\n\n const handleTriggerPointerEnter = useCallback(() => {\n isTriggerHovered.current = true;\n if (!isTooltipHovered.current) {\n clearTimeout(showTooltipTimeoutId.current);\n // Delay show tooltip to prevent flickering when mouse moves quickly over trigger\n showTooltipTimeoutId.current = setTimeout(() => {\n if (isTriggerHovered.current) {\n triggeredByEvent.current = \"hover\";\n toggleVisibility(true);\n }\n }, SHOW_HIDE_DELAY);\n }\n }, [toggleVisibility]);\n\n const handleTriggerPointerLeave = useCallback(() => {\n isTriggerHovered.current = false;\n clearTimeout(hideTooltipTimeoutId.current);\n // Delay removing tooltip from DOM to allow hover over tooltip element\n hideTooltipTimeoutId.current = setTimeout(() => {\n if (\n !isTooltipHovered.current &&\n triggeredByEvent.current === \"hover\" &&\n !isTriggerHovered.current\n ) {\n toggleVisibility(false);\n }\n }, SHOW_HIDE_DELAY);\n }, [toggleVisibility]);\n\n const handleTriggerFocus = useCallback(() => {\n triggeredByEvent.current = \"focus\";\n toggleVisibility(true);\n }, [toggleVisibility]);\n\n const handleTriggerBlur = useCallback(() => {\n if (triggeredByEvent.current === \"focus\") {\n toggleVisibility(false);\n }\n }, [toggleVisibility]);\n\n const handleTriggerKeyDown = useCallback(\n (evt) => {\n if (evt.key === \"Escape\") {\n toggleVisibility(false);\n }\n },\n [toggleVisibility]\n );\n\n const handleTooltipPointerEnter = () => {\n isTooltipHovered.current = true;\n };\n\n const handleTooltipPointerLeave = () => {\n isTooltipHovered.current = false;\n if (triggeredByEvent.current === \"hover\") {\n toggleVisibility(false);\n }\n };\n\n useEffect(\n () => () => {\n // clear timers\n clearTimeout(showTooltipTimeoutId.current);\n clearTimeout(hideTooltipTimeoutId.current);\n },\n []\n );\n\n useEffect(() => {\n let trigger: HTMLElement;\n\n if (externalTriggerRef?.current && !children) {\n trigger = externalTriggerRef.current;\n\n trigger.setAttribute(\"tabindex\", \"0\");\n trigger.addEventListener(\"pointerenter\", handleTriggerPointerEnter);\n trigger.addEventListener(\"pointerleave\", handleTriggerPointerLeave);\n trigger.addEventListener(\"focus\", handleTriggerFocus);\n trigger.addEventListener(\"blur\", handleTriggerBlur);\n trigger.addEventListener(\"keydown\", handleTriggerKeyDown);\n }\n\n return () => {\n if (trigger) {\n trigger.removeEventListener(\"pointerenter\", handleTriggerPointerEnter);\n trigger.removeEventListener(\"pointerleave\", handleTriggerPointerLeave);\n trigger.removeEventListener(\"focus\", handleTriggerFocus);\n trigger.removeEventListener(\"blur\", handleTriggerBlur);\n trigger.removeEventListener(\"keydown\", handleTriggerKeyDown);\n }\n };\n }, [\n externalTriggerRef,\n children,\n handleTriggerPointerEnter,\n handleTriggerPointerLeave,\n handleTriggerFocus,\n handleTriggerBlur,\n handleTriggerKeyDown,\n ]);\n\n useEffect(() => {\n if (externalTriggerRef?.current && !children) {\n const trigger = externalTriggerRef.current;\n\n if (isVisible) {\n trigger.setAttribute(\"aria-describedby\", tooltipId);\n } else {\n trigger.removeAttribute(\"aria-describedby\");\n }\n }\n }, [externalTriggerRef, children, tooltipId, isVisible]);\n\n const triggerElm = children\n ? React.cloneElement(children, {\n ref: triggerRef,\n ...(isVisible && {\n \"aria-describedby\": tooltipId,\n }),\n tabIndex: 0,\n onPointerEnter: handleTriggerPointerEnter,\n onPointerLeave: handleTriggerPointerLeave,\n onFocus: (evt: FocusEvent) => {\n handleTriggerFocus();\n if (children.props.onFocus) {\n children.props.onFocus(evt);\n }\n },\n onBlur: (evt: FocusEvent) => {\n handleTriggerBlur();\n if (children.props.onBlur) {\n if (children.props.onBlur) {\n children.props.onBlur(evt);\n }\n }\n },\n onKeyDown: handleTriggerKeyDown,\n })\n : null;\n\n const tooltipElm = (\n <TooltipContent\n dataDSId=\"Tooltip\"\n content={content}\n placement={placement}\n portalContainer={portalContainer}\n dataE2eTestId={dataE2eTestId}\n isVisible={isVisible}\n tooltipId={tooltipId}\n triggerRef={triggerRef}\n aria-hidden\n role=\"tooltip\"\n contentPadding={contentPadding}\n maxWidth={maxWidth}\n onTooltipPointerEnter={handleTooltipPointerEnter}\n onTooltipPointerLeave={handleTooltipPointerLeave}\n />\n );\n return (\n <>\n {triggerElm}\n {tooltipElm}\n </>\n );\n}\n"],"names":["SHOW_HIDE_DELAY","BaseTooltip","_ref","placement","content","children","externalTriggerRef","portalContainer","contentPadding","maxWidth","dataE2eTestId","onVisibilityChange","tooltipId","useMemo","Math","floor","Date","now","random","isVisible","setVisible","useState","triggeredByEvent","useRef","isTooltipHovered","isTriggerHovered","hideTooltipTimeoutId","showTooltipTimeoutId","internalTriggerRef","triggerRef","toggleVisibility","useCallback","status","handleTriggerPointerEnter","current","clearTimeout","setTimeout","handleTriggerPointerLeave","handleTriggerFocus","handleTriggerBlur","handleTriggerKeyDown","evt","key","handleTooltipPointerEnter","handleTooltipPointerLeave","useEffect","trigger","setAttribute","addEventListener","removeEventListener","removeAttribute","triggerElm","React","cloneElement","ref","tabIndex","onPointerEnter","onPointerLeave","onFocus","props","onBlur","onKeyDown","tooltipElm","createElement","TooltipContent","dataDSId","role","onTooltipPointerEnter","onTooltipPointerLeave","Fragment"],"mappings":";;;AAwBA,MAAMA,eAAe,GAAG,GAAG,CAAA;AAEpB,SAASC,WAAWA,CAAAC,IAAA,EAUc;EAAA,IAVb;AAC1BC,IAAAA,SAAS,GAAG,MAAM;IAClBC,OAAO;IACPC,QAAQ;IACRC,kBAAkB;IAClBC,eAAe;IACfC,cAAc;IACdC,QAAQ;AACR,IAAA,kBAAkB,EAAEC,aAAa;AACjCC,IAAAA,kBAAAA;AACgB,GAAC,GAAAT,IAAA,CAAA;EACjB,MAAMU,SAAS,GAAGC,OAAO,CACvB,MAAO,aAAYC,IAAI,CAACC,KAAK,CAACC,IAAI,CAACC,GAAG,EAAE,GAAGH,IAAI,CAACI,MAAM,EAAE,CAAE,CAAA,CAAC,EAC3D,EACF,CAAC,CAAA;EACD,MAAM,CAACC,SAAS,EAAEC,UAAU,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/C,EAAA,MAAMC,gBAAgB,GAAGC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtC,EAAA,MAAMC,gBAAgB,GAAGD,MAAM,CAAC,KAAK,CAAC,CAAA;AACtC,EAAA,MAAME,gBAAgB,GAAGF,MAAM,CAAC,KAAK,CAAC,CAAA;AACtC,EAAA,MAAMG,oBAAoB,GAAGH,MAAM,CAAC,IAAI,CAAC,CAAA;AACzC,EAAA,MAAMI,oBAAoB,GAAGJ,MAAM,CAAC,IAAI,CAAC,CAAA;AACzC,EAAA,MAAMK,kBAAkB,GAAGL,MAAM,CAAC,IAAI,CAAC,CAAA;AACvC,EAAA,MAAMM,UAAU,GAAGvB,kBAAkB,IAAIsB,kBAAkB,CAAA;AAE3D,EAAA,MAAME,gBAAgB,GAAGC,WAAW,CACjCC,MAAe,IAAK;IACnBZ,UAAU,CAACY,MAAM,CAAC,CAAA;AAElB,IAAA,IAAIrB,kBAAkB,EAAE;MACtBA,kBAAkB,CAACqB,MAAM,CAAC,CAAA;AAC5B,KAAA;AACF,GAAC,EACD,CAACrB,kBAAkB,CACrB,CAAC,CAAA;AAED,EAAA,MAAMsB,yBAAyB,GAAGF,WAAW,CAAC,MAAM;IAClDN,gBAAgB,CAACS,OAAO,GAAG,IAAI,CAAA;AAC/B,IAAA,IAAI,CAACV,gBAAgB,CAACU,OAAO,EAAE;AAC7BC,MAAAA,YAAY,CAACR,oBAAoB,CAACO,OAAO,CAAC,CAAA;AAC1C;AACAP,MAAAA,oBAAoB,CAACO,OAAO,GAAGE,UAAU,CAAC,MAAM;QAC9C,IAAIX,gBAAgB,CAACS,OAAO,EAAE;UAC5BZ,gBAAgB,CAACY,OAAO,GAAG,OAAO,CAAA;UAClCJ,gBAAgB,CAAC,IAAI,CAAC,CAAA;AACxB,SAAA;OACD,EAAE9B,eAAe,CAAC,CAAA;AACrB,KAAA;AACF,GAAC,EAAE,CAAC8B,gBAAgB,CAAC,CAAC,CAAA;AAEtB,EAAA,MAAMO,yBAAyB,GAAGN,WAAW,CAAC,MAAM;IAClDN,gBAAgB,CAACS,OAAO,GAAG,KAAK,CAAA;AAChCC,IAAAA,YAAY,CAACT,oBAAoB,CAACQ,OAAO,CAAC,CAAA;AAC1C;AACAR,IAAAA,oBAAoB,CAACQ,OAAO,GAAGE,UAAU,CAAC,MAAM;AAC9C,MAAA,IACE,CAACZ,gBAAgB,CAACU,OAAO,IACzBZ,gBAAgB,CAACY,OAAO,KAAK,OAAO,IACpC,CAACT,gBAAgB,CAACS,OAAO,EACzB;QACAJ,gBAAgB,CAAC,KAAK,CAAC,CAAA;AACzB,OAAA;KACD,EAAE9B,eAAe,CAAC,CAAA;AACrB,GAAC,EAAE,CAAC8B,gBAAgB,CAAC,CAAC,CAAA;AAEtB,EAAA,MAAMQ,kBAAkB,GAAGP,WAAW,CAAC,MAAM;IAC3CT,gBAAgB,CAACY,OAAO,GAAG,OAAO,CAAA;IAClCJ,gBAAgB,CAAC,IAAI,CAAC,CAAA;AACxB,GAAC,EAAE,CAACA,gBAAgB,CAAC,CAAC,CAAA;AAEtB,EAAA,MAAMS,iBAAiB,GAAGR,WAAW,CAAC,MAAM;AAC1C,IAAA,IAAIT,gBAAgB,CAACY,OAAO,KAAK,OAAO,EAAE;MACxCJ,gBAAgB,CAAC,KAAK,CAAC,CAAA;AACzB,KAAA;AACF,GAAC,EAAE,CAACA,gBAAgB,CAAC,CAAC,CAAA;AAEtB,EAAA,MAAMU,oBAAoB,GAAGT,WAAW,CACrCU,GAAG,IAAK;AACP,IAAA,IAAIA,GAAG,CAACC,GAAG,KAAK,QAAQ,EAAE;MACxBZ,gBAAgB,CAAC,KAAK,CAAC,CAAA;AACzB,KAAA;AACF,GAAC,EACD,CAACA,gBAAgB,CACnB,CAAC,CAAA;EAED,MAAMa,yBAAyB,GAAGA,MAAM;IACtCnB,gBAAgB,CAACU,OAAO,GAAG,IAAI,CAAA;GAChC,CAAA;EAED,MAAMU,yBAAyB,GAAGA,MAAM;IACtCpB,gBAAgB,CAACU,OAAO,GAAG,KAAK,CAAA;AAChC,IAAA,IAAIZ,gBAAgB,CAACY,OAAO,KAAK,OAAO,EAAE;MACxCJ,gBAAgB,CAAC,KAAK,CAAC,CAAA;AACzB,KAAA;GACD,CAAA;EAEDe,SAAS,CACP,MAAM,MAAM;AACV;AACAV,IAAAA,YAAY,CAACR,oBAAoB,CAACO,OAAO,CAAC,CAAA;AAC1CC,IAAAA,YAAY,CAACT,oBAAoB,CAACQ,OAAO,CAAC,CAAA;GAC3C,EACD,EACF,CAAC,CAAA;AAEDW,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIC,OAAoB,CAAA;AAExB,IAAA,IAAIxC,kBAAkB,EAAE4B,OAAO,IAAI,CAAC7B,QAAQ,EAAE;MAC5CyC,OAAO,GAAGxC,kBAAkB,CAAC4B,OAAO,CAAA;AAEpCY,MAAAA,OAAO,CAACC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;AACrCD,MAAAA,OAAO,CAACE,gBAAgB,CAAC,cAAc,EAAEf,yBAAyB,CAAC,CAAA;AACnEa,MAAAA,OAAO,CAACE,gBAAgB,CAAC,cAAc,EAAEX,yBAAyB,CAAC,CAAA;AACnES,MAAAA,OAAO,CAACE,gBAAgB,CAAC,OAAO,EAAEV,kBAAkB,CAAC,CAAA;AACrDQ,MAAAA,OAAO,CAACE,gBAAgB,CAAC,MAAM,EAAET,iBAAiB,CAAC,CAAA;AACnDO,MAAAA,OAAO,CAACE,gBAAgB,CAAC,SAAS,EAAER,oBAAoB,CAAC,CAAA;AAC3D,KAAA;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAIM,OAAO,EAAE;AACXA,QAAAA,OAAO,CAACG,mBAAmB,CAAC,cAAc,EAAEhB,yBAAyB,CAAC,CAAA;AACtEa,QAAAA,OAAO,CAACG,mBAAmB,CAAC,cAAc,EAAEZ,yBAAyB,CAAC,CAAA;AACtES,QAAAA,OAAO,CAACG,mBAAmB,CAAC,OAAO,EAAEX,kBAAkB,CAAC,CAAA;AACxDQ,QAAAA,OAAO,CAACG,mBAAmB,CAAC,MAAM,EAAEV,iBAAiB,CAAC,CAAA;AACtDO,QAAAA,OAAO,CAACG,mBAAmB,CAAC,SAAS,EAAET,oBAAoB,CAAC,CAAA;AAC9D,OAAA;KACD,CAAA;AACH,GAAC,EAAE,CACDlC,kBAAkB,EAClBD,QAAQ,EACR4B,yBAAyB,EACzBI,yBAAyB,EACzBC,kBAAkB,EAClBC,iBAAiB,EACjBC,oBAAoB,CACrB,CAAC,CAAA;AAEFK,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIvC,kBAAkB,EAAE4B,OAAO,IAAI,CAAC7B,QAAQ,EAAE;AAC5C,MAAA,MAAMyC,OAAO,GAAGxC,kBAAkB,CAAC4B,OAAO,CAAA;AAE1C,MAAA,IAAIf,SAAS,EAAE;AACb2B,QAAAA,OAAO,CAACC,YAAY,CAAC,kBAAkB,EAAEnC,SAAS,CAAC,CAAA;AACrD,OAAC,MAAM;AACLkC,QAAAA,OAAO,CAACI,eAAe,CAAC,kBAAkB,CAAC,CAAA;AAC7C,OAAA;AACF,KAAA;GACD,EAAE,CAAC5C,kBAAkB,EAAED,QAAQ,EAAEO,SAAS,EAAEO,SAAS,CAAC,CAAC,CAAA;EAExD,MAAMgC,UAAU,GAAG9C,QAAQ,gBACvB+C,KAAK,CAACC,YAAY,CAAChD,QAAQ,EAAE;AAC3BiD,IAAAA,GAAG,EAAEzB,UAAU;AACf,IAAA,IAAIV,SAAS,IAAI;AACf,MAAA,kBAAkB,EAAEP,SAAAA;AACtB,KAAC,CAAC;AACF2C,IAAAA,QAAQ,EAAE,CAAC;AACXC,IAAAA,cAAc,EAAEvB,yBAAyB;AACzCwB,IAAAA,cAAc,EAAEpB,yBAAyB;IACzCqB,OAAO,EAAGjB,GAAe,IAAK;AAC5BH,MAAAA,kBAAkB,EAAE,CAAA;AACpB,MAAA,IAAIjC,QAAQ,CAACsD,KAAK,CAACD,OAAO,EAAE;AAC1BrD,QAAAA,QAAQ,CAACsD,KAAK,CAACD,OAAO,CAACjB,GAAG,CAAC,CAAA;AAC7B,OAAA;KACD;IACDmB,MAAM,EAAGnB,GAAe,IAAK;AAC3BF,MAAAA,iBAAiB,EAAE,CAAA;AACnB,MAAA,IAAIlC,QAAQ,CAACsD,KAAK,CAACC,MAAM,EAAE;AACzB,QAAA,IAAIvD,QAAQ,CAACsD,KAAK,CAACC,MAAM,EAAE;AACzBvD,UAAAA,QAAQ,CAACsD,KAAK,CAACC,MAAM,CAACnB,GAAG,CAAC,CAAA;AAC5B,SAAA;AACF,OAAA;KACD;AACDoB,IAAAA,SAAS,EAAErB,oBAAAA;GACZ,CAAC,GACF,IAAI,CAAA;AAER,EAAA,MAAMsB,UAAU,gBACdV,KAAA,CAAAW,aAAA,CAACC,cAAc,EAAA;AACbC,IAAAA,QAAQ,EAAC,SAAS;AAClB7D,IAAAA,OAAO,EAAEA,OAAQ;AACjBD,IAAAA,SAAS,EAAEA,SAAU;AACrBI,IAAAA,eAAe,EAAEA,eAAgB;AACjCG,IAAAA,aAAa,EAAEA,aAAc;AAC7BS,IAAAA,SAAS,EAAEA,SAAU;AACrBP,IAAAA,SAAS,EAAEA,SAAU;AACrBiB,IAAAA,UAAU,EAAEA,UAAW;IACvB,aAAW,EAAA,IAAA;AACXqC,IAAAA,IAAI,EAAC,SAAS;AACd1D,IAAAA,cAAc,EAAEA,cAAe;AAC/BC,IAAAA,QAAQ,EAAEA,QAAS;AACnB0D,IAAAA,qBAAqB,EAAExB,yBAA0B;AACjDyB,IAAAA,qBAAqB,EAAExB,yBAAAA;AAA0B,GAClD,CACF,CAAA;EACD,oBACEQ,KAAA,CAAAW,aAAA,CAAAX,KAAA,CAAAiB,QAAA,EACGlB,IAAAA,EAAAA,UAAU,EACVW,UACD,CAAC,CAAA;AAEP;;;;"}
|
|
@@ -6,8 +6,7 @@ import { useDocument } from '../../shared/useDocument.js';
|
|
|
6
6
|
import { useWindow } from '../../shared/useWindow.js';
|
|
7
7
|
import { SubThemeProvider } from '../SubThemeProvider/SubThemeProvider.js';
|
|
8
8
|
import zIndices from '../../../build-tokens/_zindex.json.js';
|
|
9
|
-
import { ARROW_SIZE, ARROW_SIZE_BIG, getTooltipStyle, ANIMATION_DISTANCE, getArrowOffset } from './utils.js';
|
|
10
|
-
import { Container } from '../Container/Container.js';
|
|
9
|
+
import { ARROW_SIZE, ARROW_SIZE_BIG, getTooltipStyle, ANIMATION_DISTANCE, getArrowOffset, DISTANCE_FROM_TRIGGER } from './utils.js';
|
|
11
10
|
|
|
12
11
|
const ANIMATION_DURATION = 200;
|
|
13
12
|
const SHOW_HIDE_DELAY = 200;
|
|
@@ -41,9 +40,7 @@ const StyledContainer = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "pr
|
|
|
41
40
|
padding: `${theme.variables.size.spacing.xs} ${theme.variables.size.spacing.s}`,
|
|
42
41
|
...(contentPadding && {
|
|
43
42
|
padding: contentPaddingMap[contentPadding]
|
|
44
|
-
})
|
|
45
|
-
borderRadius: theme.variables.size.borderRadius.xs,
|
|
46
|
-
backgroundColor: theme.values.color.background.primary.default
|
|
43
|
+
})
|
|
47
44
|
};
|
|
48
45
|
return {
|
|
49
46
|
position: "absolute",
|
|
@@ -51,14 +48,21 @@ const StyledContainer = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "pr
|
|
|
51
48
|
opacity: 0,
|
|
52
49
|
animation: `${ANIMATION_DURATION}ms ease-out forwards ${animation}`,
|
|
53
50
|
maxWidth,
|
|
54
|
-
width: "
|
|
51
|
+
width: "max-content",
|
|
55
52
|
boxSizing: "border-box",
|
|
53
|
+
backgroundColor: hasInvertedSubTheme ? theme.values.color.background.primary.default : theme.values.color.background.elevated.default,
|
|
54
|
+
borderRadius: hasInvertedSubTheme ? theme.variables.size.borderRadius.xs : theme.variables.size.borderRadius.s,
|
|
56
55
|
...(hasInvertedSubTheme && invertedSubThemeStyles),
|
|
57
56
|
...(horizontalPlacement === "center" && {
|
|
58
57
|
transform: "translate(-50%)"
|
|
58
|
+
}),
|
|
59
|
+
...(!hasInvertedSubTheme && {
|
|
60
|
+
boxShadow: theme.values.elevation.c
|
|
59
61
|
})
|
|
60
62
|
};
|
|
61
|
-
}, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRvb2x0aXBDb250ZW50LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2RXdCIiwiZmlsZSI6IlRvb2x0aXBDb250ZW50LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBNdXRhYmxlUmVmT2JqZWN0LFxuICBSZWFjdEVsZW1lbnQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgdXNlRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZURvY3VtZW50XCI7XG5pbXBvcnQgeyB1c2VXaW5kb3cgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZVdpbmRvd1wiO1xuaW1wb3J0IHsgU3ViVGhlbWVQcm92aWRlciB9IGZyb20gXCIuLi9TdWJUaGVtZVByb3ZpZGVyL1N1YlRoZW1lUHJvdmlkZXJcIjtcbmltcG9ydCB6SW5kaWNlcyBmcm9tIFwiLi4vLi4vLi4vYnVpbGQtdG9rZW5zL196aW5kZXguanNvblwiO1xuXG5pbXBvcnQge1xuICBBTklNQVRJT05fRElTVEFOQ0UsXG4gIEFSUk9XX1NJWkUsXG4gIEFSUk9XX1NJWkVfQklHLFxuICBnZXRBcnJvd09mZnNldCxcbiAgZ2V0VG9vbHRpcFN0eWxlLFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4uL0NvbnRhaW5lci9Db250YWluZXJcIjtcblxuZXhwb3J0IHR5cGUgVG9vbHRpcENvbnRlbnRQcm9wcyA9IHtcbiAgY29udGVudDogUmVhY3RFbGVtZW50O1xuICB0cmlnZ2VyUmVmOiBNdXRhYmxlUmVmT2JqZWN0PGFueT47XG4gIC8qIFBsYWNlbWVudCAqL1xuICBwbGFjZW1lbnQ/OlxuICAgIHwgXCJhdXRvXCJcbiAgICB8IFwidG9wXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwidG9wLWxlZnRcIlxuICAgIHwgXCJ0b3AtcmlnaHRcIlxuICAgIHwgXCJib3R0b20tbGVmdFwiXG4gICAgfCBcImJvdHRvbS1yaWdodFwiO1xuICAvKiBDdXN0b20gcG9ydGFsIGNvbnRhaW5lciB0byByZW5kZXIgdG9vbHRpcCBpbnRvICovXG4gIHBvcnRhbENvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xuICBkYXRhRTJlVGVzdElkPzogc3RyaW5nO1xuICBkYXRhRFNJZDogc3RyaW5nO1xuICBpc1Zpc2libGU/OiBib29sZWFuO1xuICB0b29sdGlwSWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1oaWRkZW5cIj86IGJvb2xlYW47XG4gIHJvbGU/OiBzdHJpbmc7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICAvLyBDb250ZW50IHBhZGRpbmdcbiAgY29udGVudFBhZGRpbmc/OiBcInNcIiB8IFwibVwiO1xuICBoYXNJbnZlcnRlZFN1YlRoZW1lPzogYm9vbGVhbjtcbiAgbWF4V2lkdGg/OiBudW1iZXI7XG4gIGRlZmF1bHRWZXJ0aWNhbFBsYWNlbWVudD86IFRvb2x0aXBTdHlsZVtcInZlcnRpY2FsUGxhY2VtZW50XCJdO1xuICBvblRvb2x0aXBQb2ludGVyRW50ZXI/OiBSZWFjdC5Qb2ludGVyRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PjtcbiAgb25Ub29sdGlwUG9pbnRlckxlYXZlPzogUmVhY3QuUG9pbnRlckV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIGhpZGVBcnJvdz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUb29sdGlwU3R5bGUgPSB7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIGhvcml6b250YWxQbGFjZW1lbnQ6IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJjZW50ZXJcIjtcbiAgdmVydGljYWxQbGFjZW1lbnQ6IFwidG9wXCIgfCBcImJvdHRvbVwiO1xufTtcblxudHlwZSBTdHlsZWRDb250YWluZXJQcm9wcyA9IFBpY2s8XG4gIFRvb2x0aXBDb250ZW50UHJvcHMsXG4gIFwiY29udGVudFBhZGRpbmdcIiB8IFwibWF4V2lkdGhcIiB8IFwiaGFzSW52ZXJ0ZWRTdWJUaGVtZVwiXG4+ICYge1xuICBob3Jpem9udGFsUGxhY2VtZW50OiBUb29sdGlwU3R5bGVbXCJob3Jpem9udGFsUGxhY2VtZW50XCJdO1xuICB2ZXJ0aWNhbFBsYWNlbWVudDogVG9vbHRpcFN0eWxlW1widmVydGljYWxQbGFjZW1lbnRcIl07XG59O1xuXG5jb25zdCBBTklNQVRJT05fRFVSQVRJT04gPSAyMDA7XG5jb25zdCBTSE9XX0hJREVfREVMQVkgPSAyMDA7XG5jb25zdCBNQVhfQ09OVEVOVF9XSURUSCA9IDIyNDtcblxuY29uc3QgU3R5bGVkQ29udGFpbmVyID0gc3R5bGVkLmRpdjxTdHlsZWRDb250YWluZXJQcm9wcz4oXG4gICh7XG4gICAgdGhlbWUsXG4gICAgaG9yaXpvbnRhbFBsYWNlbWVudCxcbiAgICB2ZXJ0aWNhbFBsYWNlbWVudCxcbiAgICBtYXhXaWR0aCxcbiAgICBjb250ZW50UGFkZGluZyxcbiAgICBoYXNJbnZlcnRlZFN1YlRoZW1lID0gdHJ1ZSxcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFuaW1hdGlvbkRpc3RhbmNlID1cbiAgICAgIHZlcnRpY2FsUGxhY2VtZW50ID09PSBcInRvcFwiXG4gICAgICAgID8gYCR7QU5JTUFUSU9OX0RJU1RBTkNFfXB4YFxuICAgICAgICA6IGAtJHtBTklNQVRJT05fRElTVEFOQ0V9cHhgO1xuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGtleWZyYW1lcyh7XG4gICAgICB0bzoge1xuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgaG9yaXpvbnRhbFBsYWNlbWVudCA9PT0gXCJjZW50ZXJcIlxuICAgICAgICAgICAgPyBgdHJhbnNsYXRlKC01MCUsICR7YW5pbWF0aW9uRGlzdGFuY2V9KWBcbiAgICAgICAgICAgIDogYHRyYW5zbGF0ZVkoJHthbmltYXRpb25EaXN0YW5jZX0pYCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb250ZW50UGFkZGluZ01hcCA9IHtcbiAgICAgIHM6IHRoZW1lLnZhcmlhYmxlcy5zaXplLnNwYWNpbmcueHhzLFxuICAgICAgbTogdGhlbWUudmFyaWFibGVzLnNpemUuc3BhY2luZy5zLFxuICAgIH07XG5cbiAgICBjb25zdCBpbnZlcnRlZFN1YlRoZW1lU3R5bGVzID0ge1xuICAgICAgcGFkZGluZzogYCR7dGhlbWUudmFyaWFibGVzLnNpemUuc3BhY2luZy54c30gJHt0aGVtZS52YXJpYWJsZXMuc2l6ZS5zcGFjaW5nLnN9YCxcbiAgICAgIC4uLihjb250ZW50UGFkZGluZyAmJiB7XG4gICAgICAgIHBhZGRpbmc6IGNvbnRlbnRQYWRkaW5nTWFwW2NvbnRlbnRQYWRkaW5nXSxcbiAgICAgIH0pLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGVtZS52YXJpYWJsZXMuc2l6ZS5ib3JkZXJSYWRpdXMueHMsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhbHVlcy5jb2xvci5iYWNrZ3JvdW5kLnByaW1hcnkuZGVmYXVsdCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IHpJbmRpY2VzLnRvb2x0aXAudmFsdWUsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgYW5pbWF0aW9uOiBgJHtBTklNQVRJT05fRFVSQVRJT059bXMgZWFzZS1vdXQgZm9yd2FyZHMgJHthbmltYXRpb259YCxcbiAgICAgIG1heFdpZHRoLFxuICAgICAgd2lkdGg6IFwiaW5pdGlhbFwiLFxuICAgICAgYm94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcbiAgICAgIC4uLihoYXNJbnZlcnRlZFN1YlRoZW1lICYmIGludmVydGVkU3ViVGhlbWVTdHlsZXMpLFxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwiY2VudGVyXCIgJiYge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUpXCIsXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG4pO1xuXG50eXBlIFN0eWxlZEFycm93UHJvcHMgPSB7XG4gIHZlcnRpY2FsUGxhY2VtZW50OiBUb29sdGlwU3R5bGVbXCJ2ZXJ0aWNhbFBsYWNlbWVudFwiXTtcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogVG9vbHRpcFN0eWxlW1wiaG9yaXpvbnRhbFBsYWNlbWVudFwiXTtcbiAgc2l6ZT86IDAgfCB0eXBlb2YgQVJST1dfU0laRSB8IHR5cGVvZiBBUlJPV19TSVpFX0JJRztcbn07XG5cbmNvbnN0IFN0eWxlZEFycm93ID0gc3R5bGVkLmRpdjxTdHlsZWRBcnJvd1Byb3BzPihcbiAgKHsgdGhlbWUsIHZlcnRpY2FsUGxhY2VtZW50LCBob3Jpem9udGFsUGxhY2VtZW50LCBzaXplID0gQVJST1dfU0laRSB9KSA9PiB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gZ2V0QXJyb3dPZmZzZXQoc2l6ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGJvcmRlckxlZnQ6IGAke3NpemV9cHggc29saWQgdHJhbnNwYXJlbnRgLFxuICAgICAgYm9yZGVyUmlnaHQ6IGAke3NpemV9cHggc29saWQgdHJhbnNwYXJlbnRgLFxuXG4gICAgICAuLi4odmVydGljYWxQbGFjZW1lbnQgPT09IFwidG9wXCIgJiYge1xuICAgICAgICB0b3A6IFwiMTAwJVwiLFxuICAgICAgICBib3JkZXJUb3A6IGAke3NpemV9cHggc29saWQgJHt0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5wcmltYXJ5LmRlZmF1bHR9YCxcbiAgICAgIH0pLFxuXG4gICAgICAuLi4odmVydGljYWxQbGFjZW1lbnQgPT09IFwiYm90dG9tXCIgJiYge1xuICAgICAgICB0b3A6IGAtJHtzaXplfXB4YCxcbiAgICAgICAgYm9yZGVyQm90dG9tOiBgJHtzaXplfXB4IHNvbGlkICR7dGhlbWUudmFsdWVzLmNvbG9yLmJhY2tncm91bmQucHJpbWFyeS5kZWZhdWx0fWAsXG4gICAgICB9KSxcblxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwiY2VudGVyXCIgJiYge1xuICAgICAgICBsZWZ0OiBcIjUwJVwiLFxuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUpXCIsXG4gICAgICB9KSxcblxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwicmlnaHRcIiAmJiB7XG4gICAgICAgIGxlZnQ6IGAke29mZnNldH1weGAsXG4gICAgICB9KSxcblxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwibGVmdFwiICYmIHtcbiAgICAgICAgcmlnaHQ6IGAke29mZnNldH1weGAsXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG4pO1xuXG5jb25zdCBpbml0aWFsU3R5bGU6IFRvb2x0aXBTdHlsZSA9IHtcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICB2ZXJ0aWNhbFBsYWNlbWVudDogXCJ0b3BcIixcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogXCJjZW50ZXJcIixcbn07XG5cbmxldCBsYXN0VG9vbHRpcEhpZGVUaW1lc3RhbXAgPSAwO1xuXG4vKiBEaXNhYmxlIGFuaW1hdGlvbiBpZiB0aW1lIGJldHdlZW4gbGFzdCBjbG9zZSBhbmQgbmV3IG9wZW4gaXMgbGVzcyB0aGFuIDUwMG1zICsgU0hPV19ISURFX0RFTEFZICovXG5mdW5jdGlvbiBnZXRBbmltYXRpb25EdXJhdGlvbigpIHtcbiAgbGV0IGFuaW1hdGlvbkR1cmF0aW9uID0gYCR7QU5JTUFUSU9OX0RVUkFUSU9OfW1zYDtcblxuICBpZiAobGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wKSB7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdFRvb2x0aXAgPSBEYXRlLm5vdygpIC0gbGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wO1xuXG4gICAgaWYgKHRpbWVTaW5jZUxhc3RUb29sdGlwIDwgNTAwICsgU0hPV19ISURFX0RFTEFZKSB7XG4gICAgICBhbmltYXRpb25EdXJhdGlvbiA9IFwiMG1zXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbmltYXRpb25EdXJhdGlvbjtcbn1cblxuLyoqIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgdG8gZGlzcGxheSB0aGUgb3ZlcmxheSBmb3IgYm90aCBUb2dnbGV0aXAgYW5kIFRvb2x0aXAgY29tcG9uZW50cyAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgcGxhY2VtZW50ID0gXCJhdXRvXCIsXG4gIGNvbnRlbnQsXG4gIHRvb2x0aXBJZCxcbiAgdHJpZ2dlclJlZixcbiAgcG9ydGFsQ29udGFpbmVyLFxuICBkYXRhRTJlVGVzdElkLFxuICBkYXRhRFNJZCxcbiAgaXNWaXNpYmxlLFxuICBcImFyaWEtaGlkZGVuXCI6IGFyaWFIaWRkZW4sXG4gIHJvbGUsXG4gIHRhYkluZGV4LFxuICBjb250ZW50UGFkZGluZyxcbiAgbWF4V2lkdGggPSBNQVhfQ09OVEVOVF9XSURUSCxcbiAgaGFzSW52ZXJ0ZWRTdWJUaGVtZSA9IHRydWUsXG4gIGRlZmF1bHRWZXJ0aWNhbFBsYWNlbWVudCxcbiAgb25Ub29sdGlwUG9pbnRlckVudGVyLFxuICBvblRvb2x0aXBQb2ludGVyTGVhdmUsXG4gIGhpZGVBcnJvdyA9IGZhbHNlLFxufTogVG9vbHRpcENvbnRlbnRQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IFtzdHlsZSwgc2V0U3R5bGVdID0gdXNlU3RhdGUoaW5pdGlhbFN0eWxlKTtcbiAgY29uc3QgdG9vbHRpcFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZG9jdW1lbnQgPSB1c2VEb2N1bWVudCgpO1xuICBjb25zdCB3aW5kb3cgPSB1c2VXaW5kb3coKTtcblxuICBjb25zdCBhcnJvd1NpemUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaGlkZUFycm93KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0ludmVydGVkU3ViVGhlbWUgPyBBUlJPV19TSVpFIDogQVJST1dfU0laRV9CSUc7XG4gIH0sIFtoYXNJbnZlcnRlZFN1YlRoZW1lLCBoaWRlQXJyb3ddKTtcblxuICBjb25zdCBjYWxjdWxhdGVTdHlsZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodHJpZ2dlclJlZi5jdXJyZW50ICYmIHRvb2x0aXBSZWYuY3VycmVudCkge1xuICAgICAgLy8gY2FsY3VsYXRlIHRvb2x0aXAgc3R5bGVcbiAgICAgIHNldFN0eWxlKFxuICAgICAgICBnZXRUb29sdGlwU3R5bGUoXG4gICAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICAgIGRlZmF1bHRWZXJ0aWNhbFBsYWNlbWVudCxcbiAgICAgICAgICB0cmlnZ2VyUmVmLFxuICAgICAgICAgIHRvb2x0aXBSZWYsXG4gICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgd2luZG93LFxuICAgICAgICAgIGFycm93U2l6ZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSwgW1xuICAgIHRyaWdnZXJSZWYsXG4gICAgdG9vbHRpcFJlZixcbiAgICBkb2N1bWVudCxcbiAgICB3aW5kb3csXG4gICAgcGxhY2VtZW50LFxuICAgIGFycm93U2l6ZSxcbiAgICBkZWZhdWx0VmVydGljYWxQbGFjZW1lbnQsXG4gIF0pO1xuXG4gIC8vIFRoaXMgbGF5b3V0IGVmZmVjdCB0byByZS1yZW5kZXIgd2l0aCB1cGRhdGVkIHBvc2l0aW9uIGFmdGVyIGRldGVybWluaW5nIGNvbnRlbnQgd2lkdGhcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBjYWxjdWxhdGVTdHlsZSgpO1xuICAgIH1cbiAgfSwgW2lzVmlzaWJsZSwgY2FsY3VsYXRlU3R5bGUsIGNvbnRlbnRQYWRkaW5nLCBjb250ZW50XSk7XG5cbiAgLy8gUmUtcG9zaXRpb24gdG9vbHRpcCBpZiBpdCBtb3ZlcyBvdXQgb2YgdGhlIHZpZXdwb3J0IGJ5IDEwJSBhbmQgb24gd2luZG93IHJlc2l6ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIGlzVmlzaWJsZSAmJlxuICAgICAgdG9vbHRpcFJlZi5jdXJyZW50XG4gICAgKSB7XG4gICAgICBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgY2FsY3VsYXRlU3R5bGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRocmVzaG9sZDogMC45LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRvb2x0aXBSZWYuY3VycmVudCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBjYWxjdWxhdGVTdHlsZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBjYWxjdWxhdGVTdHlsZSwgdHJ1ZSk7IC8vIHVzZSBjYXB0dXJlIGhlcmUgdG8gZGV0ZWN0IHNjcm9sbCBvbiBhbnkgcGFyZW50XG4gICAgfSBlbHNlIGlmICghaXNWaXNpYmxlKSB7XG4gICAgICAvLyBsb2cgdGltZSB3aGVuIHRvb2x0aXAgY2xvc2VzXG4gICAgICBsYXN0VG9vbHRpcEhpZGVUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgY2FsY3VsYXRlU3R5bGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgY2FsY3VsYXRlU3R5bGUpO1xuICAgIH07XG4gIH0sIFtpc1Zpc2libGUsIGNhbGN1bGF0ZVN0eWxlLCB3aW5kb3csIHRvb2x0aXBSZWZdKTtcblxuICBpZiAoIWlzVmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgdG9vbHRpcEVsbSA9IChcbiAgICA8U3R5bGVkQ29udGFpbmVyXG4gICAgICBkYXRhLWUyZS10ZXN0LWlkPXtkYXRhRTJlVGVzdElkfVxuICAgICAgZGF0YS1kcy1pZD17ZGF0YURTSWR9XG4gICAgICBzdHlsZT17e1xuICAgICAgICB0b3A6IHN0eWxlLnRvcCxcbiAgICAgICAgbGVmdDogc3R5bGUubGVmdCxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGdldEFuaW1hdGlvbkR1cmF0aW9uKCksXG4gICAgICB9fVxuICAgICAgcmVmPXt0b29sdGlwUmVmfVxuICAgICAgaWQ9e3Rvb2x0aXBJZH1cbiAgICAgIHJvbGU9e3JvbGV9XG4gICAgICBhcmlhLWhpZGRlbj17YXJpYUhpZGRlbn1cbiAgICAgIGhhc0ludmVydGVkU3ViVGhlbWU9e2hhc0ludmVydGVkU3ViVGhlbWV9XG4gICAgICB0YWJJbmRleD17dGFiSW5kZXh9XG4gICAgICBob3Jpem9udGFsUGxhY2VtZW50PXtzdHlsZS5ob3Jpem9udGFsUGxhY2VtZW50fVxuICAgICAgdmVydGljYWxQbGFjZW1lbnQ9e3N0eWxlLnZlcnRpY2FsUGxhY2VtZW50fVxuICAgICAgbWF4V2lkdGg9e21heFdpZHRofVxuICAgICAgY29udGVudFBhZGRpbmc9e2NvbnRlbnRQYWRkaW5nfVxuICAgICAgb25Qb2ludGVyRW50ZXI9e29uVG9vbHRpcFBvaW50ZXJFbnRlcn1cbiAgICAgIG9uUG9pbnRlckxlYXZlPXtvblRvb2x0aXBQb2ludGVyTGVhdmV9XG4gICAgPlxuICAgICAge2hhc0ludmVydGVkU3ViVGhlbWUgPyAoXG4gICAgICAgIGNvbnRlbnRcbiAgICAgICkgOiAoXG4gICAgICAgIDxDb250YWluZXIgZWxldmF0aW9uPXszfSBib3JkZXJSYWRpdXM9XCJzXCI+XG4gICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIDwvQ29udGFpbmVyPlxuICAgICAgKX1cbiAgICAgIHshaGlkZUFycm93ICYmIChcbiAgICAgICAgPFN0eWxlZEFycm93XG4gICAgICAgICAgZGF0YS1lMmUtdGVzdC1pZD17YCR7ZGF0YUUyZVRlc3RJZH1fYXJyb3dgfVxuICAgICAgICAgIGhvcml6b250YWxQbGFjZW1lbnQ9e3N0eWxlLmhvcml6b250YWxQbGFjZW1lbnR9XG4gICAgICAgICAgdmVydGljYWxQbGFjZW1lbnQ9e3N0eWxlLnZlcnRpY2FsUGxhY2VtZW50fVxuICAgICAgICAgIHNpemU9e2Fycm93U2l6ZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9TdHlsZWRDb250YWluZXI+XG4gICk7XG5cbiAgY29uc3Qgd3JhcHBlckVsbSA9IGhhc0ludmVydGVkU3ViVGhlbWUgPyAoXG4gICAgPFN1YlRoZW1lUHJvdmlkZXIgbmFtZT1cImludmVydGVkXCI+e3Rvb2x0aXBFbG19PC9TdWJUaGVtZVByb3ZpZGVyPlxuICApIDogKFxuICAgIHRvb2x0aXBFbG1cbiAgKTtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKHdyYXBwZXJFbG0sIHBvcnRhbENvbnRhaW5lciB8fCBkb2N1bWVudC5ib2R5KTtcbn1cbiJdfQ== */");
|
|
63
|
+
}, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRvb2x0aXBDb250ZW50LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2RXdCIiwiZmlsZSI6IlRvb2x0aXBDb250ZW50LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBNdXRhYmxlUmVmT2JqZWN0LFxuICBSZWFjdEVsZW1lbnQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgdXNlRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZURvY3VtZW50XCI7XG5pbXBvcnQgeyB1c2VXaW5kb3cgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZVdpbmRvd1wiO1xuaW1wb3J0IHsgU3ViVGhlbWVQcm92aWRlciB9IGZyb20gXCIuLi9TdWJUaGVtZVByb3ZpZGVyL1N1YlRoZW1lUHJvdmlkZXJcIjtcbmltcG9ydCB6SW5kaWNlcyBmcm9tIFwiLi4vLi4vLi4vYnVpbGQtdG9rZW5zL196aW5kZXguanNvblwiO1xuXG5pbXBvcnQge1xuICBBTklNQVRJT05fRElTVEFOQ0UsXG4gIEFSUk9XX1NJWkUsXG4gIEFSUk9XX1NJWkVfQklHLFxuICBESVNUQU5DRV9GUk9NX1RSSUdHRVIsXG4gIGdldEFycm93T2Zmc2V0LFxuICBnZXRUb29sdGlwU3R5bGUsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIFRvb2x0aXBDb250ZW50UHJvcHMgPSB7XG4gIGNvbnRlbnQ6IFJlYWN0RWxlbWVudDtcbiAgdHJpZ2dlclJlZjogTXV0YWJsZVJlZk9iamVjdDxhbnk+O1xuICAvKiBQbGFjZW1lbnQgKi9cbiAgcGxhY2VtZW50PzpcbiAgICB8IFwiYXV0b1wiXG4gICAgfCBcInRvcFwiXG4gICAgfCBcImJvdHRvbVwiXG4gICAgfCBcInRvcC1sZWZ0XCJcbiAgICB8IFwidG9wLXJpZ2h0XCJcbiAgICB8IFwiYm90dG9tLWxlZnRcIlxuICAgIHwgXCJib3R0b20tcmlnaHRcIjtcbiAgLyogQ3VzdG9tIHBvcnRhbCBjb250YWluZXIgdG8gcmVuZGVyIHRvb2x0aXAgaW50byAqL1xuICBwb3J0YWxDb250YWluZXI/OiBIVE1MRWxlbWVudDtcbiAgZGF0YUUyZVRlc3RJZD86IHN0cmluZztcbiAgZGF0YURTSWQ6IHN0cmluZztcbiAgaXNWaXNpYmxlPzogYm9vbGVhbjtcbiAgdG9vbHRpcElkPzogc3RyaW5nO1xuICBcImFyaWEtaGlkZGVuXCI/OiBib29sZWFuO1xuICByb2xlPzogc3RyaW5nO1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgLy8gQ29udGVudCBwYWRkaW5nXG4gIGNvbnRlbnRQYWRkaW5nPzogXCJzXCIgfCBcIm1cIjtcbiAgaGFzSW52ZXJ0ZWRTdWJUaGVtZT86IGJvb2xlYW47XG4gIG1heFdpZHRoPzogbnVtYmVyO1xuICBkZWZhdWx0VmVydGljYWxQbGFjZW1lbnQ/OiBUb29sdGlwU3R5bGVbXCJ2ZXJ0aWNhbFBsYWNlbWVudFwiXTtcbiAgb25Ub29sdGlwUG9pbnRlckVudGVyPzogUmVhY3QuUG9pbnRlckV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uVG9vbHRpcFBvaW50ZXJMZWF2ZT86IFJlYWN0LlBvaW50ZXJFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBoaWRlQXJyb3c/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVG9vbHRpcFN0eWxlID0ge1xuICB0b3A6IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xuICBob3Jpem9udGFsUGxhY2VtZW50OiBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsUGxhY2VtZW50OiBcInRvcFwiIHwgXCJib3R0b21cIjtcbn07XG5cbnR5cGUgU3R5bGVkQ29udGFpbmVyUHJvcHMgPSBQaWNrPFxuICBUb29sdGlwQ29udGVudFByb3BzLFxuICBcImNvbnRlbnRQYWRkaW5nXCIgfCBcIm1heFdpZHRoXCIgfCBcImhhc0ludmVydGVkU3ViVGhlbWVcIlxuPiAmIHtcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogVG9vbHRpcFN0eWxlW1wiaG9yaXpvbnRhbFBsYWNlbWVudFwiXTtcbiAgdmVydGljYWxQbGFjZW1lbnQ6IFRvb2x0aXBTdHlsZVtcInZlcnRpY2FsUGxhY2VtZW50XCJdO1xufTtcblxuY29uc3QgQU5JTUFUSU9OX0RVUkFUSU9OID0gMjAwO1xuY29uc3QgU0hPV19ISURFX0RFTEFZID0gMjAwO1xuY29uc3QgTUFYX0NPTlRFTlRfV0lEVEggPSAyMjQ7XG5cbmNvbnN0IFN0eWxlZENvbnRhaW5lciA9IHN0eWxlZC5kaXY8U3R5bGVkQ29udGFpbmVyUHJvcHM+KFxuICAoe1xuICAgIHRoZW1lLFxuICAgIGhvcml6b250YWxQbGFjZW1lbnQsXG4gICAgdmVydGljYWxQbGFjZW1lbnQsXG4gICAgbWF4V2lkdGgsXG4gICAgY29udGVudFBhZGRpbmcsXG4gICAgaGFzSW52ZXJ0ZWRTdWJUaGVtZSA9IHRydWUsXG4gIH0pID0+IHtcbiAgICBjb25zdCBhbmltYXRpb25EaXN0YW5jZSA9XG4gICAgICB2ZXJ0aWNhbFBsYWNlbWVudCA9PT0gXCJ0b3BcIlxuICAgICAgICA/IGAke0FOSU1BVElPTl9ESVNUQU5DRX1weGBcbiAgICAgICAgOiBgLSR7QU5JTUFUSU9OX0RJU1RBTkNFfXB4YDtcbiAgICBjb25zdCBhbmltYXRpb24gPSBrZXlmcmFtZXMoe1xuICAgICAgdG86IHtcbiAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgIGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwiY2VudGVyXCJcbiAgICAgICAgICAgID8gYHRyYW5zbGF0ZSgtNTAlLCAke2FuaW1hdGlvbkRpc3RhbmNlfSlgXG4gICAgICAgICAgICA6IGB0cmFuc2xhdGVZKCR7YW5pbWF0aW9uRGlzdGFuY2V9KWAsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29udGVudFBhZGRpbmdNYXAgPSB7XG4gICAgICBzOiB0aGVtZS52YXJpYWJsZXMuc2l6ZS5zcGFjaW5nLnh4cyxcbiAgICAgIG06IHRoZW1lLnZhcmlhYmxlcy5zaXplLnNwYWNpbmcucyxcbiAgICB9O1xuXG4gICAgY29uc3QgaW52ZXJ0ZWRTdWJUaGVtZVN0eWxlcyA9IHtcbiAgICAgIHBhZGRpbmc6IGAke3RoZW1lLnZhcmlhYmxlcy5zaXplLnNwYWNpbmcueHN9ICR7dGhlbWUudmFyaWFibGVzLnNpemUuc3BhY2luZy5zfWAsXG4gICAgICAuLi4oY29udGVudFBhZGRpbmcgJiYge1xuICAgICAgICBwYWRkaW5nOiBjb250ZW50UGFkZGluZ01hcFtjb250ZW50UGFkZGluZ10sXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IHpJbmRpY2VzLnRvb2x0aXAudmFsdWUsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgYW5pbWF0aW9uOiBgJHtBTklNQVRJT05fRFVSQVRJT059bXMgZWFzZS1vdXQgZm9yd2FyZHMgJHthbmltYXRpb259YCxcbiAgICAgIG1heFdpZHRoLFxuICAgICAgd2lkdGg6IFwibWF4LWNvbnRlbnRcIixcbiAgICAgIGJveFNpemluZzogXCJib3JkZXItYm94XCIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGhhc0ludmVydGVkU3ViVGhlbWVcbiAgICAgICAgPyB0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5wcmltYXJ5LmRlZmF1bHRcbiAgICAgICAgOiB0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5lbGV2YXRlZC5kZWZhdWx0LFxuICAgICAgYm9yZGVyUmFkaXVzOiBoYXNJbnZlcnRlZFN1YlRoZW1lXG4gICAgICAgID8gdGhlbWUudmFyaWFibGVzLnNpemUuYm9yZGVyUmFkaXVzLnhzXG4gICAgICAgIDogdGhlbWUudmFyaWFibGVzLnNpemUuYm9yZGVyUmFkaXVzLnMsXG5cbiAgICAgIC4uLihoYXNJbnZlcnRlZFN1YlRoZW1lICYmIGludmVydGVkU3ViVGhlbWVTdHlsZXMpLFxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwiY2VudGVyXCIgJiYge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUpXCIsXG4gICAgICB9KSxcbiAgICAgIC4uLighaGFzSW52ZXJ0ZWRTdWJUaGVtZSAmJiB7XG4gICAgICAgIGJveFNoYWRvdzogdGhlbWUudmFsdWVzLmVsZXZhdGlvbi5jLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuKTtcblxudHlwZSBTdHlsZWRBcnJvd1Byb3BzID0gUGljazxUb29sdGlwQ29udGVudFByb3BzLCBcImhhc0ludmVydGVkU3ViVGhlbWVcIj4gJiB7XG4gIHZlcnRpY2FsUGxhY2VtZW50OiBUb29sdGlwU3R5bGVbXCJ2ZXJ0aWNhbFBsYWNlbWVudFwiXTtcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogVG9vbHRpcFN0eWxlW1wiaG9yaXpvbnRhbFBsYWNlbWVudFwiXTtcbiAgc2l6ZT86IDAgfCB0eXBlb2YgQVJST1dfU0laRSB8IHR5cGVvZiBBUlJPV19TSVpFX0JJRztcbn07XG5cbi8vIFRoaXMgY29udGFpbmVyIGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBhcnJvdyBzaGFkb3cgYmx1clxuY29uc3QgQVJST1dfQ09OVEFJTkVSX1dJRFRIID0gNDA7XG5cbmNvbnN0IFN0eWxlZEFycm93ID0gc3R5bGVkLmRpdjxTdHlsZWRBcnJvd1Byb3BzPihcbiAgKHtcbiAgICB0aGVtZSxcbiAgICBoYXNJbnZlcnRlZFN1YlRoZW1lLFxuICAgIHZlcnRpY2FsUGxhY2VtZW50LFxuICAgIGhvcml6b250YWxQbGFjZW1lbnQsXG4gICAgc2l6ZSA9IEFSUk9XX1NJWkUsXG4gIH0pID0+IHtcbiAgICBjb25zdCBvZmZzZXQgPSBnZXRBcnJvd09mZnNldChzaXplKTtcbiAgICBjb25zdCBhZGp1c3RtZW50Rm9yU2hhZG93ID0gaGFzSW52ZXJ0ZWRTdWJUaGVtZSA/IDAgOiAxO1xuICAgIGNvbnN0IGFycm93Q29udGFpbmVySGVpZ2h0ID0gc2l6ZSArIERJU1RBTkNFX0ZST01fVFJJR0dFUjtcbiAgICAvLyBHZXQgYXJyb3cgd2lkdGggYW5kIGhlaWdodCB1c2luZyBweXRob2dvcmFzIHRoZW9yZW0gYW5kIGFkZCAxIHRvIGhlaWdodCB0byBhY2NvdW50IGZvciBkYXJrIG1vZGUgc2hhZG93LlxuICAgIGNvbnN0IGFycm93U2lkZUxlbmd0aCA9IE1hdGguc3FydChcbiAgICAgIHNpemUgKiogMiArIChzaXplICsgYWRqdXN0bWVudEZvclNoYWRvdykgKiogMlxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgIHdpZHRoOiBBUlJPV19DT05UQUlORVJfV0lEVEgsXG4gICAgICBoZWlnaHQ6IGFycm93Q29udGFpbmVySGVpZ2h0LFxuICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG5cbiAgICAgIC4uLih2ZXJ0aWNhbFBsYWNlbWVudCA9PT0gXCJ0b3BcIiAmJiB7XG4gICAgICAgIC8vIHBsYWNlIHRoZSBhcnJvdyBjb250YWluZXIgMXB4IGluc2lkZSB0b29sdGlwIGNvbnRhaW5lciB0byBhY2NvdW50IGZvciBkYXJrIG1vZGUgYm94LXNoYWRvd1xuICAgICAgICB0b3A6IGBjYWxjKDEwMCUgLSAke2FkanVzdG1lbnRGb3JTaGFkb3d9cHgpYCxcbiAgICAgIH0pLFxuXG4gICAgICAuLi4odmVydGljYWxQbGFjZW1lbnQgPT09IFwiYm90dG9tXCIgJiYge1xuICAgICAgICAvLyBwbGFjZSB0aGUgYXJyb3cgY29udGFpbmVyIDFweCBpbnNpZGUgdG9vbHRpcCBjb250YWluZXIgdG8gYWNjb3VudCBmb3IgZGFyayBtb2RlIGJveC1zaGFkb3dcbiAgICAgICAgdG9wOiBgLSR7YXJyb3dDb250YWluZXJIZWlnaHQgLSBhZGp1c3RtZW50Rm9yU2hhZG93fXB4YCxcbiAgICAgIH0pLFxuXG4gICAgICAuLi4oaG9yaXpvbnRhbFBsYWNlbWVudCA9PT0gXCJjZW50ZXJcIiAmJiB7XG4gICAgICAgIGxlZnQ6IFwiNTAlXCIsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLTUwJSlcIixcbiAgICAgIH0pLFxuXG4gICAgICAuLi4oaG9yaXpvbnRhbFBsYWNlbWVudCA9PT0gXCJyaWdodFwiICYmIHtcbiAgICAgICAgbGVmdDogYCR7b2Zmc2V0IC0gKEFSUk9XX0NPTlRBSU5FUl9XSURUSCAvIDIgLSBzaXplKX1weGAsXG4gICAgICB9KSxcblxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwibGVmdFwiICYmIHtcbiAgICAgICAgcmlnaHQ6IGAke29mZnNldCAtIChBUlJPV19DT05UQUlORVJfV0lEVEggLyAyIC0gc2l6ZSl9cHhgLFxuICAgICAgfSksXG5cbiAgICAgIFwiJjo6YWZ0ZXJcIjoge1xuICAgICAgICBjb250ZW50OiAnXCIgXCInLFxuICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICB0b3A6IHZlcnRpY2FsUGxhY2VtZW50ID09PSBcInRvcFwiID8gMCA6IFwiMTAwJVwiLFxuICAgICAgICBsZWZ0OiBcIjUwJVwiLFxuICAgICAgICB3aWR0aDogYXJyb3dTaWRlTGVuZ3RoLFxuICAgICAgICBoZWlnaHQ6IGFycm93U2lkZUxlbmd0aCxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBoYXNJbnZlcnRlZFN1YlRoZW1lXG4gICAgICAgICAgPyB0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5wcmltYXJ5LmRlZmF1bHRcbiAgICAgICAgICA6IHRoZW1lLnZhbHVlcy5jb2xvci5iYWNrZ3JvdW5kLmVsZXZhdGVkLmRlZmF1bHQsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDQ1ZGVnKVwiLFxuXG4gICAgICAgIC4uLighaGFzSW52ZXJ0ZWRTdWJUaGVtZSAmJiB7XG4gICAgICAgICAgYm94U2hhZG93OiB0aGVtZS52YWx1ZXMuZWxldmF0aW9uLmMsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4pO1xuXG5jb25zdCBpbml0aWFsU3R5bGU6IFRvb2x0aXBTdHlsZSA9IHtcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICB2ZXJ0aWNhbFBsYWNlbWVudDogXCJ0b3BcIixcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogXCJjZW50ZXJcIixcbn07XG5cbmxldCBsYXN0VG9vbHRpcEhpZGVUaW1lc3RhbXAgPSAwO1xuXG4vKiBEaXNhYmxlIGFuaW1hdGlvbiBpZiB0aW1lIGJldHdlZW4gbGFzdCBjbG9zZSBhbmQgbmV3IG9wZW4gaXMgbGVzcyB0aGFuIDUwMG1zICsgU0hPV19ISURFX0RFTEFZICovXG5mdW5jdGlvbiBnZXRBbmltYXRpb25EdXJhdGlvbigpIHtcbiAgbGV0IGFuaW1hdGlvbkR1cmF0aW9uID0gYCR7QU5JTUFUSU9OX0RVUkFUSU9OfW1zYDtcblxuICBpZiAobGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wKSB7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdFRvb2x0aXAgPSBEYXRlLm5vdygpIC0gbGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wO1xuXG4gICAgaWYgKHRpbWVTaW5jZUxhc3RUb29sdGlwIDwgNTAwICsgU0hPV19ISURFX0RFTEFZKSB7XG4gICAgICBhbmltYXRpb25EdXJhdGlvbiA9IFwiMG1zXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbmltYXRpb25EdXJhdGlvbjtcbn1cblxuLyoqIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgdG8gZGlzcGxheSB0aGUgb3ZlcmxheSBmb3IgYm90aCBUb2dnbGV0aXAgYW5kIFRvb2x0aXAgY29tcG9uZW50cyAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgcGxhY2VtZW50ID0gXCJhdXRvXCIsXG4gIGNvbnRlbnQsXG4gIHRvb2x0aXBJZCxcbiAgdHJpZ2dlclJlZixcbiAgcG9ydGFsQ29udGFpbmVyLFxuICBkYXRhRTJlVGVzdElkLFxuICBkYXRhRFNJZCxcbiAgaXNWaXNpYmxlLFxuICBcImFyaWEtaGlkZGVuXCI6IGFyaWFIaWRkZW4sXG4gIHJvbGUsXG4gIHRhYkluZGV4LFxuICBjb250ZW50UGFkZGluZyxcbiAgbWF4V2lkdGggPSBNQVhfQ09OVEVOVF9XSURUSCxcbiAgaGFzSW52ZXJ0ZWRTdWJUaGVtZSA9IHRydWUsXG4gIGRlZmF1bHRWZXJ0aWNhbFBsYWNlbWVudCxcbiAgb25Ub29sdGlwUG9pbnRlckVudGVyLFxuICBvblRvb2x0aXBQb2ludGVyTGVhdmUsXG4gIGhpZGVBcnJvdyA9IGZhbHNlLFxufTogVG9vbHRpcENvbnRlbnRQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IFtzdHlsZSwgc2V0U3R5bGVdID0gdXNlU3RhdGUoaW5pdGlhbFN0eWxlKTtcbiAgY29uc3QgdG9vbHRpcFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZG9jdW1lbnQgPSB1c2VEb2N1bWVudCgpO1xuICBjb25zdCB3aW5kb3cgPSB1c2VXaW5kb3coKTtcblxuICBjb25zdCBhcnJvd1NpemUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaGlkZUFycm93KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0ludmVydGVkU3ViVGhlbWUgPyBBUlJPV19TSVpFIDogQVJST1dfU0laRV9CSUc7XG4gIH0sIFtoYXNJbnZlcnRlZFN1YlRoZW1lLCBoaWRlQXJyb3ddKTtcblxuICBjb25zdCBjYWxjdWxhdGVTdHlsZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodHJpZ2dlclJlZi5jdXJyZW50ICYmIHRvb2x0aXBSZWYuY3VycmVudCkge1xuICAgICAgLy8gY2FsY3VsYXRlIHRvb2x0aXAgc3R5bGVcbiAgICAgIHNldFN0eWxlKFxuICAgICAgICBnZXRUb29sdGlwU3R5bGUoXG4gICAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICAgIGRlZmF1bHRWZXJ0aWNhbFBsYWNlbWVudCxcbiAgICAgICAgICB0cmlnZ2VyUmVmLFxuICAgICAgICAgIHRvb2x0aXBSZWYsXG4gICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgd2luZG93LFxuICAgICAgICAgIGFycm93U2l6ZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSwgW1xuICAgIHRyaWdnZXJSZWYsXG4gICAgdG9vbHRpcFJlZixcbiAgICBkb2N1bWVudCxcbiAgICB3aW5kb3csXG4gICAgcGxhY2VtZW50LFxuICAgIGFycm93U2l6ZSxcbiAgICBkZWZhdWx0VmVydGljYWxQbGFjZW1lbnQsXG4gIF0pO1xuXG4gIC8vIFRoaXMgbGF5b3V0IGVmZmVjdCB0byByZS1yZW5kZXIgd2l0aCB1cGRhdGVkIHBvc2l0aW9uIGFmdGVyIGRldGVybWluaW5nIGNvbnRlbnQgd2lkdGhcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBjYWxjdWxhdGVTdHlsZSgpO1xuICAgIH1cbiAgfSwgW2lzVmlzaWJsZSwgY2FsY3VsYXRlU3R5bGUsIGNvbnRlbnRQYWRkaW5nLCBjb250ZW50XSk7XG5cbiAgLy8gUmUtcG9zaXRpb24gdG9vbHRpcCBpZiBpdCBtb3ZlcyBvdXQgb2YgdGhlIHZpZXdwb3J0IGJ5IDEwJSBhbmQgb24gd2luZG93IHJlc2l6ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIGlzVmlzaWJsZSAmJlxuICAgICAgdG9vbHRpcFJlZi5jdXJyZW50XG4gICAgKSB7XG4gICAgICBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgY2FsY3VsYXRlU3R5bGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRocmVzaG9sZDogMC45LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRvb2x0aXBSZWYuY3VycmVudCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBjYWxjdWxhdGVTdHlsZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBjYWxjdWxhdGVTdHlsZSwgdHJ1ZSk7IC8vIHVzZSBjYXB0dXJlIGhlcmUgdG8gZGV0ZWN0IHNjcm9sbCBvbiBhbnkgcGFyZW50XG4gICAgfSBlbHNlIGlmICghaXNWaXNpYmxlKSB7XG4gICAgICAvLyBsb2cgdGltZSB3aGVuIHRvb2x0aXAgY2xvc2VzXG4gICAgICBsYXN0VG9vbHRpcEhpZGVUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgY2FsY3VsYXRlU3R5bGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgY2FsY3VsYXRlU3R5bGUpO1xuICAgIH07XG4gIH0sIFtpc1Zpc2libGUsIGNhbGN1bGF0ZVN0eWxlLCB3aW5kb3csIHRvb2x0aXBSZWZdKTtcblxuICBpZiAoIWlzVmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgdG9vbHRpcEVsbSA9IChcbiAgICA8U3R5bGVkQ29udGFpbmVyXG4gICAgICBkYXRhLWUyZS10ZXN0LWlkPXtkYXRhRTJlVGVzdElkfVxuICAgICAgZGF0YS1kcy1pZD17ZGF0YURTSWR9XG4gICAgICBzdHlsZT17e1xuICAgICAgICB0b3A6IHN0eWxlLnRvcCxcbiAgICAgICAgbGVmdDogc3R5bGUubGVmdCxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGdldEFuaW1hdGlvbkR1cmF0aW9uKCksXG4gICAgICB9fVxuICAgICAgcmVmPXt0b29sdGlwUmVmfVxuICAgICAgaWQ9e3Rvb2x0aXBJZH1cbiAgICAgIHJvbGU9e3JvbGV9XG4gICAgICBhcmlhLWhpZGRlbj17YXJpYUhpZGRlbn1cbiAgICAgIGhhc0ludmVydGVkU3ViVGhlbWU9e2hhc0ludmVydGVkU3ViVGhlbWV9XG4gICAgICB0YWJJbmRleD17dGFiSW5kZXh9XG4gICAgICBob3Jpem9udGFsUGxhY2VtZW50PXtzdHlsZS5ob3Jpem9udGFsUGxhY2VtZW50fVxuICAgICAgdmVydGljYWxQbGFjZW1lbnQ9e3N0eWxlLnZlcnRpY2FsUGxhY2VtZW50fVxuICAgICAgbWF4V2lkdGg9e21heFdpZHRofVxuICAgICAgY29udGVudFBhZGRpbmc9e2NvbnRlbnRQYWRkaW5nfVxuICAgICAgb25Qb2ludGVyRW50ZXI9e29uVG9vbHRpcFBvaW50ZXJFbnRlcn1cbiAgICAgIG9uUG9pbnRlckxlYXZlPXtvblRvb2x0aXBQb2ludGVyTGVhdmV9XG4gICAgPlxuICAgICAge2NvbnRlbnR9XG4gICAgICB7IWhpZGVBcnJvdyAmJiAoXG4gICAgICAgIDxTdHlsZWRBcnJvd1xuICAgICAgICAgIGRhdGEtZTJlLXRlc3QtaWQ9e2Ake2RhdGFFMmVUZXN0SWR9X2Fycm93YH1cbiAgICAgICAgICBoYXNJbnZlcnRlZFN1YlRoZW1lPXtoYXNJbnZlcnRlZFN1YlRoZW1lfVxuICAgICAgICAgIGhvcml6b250YWxQbGFjZW1lbnQ9e3N0eWxlLmhvcml6b250YWxQbGFjZW1lbnR9XG4gICAgICAgICAgdmVydGljYWxQbGFjZW1lbnQ9e3N0eWxlLnZlcnRpY2FsUGxhY2VtZW50fVxuICAgICAgICAgIHNpemU9e2Fycm93U2l6ZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9TdHlsZWRDb250YWluZXI+XG4gICk7XG5cbiAgY29uc3Qgd3JhcHBlckVsbSA9IGhhc0ludmVydGVkU3ViVGhlbWUgPyAoXG4gICAgPFN1YlRoZW1lUHJvdmlkZXIgbmFtZT1cImludmVydGVkXCI+e3Rvb2x0aXBFbG19PC9TdWJUaGVtZVByb3ZpZGVyPlxuICApIDogKFxuICAgIHRvb2x0aXBFbG1cbiAgKTtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKHdyYXBwZXJFbG0sIHBvcnRhbENvbnRhaW5lciB8fCBkb2N1bWVudC5ib2R5KTtcbn1cbiJdfQ== */");
|
|
64
|
+
// This container is large enough to contain the arrow shadow blur
|
|
65
|
+
const ARROW_CONTAINER_WIDTH = 40;
|
|
62
66
|
const StyledArrow = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "production" ? {
|
|
63
67
|
target: "e1k814k40"
|
|
64
68
|
} : {
|
|
@@ -67,37 +71,54 @@ const StyledArrow = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "produc
|
|
|
67
71
|
})(_ref2 => {
|
|
68
72
|
let {
|
|
69
73
|
theme,
|
|
74
|
+
hasInvertedSubTheme,
|
|
70
75
|
verticalPlacement,
|
|
71
76
|
horizontalPlacement,
|
|
72
77
|
size = ARROW_SIZE
|
|
73
78
|
} = _ref2;
|
|
74
79
|
const offset = getArrowOffset(size);
|
|
80
|
+
const adjustmentForShadow = hasInvertedSubTheme ? 0 : 1;
|
|
81
|
+
const arrowContainerHeight = size + DISTANCE_FROM_TRIGGER;
|
|
82
|
+
// Get arrow width and height using pythogoras theorem and add 1 to height to account for dark mode shadow.
|
|
83
|
+
const arrowSideLength = Math.sqrt(size ** 2 + (size + adjustmentForShadow) ** 2);
|
|
75
84
|
return {
|
|
76
85
|
position: "absolute",
|
|
77
|
-
width:
|
|
78
|
-
height:
|
|
79
|
-
|
|
80
|
-
borderRight: `${size}px solid transparent`,
|
|
86
|
+
width: ARROW_CONTAINER_WIDTH,
|
|
87
|
+
height: arrowContainerHeight,
|
|
88
|
+
overflow: "hidden",
|
|
81
89
|
...(verticalPlacement === "top" && {
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
// place the arrow container 1px inside tooltip container to account for dark mode box-shadow
|
|
91
|
+
top: `calc(100% - ${adjustmentForShadow}px)`
|
|
84
92
|
}),
|
|
85
93
|
...(verticalPlacement === "bottom" && {
|
|
86
|
-
|
|
87
|
-
|
|
94
|
+
// place the arrow container 1px inside tooltip container to account for dark mode box-shadow
|
|
95
|
+
top: `-${arrowContainerHeight - adjustmentForShadow}px`
|
|
88
96
|
}),
|
|
89
97
|
...(horizontalPlacement === "center" && {
|
|
90
98
|
left: "50%",
|
|
91
99
|
transform: "translate(-50%)"
|
|
92
100
|
}),
|
|
93
101
|
...(horizontalPlacement === "right" && {
|
|
94
|
-
left: `${offset}px`
|
|
102
|
+
left: `${offset - (ARROW_CONTAINER_WIDTH / 2 - size)}px`
|
|
95
103
|
}),
|
|
96
104
|
...(horizontalPlacement === "left" && {
|
|
97
|
-
right: `${offset}px`
|
|
98
|
-
})
|
|
105
|
+
right: `${offset - (ARROW_CONTAINER_WIDTH / 2 - size)}px`
|
|
106
|
+
}),
|
|
107
|
+
"&::after": {
|
|
108
|
+
content: '" "',
|
|
109
|
+
position: "absolute",
|
|
110
|
+
top: verticalPlacement === "top" ? 0 : "100%",
|
|
111
|
+
left: "50%",
|
|
112
|
+
width: arrowSideLength,
|
|
113
|
+
height: arrowSideLength,
|
|
114
|
+
backgroundColor: hasInvertedSubTheme ? theme.values.color.background.primary.default : theme.values.color.background.elevated.default,
|
|
115
|
+
transform: "translate(-50%, -50%) rotate(45deg)",
|
|
116
|
+
...(!hasInvertedSubTheme && {
|
|
117
|
+
boxShadow: theme.values.elevation.c
|
|
118
|
+
})
|
|
119
|
+
}
|
|
99
120
|
};
|
|
100
|
-
}, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRvb2x0aXBDb250ZW50LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3SW9CIiwiZmlsZSI6IlRvb2x0aXBDb250ZW50LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBNdXRhYmxlUmVmT2JqZWN0LFxuICBSZWFjdEVsZW1lbnQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgdXNlRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZURvY3VtZW50XCI7XG5pbXBvcnQgeyB1c2VXaW5kb3cgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZVdpbmRvd1wiO1xuaW1wb3J0IHsgU3ViVGhlbWVQcm92aWRlciB9IGZyb20gXCIuLi9TdWJUaGVtZVByb3ZpZGVyL1N1YlRoZW1lUHJvdmlkZXJcIjtcbmltcG9ydCB6SW5kaWNlcyBmcm9tIFwiLi4vLi4vLi4vYnVpbGQtdG9rZW5zL196aW5kZXguanNvblwiO1xuXG5pbXBvcnQge1xuICBBTklNQVRJT05fRElTVEFOQ0UsXG4gIEFSUk9XX1NJWkUsXG4gIEFSUk9XX1NJWkVfQklHLFxuICBnZXRBcnJvd09mZnNldCxcbiAgZ2V0VG9vbHRpcFN0eWxlLFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4uL0NvbnRhaW5lci9Db250YWluZXJcIjtcblxuZXhwb3J0IHR5cGUgVG9vbHRpcENvbnRlbnRQcm9wcyA9IHtcbiAgY29udGVudDogUmVhY3RFbGVtZW50O1xuICB0cmlnZ2VyUmVmOiBNdXRhYmxlUmVmT2JqZWN0PGFueT47XG4gIC8qIFBsYWNlbWVudCAqL1xuICBwbGFjZW1lbnQ/OlxuICAgIHwgXCJhdXRvXCJcbiAgICB8IFwidG9wXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwidG9wLWxlZnRcIlxuICAgIHwgXCJ0b3AtcmlnaHRcIlxuICAgIHwgXCJib3R0b20tbGVmdFwiXG4gICAgfCBcImJvdHRvbS1yaWdodFwiO1xuICAvKiBDdXN0b20gcG9ydGFsIGNvbnRhaW5lciB0byByZW5kZXIgdG9vbHRpcCBpbnRvICovXG4gIHBvcnRhbENvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xuICBkYXRhRTJlVGVzdElkPzogc3RyaW5nO1xuICBkYXRhRFNJZDogc3RyaW5nO1xuICBpc1Zpc2libGU/OiBib29sZWFuO1xuICB0b29sdGlwSWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1oaWRkZW5cIj86IGJvb2xlYW47XG4gIHJvbGU/OiBzdHJpbmc7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICAvLyBDb250ZW50IHBhZGRpbmdcbiAgY29udGVudFBhZGRpbmc/OiBcInNcIiB8IFwibVwiO1xuICBoYXNJbnZlcnRlZFN1YlRoZW1lPzogYm9vbGVhbjtcbiAgbWF4V2lkdGg/OiBudW1iZXI7XG4gIGRlZmF1bHRWZXJ0aWNhbFBsYWNlbWVudD86IFRvb2x0aXBTdHlsZVtcInZlcnRpY2FsUGxhY2VtZW50XCJdO1xuICBvblRvb2x0aXBQb2ludGVyRW50ZXI/OiBSZWFjdC5Qb2ludGVyRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PjtcbiAgb25Ub29sdGlwUG9pbnRlckxlYXZlPzogUmVhY3QuUG9pbnRlckV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIGhpZGVBcnJvdz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUb29sdGlwU3R5bGUgPSB7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIGhvcml6b250YWxQbGFjZW1lbnQ6IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJjZW50ZXJcIjtcbiAgdmVydGljYWxQbGFjZW1lbnQ6IFwidG9wXCIgfCBcImJvdHRvbVwiO1xufTtcblxudHlwZSBTdHlsZWRDb250YWluZXJQcm9wcyA9IFBpY2s8XG4gIFRvb2x0aXBDb250ZW50UHJvcHMsXG4gIFwiY29udGVudFBhZGRpbmdcIiB8IFwibWF4V2lkdGhcIiB8IFwiaGFzSW52ZXJ0ZWRTdWJUaGVtZVwiXG4+ICYge1xuICBob3Jpem9udGFsUGxhY2VtZW50OiBUb29sdGlwU3R5bGVbXCJob3Jpem9udGFsUGxhY2VtZW50XCJdO1xuICB2ZXJ0aWNhbFBsYWNlbWVudDogVG9vbHRpcFN0eWxlW1widmVydGljYWxQbGFjZW1lbnRcIl07XG59O1xuXG5jb25zdCBBTklNQVRJT05fRFVSQVRJT04gPSAyMDA7XG5jb25zdCBTSE9XX0hJREVfREVMQVkgPSAyMDA7XG5jb25zdCBNQVhfQ09OVEVOVF9XSURUSCA9IDIyNDtcblxuY29uc3QgU3R5bGVkQ29udGFpbmVyID0gc3R5bGVkLmRpdjxTdHlsZWRDb250YWluZXJQcm9wcz4oXG4gICh7XG4gICAgdGhlbWUsXG4gICAgaG9yaXpvbnRhbFBsYWNlbWVudCxcbiAgICB2ZXJ0aWNhbFBsYWNlbWVudCxcbiAgICBtYXhXaWR0aCxcbiAgICBjb250ZW50UGFkZGluZyxcbiAgICBoYXNJbnZlcnRlZFN1YlRoZW1lID0gdHJ1ZSxcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFuaW1hdGlvbkRpc3RhbmNlID1cbiAgICAgIHZlcnRpY2FsUGxhY2VtZW50ID09PSBcInRvcFwiXG4gICAgICAgID8gYCR7QU5JTUFUSU9OX0RJU1RBTkNFfXB4YFxuICAgICAgICA6IGAtJHtBTklNQVRJT05fRElTVEFOQ0V9cHhgO1xuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGtleWZyYW1lcyh7XG4gICAgICB0bzoge1xuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgaG9yaXpvbnRhbFBsYWNlbWVudCA9PT0gXCJjZW50ZXJcIlxuICAgICAgICAgICAgPyBgdHJhbnNsYXRlKC01MCUsICR7YW5pbWF0aW9uRGlzdGFuY2V9KWBcbiAgICAgICAgICAgIDogYHRyYW5zbGF0ZVkoJHthbmltYXRpb25EaXN0YW5jZX0pYCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb250ZW50UGFkZGluZ01hcCA9IHtcbiAgICAgIHM6IHRoZW1lLnZhcmlhYmxlcy5zaXplLnNwYWNpbmcueHhzLFxuICAgICAgbTogdGhlbWUudmFyaWFibGVzLnNpemUuc3BhY2luZy5zLFxuICAgIH07XG5cbiAgICBjb25zdCBpbnZlcnRlZFN1YlRoZW1lU3R5bGVzID0ge1xuICAgICAgcGFkZGluZzogYCR7dGhlbWUudmFyaWFibGVzLnNpemUuc3BhY2luZy54c30gJHt0aGVtZS52YXJpYWJsZXMuc2l6ZS5zcGFjaW5nLnN9YCxcbiAgICAgIC4uLihjb250ZW50UGFkZGluZyAmJiB7XG4gICAgICAgIHBhZGRpbmc6IGNvbnRlbnRQYWRkaW5nTWFwW2NvbnRlbnRQYWRkaW5nXSxcbiAgICAgIH0pLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGVtZS52YXJpYWJsZXMuc2l6ZS5ib3JkZXJSYWRpdXMueHMsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhbHVlcy5jb2xvci5iYWNrZ3JvdW5kLnByaW1hcnkuZGVmYXVsdCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IHpJbmRpY2VzLnRvb2x0aXAudmFsdWUsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgYW5pbWF0aW9uOiBgJHtBTklNQVRJT05fRFVSQVRJT059bXMgZWFzZS1vdXQgZm9yd2FyZHMgJHthbmltYXRpb259YCxcbiAgICAgIG1heFdpZHRoLFxuICAgICAgd2lkdGg6IFwiaW5pdGlhbFwiLFxuICAgICAgYm94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcbiAgICAgIC4uLihoYXNJbnZlcnRlZFN1YlRoZW1lICYmIGludmVydGVkU3ViVGhlbWVTdHlsZXMpLFxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwiY2VudGVyXCIgJiYge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUpXCIsXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG4pO1xuXG50eXBlIFN0eWxlZEFycm93UHJvcHMgPSB7XG4gIHZlcnRpY2FsUGxhY2VtZW50OiBUb29sdGlwU3R5bGVbXCJ2ZXJ0aWNhbFBsYWNlbWVudFwiXTtcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogVG9vbHRpcFN0eWxlW1wiaG9yaXpvbnRhbFBsYWNlbWVudFwiXTtcbiAgc2l6ZT86IDAgfCB0eXBlb2YgQVJST1dfU0laRSB8IHR5cGVvZiBBUlJPV19TSVpFX0JJRztcbn07XG5cbmNvbnN0IFN0eWxlZEFycm93ID0gc3R5bGVkLmRpdjxTdHlsZWRBcnJvd1Byb3BzPihcbiAgKHsgdGhlbWUsIHZlcnRpY2FsUGxhY2VtZW50LCBob3Jpem9udGFsUGxhY2VtZW50LCBzaXplID0gQVJST1dfU0laRSB9KSA9PiB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gZ2V0QXJyb3dPZmZzZXQoc2l6ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGJvcmRlckxlZnQ6IGAke3NpemV9cHggc29saWQgdHJhbnNwYXJlbnRgLFxuICAgICAgYm9yZGVyUmlnaHQ6IGAke3NpemV9cHggc29saWQgdHJhbnNwYXJlbnRgLFxuXG4gICAgICAuLi4odmVydGljYWxQbGFjZW1lbnQgPT09IFwidG9wXCIgJiYge1xuICAgICAgICB0b3A6IFwiMTAwJVwiLFxuICAgICAgICBib3JkZXJUb3A6IGAke3NpemV9cHggc29saWQgJHt0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5wcmltYXJ5LmRlZmF1bHR9YCxcbiAgICAgIH0pLFxuXG4gICAgICAuLi4odmVydGljYWxQbGFjZW1lbnQgPT09IFwiYm90dG9tXCIgJiYge1xuICAgICAgICB0b3A6IGAtJHtzaXplfXB4YCxcbiAgICAgICAgYm9yZGVyQm90dG9tOiBgJHtzaXplfXB4IHNvbGlkICR7dGhlbWUudmFsdWVzLmNvbG9yLmJhY2tncm91bmQucHJpbWFyeS5kZWZhdWx0fWAsXG4gICAgICB9KSxcblxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwiY2VudGVyXCIgJiYge1xuICAgICAgICBsZWZ0OiBcIjUwJVwiLFxuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUpXCIsXG4gICAgICB9KSxcblxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwicmlnaHRcIiAmJiB7XG4gICAgICAgIGxlZnQ6IGAke29mZnNldH1weGAsXG4gICAgICB9KSxcblxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwibGVmdFwiICYmIHtcbiAgICAgICAgcmlnaHQ6IGAke29mZnNldH1weGAsXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG4pO1xuXG5jb25zdCBpbml0aWFsU3R5bGU6IFRvb2x0aXBTdHlsZSA9IHtcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICB2ZXJ0aWNhbFBsYWNlbWVudDogXCJ0b3BcIixcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogXCJjZW50ZXJcIixcbn07XG5cbmxldCBsYXN0VG9vbHRpcEhpZGVUaW1lc3RhbXAgPSAwO1xuXG4vKiBEaXNhYmxlIGFuaW1hdGlvbiBpZiB0aW1lIGJldHdlZW4gbGFzdCBjbG9zZSBhbmQgbmV3IG9wZW4gaXMgbGVzcyB0aGFuIDUwMG1zICsgU0hPV19ISURFX0RFTEFZICovXG5mdW5jdGlvbiBnZXRBbmltYXRpb25EdXJhdGlvbigpIHtcbiAgbGV0IGFuaW1hdGlvbkR1cmF0aW9uID0gYCR7QU5JTUFUSU9OX0RVUkFUSU9OfW1zYDtcblxuICBpZiAobGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wKSB7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdFRvb2x0aXAgPSBEYXRlLm5vdygpIC0gbGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wO1xuXG4gICAgaWYgKHRpbWVTaW5jZUxhc3RUb29sdGlwIDwgNTAwICsgU0hPV19ISURFX0RFTEFZKSB7XG4gICAgICBhbmltYXRpb25EdXJhdGlvbiA9IFwiMG1zXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbmltYXRpb25EdXJhdGlvbjtcbn1cblxuLyoqIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgdG8gZGlzcGxheSB0aGUgb3ZlcmxheSBmb3IgYm90aCBUb2dnbGV0aXAgYW5kIFRvb2x0aXAgY29tcG9uZW50cyAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgcGxhY2VtZW50ID0gXCJhdXRvXCIsXG4gIGNvbnRlbnQsXG4gIHRvb2x0aXBJZCxcbiAgdHJpZ2dlclJlZixcbiAgcG9ydGFsQ29udGFpbmVyLFxuICBkYXRhRTJlVGVzdElkLFxuICBkYXRhRFNJZCxcbiAgaXNWaXNpYmxlLFxuICBcImFyaWEtaGlkZGVuXCI6IGFyaWFIaWRkZW4sXG4gIHJvbGUsXG4gIHRhYkluZGV4LFxuICBjb250ZW50UGFkZGluZyxcbiAgbWF4V2lkdGggPSBNQVhfQ09OVEVOVF9XSURUSCxcbiAgaGFzSW52ZXJ0ZWRTdWJUaGVtZSA9IHRydWUsXG4gIGRlZmF1bHRWZXJ0aWNhbFBsYWNlbWVudCxcbiAgb25Ub29sdGlwUG9pbnRlckVudGVyLFxuICBvblRvb2x0aXBQb2ludGVyTGVhdmUsXG4gIGhpZGVBcnJvdyA9IGZhbHNlLFxufTogVG9vbHRpcENvbnRlbnRQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IFtzdHlsZSwgc2V0U3R5bGVdID0gdXNlU3RhdGUoaW5pdGlhbFN0eWxlKTtcbiAgY29uc3QgdG9vbHRpcFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZG9jdW1lbnQgPSB1c2VEb2N1bWVudCgpO1xuICBjb25zdCB3aW5kb3cgPSB1c2VXaW5kb3coKTtcblxuICBjb25zdCBhcnJvd1NpemUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaGlkZUFycm93KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0ludmVydGVkU3ViVGhlbWUgPyBBUlJPV19TSVpFIDogQVJST1dfU0laRV9CSUc7XG4gIH0sIFtoYXNJbnZlcnRlZFN1YlRoZW1lLCBoaWRlQXJyb3ddKTtcblxuICBjb25zdCBjYWxjdWxhdGVTdHlsZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodHJpZ2dlclJlZi5jdXJyZW50ICYmIHRvb2x0aXBSZWYuY3VycmVudCkge1xuICAgICAgLy8gY2FsY3VsYXRlIHRvb2x0aXAgc3R5bGVcbiAgICAgIHNldFN0eWxlKFxuICAgICAgICBnZXRUb29sdGlwU3R5bGUoXG4gICAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICAgIGRlZmF1bHRWZXJ0aWNhbFBsYWNlbWVudCxcbiAgICAgICAgICB0cmlnZ2VyUmVmLFxuICAgICAgICAgIHRvb2x0aXBSZWYsXG4gICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgd2luZG93LFxuICAgICAgICAgIGFycm93U2l6ZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSwgW1xuICAgIHRyaWdnZXJSZWYsXG4gICAgdG9vbHRpcFJlZixcbiAgICBkb2N1bWVudCxcbiAgICB3aW5kb3csXG4gICAgcGxhY2VtZW50LFxuICAgIGFycm93U2l6ZSxcbiAgICBkZWZhdWx0VmVydGljYWxQbGFjZW1lbnQsXG4gIF0pO1xuXG4gIC8vIFRoaXMgbGF5b3V0IGVmZmVjdCB0byByZS1yZW5kZXIgd2l0aCB1cGRhdGVkIHBvc2l0aW9uIGFmdGVyIGRldGVybWluaW5nIGNvbnRlbnQgd2lkdGhcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBjYWxjdWxhdGVTdHlsZSgpO1xuICAgIH1cbiAgfSwgW2lzVmlzaWJsZSwgY2FsY3VsYXRlU3R5bGUsIGNvbnRlbnRQYWRkaW5nLCBjb250ZW50XSk7XG5cbiAgLy8gUmUtcG9zaXRpb24gdG9vbHRpcCBpZiBpdCBtb3ZlcyBvdXQgb2YgdGhlIHZpZXdwb3J0IGJ5IDEwJSBhbmQgb24gd2luZG93IHJlc2l6ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIGlzVmlzaWJsZSAmJlxuICAgICAgdG9vbHRpcFJlZi5jdXJyZW50XG4gICAgKSB7XG4gICAgICBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgY2FsY3VsYXRlU3R5bGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRocmVzaG9sZDogMC45LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRvb2x0aXBSZWYuY3VycmVudCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBjYWxjdWxhdGVTdHlsZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBjYWxjdWxhdGVTdHlsZSwgdHJ1ZSk7IC8vIHVzZSBjYXB0dXJlIGhlcmUgdG8gZGV0ZWN0IHNjcm9sbCBvbiBhbnkgcGFyZW50XG4gICAgfSBlbHNlIGlmICghaXNWaXNpYmxlKSB7XG4gICAgICAvLyBsb2cgdGltZSB3aGVuIHRvb2x0aXAgY2xvc2VzXG4gICAgICBsYXN0VG9vbHRpcEhpZGVUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgY2FsY3VsYXRlU3R5bGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgY2FsY3VsYXRlU3R5bGUpO1xuICAgIH07XG4gIH0sIFtpc1Zpc2libGUsIGNhbGN1bGF0ZVN0eWxlLCB3aW5kb3csIHRvb2x0aXBSZWZdKTtcblxuICBpZiAoIWlzVmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgdG9vbHRpcEVsbSA9IChcbiAgICA8U3R5bGVkQ29udGFpbmVyXG4gICAgICBkYXRhLWUyZS10ZXN0LWlkPXtkYXRhRTJlVGVzdElkfVxuICAgICAgZGF0YS1kcy1pZD17ZGF0YURTSWR9XG4gICAgICBzdHlsZT17e1xuICAgICAgICB0b3A6IHN0eWxlLnRvcCxcbiAgICAgICAgbGVmdDogc3R5bGUubGVmdCxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGdldEFuaW1hdGlvbkR1cmF0aW9uKCksXG4gICAgICB9fVxuICAgICAgcmVmPXt0b29sdGlwUmVmfVxuICAgICAgaWQ9e3Rvb2x0aXBJZH1cbiAgICAgIHJvbGU9e3JvbGV9XG4gICAgICBhcmlhLWhpZGRlbj17YXJpYUhpZGRlbn1cbiAgICAgIGhhc0ludmVydGVkU3ViVGhlbWU9e2hhc0ludmVydGVkU3ViVGhlbWV9XG4gICAgICB0YWJJbmRleD17dGFiSW5kZXh9XG4gICAgICBob3Jpem9udGFsUGxhY2VtZW50PXtzdHlsZS5ob3Jpem9udGFsUGxhY2VtZW50fVxuICAgICAgdmVydGljYWxQbGFjZW1lbnQ9e3N0eWxlLnZlcnRpY2FsUGxhY2VtZW50fVxuICAgICAgbWF4V2lkdGg9e21heFdpZHRofVxuICAgICAgY29udGVudFBhZGRpbmc9e2NvbnRlbnRQYWRkaW5nfVxuICAgICAgb25Qb2ludGVyRW50ZXI9e29uVG9vbHRpcFBvaW50ZXJFbnRlcn1cbiAgICAgIG9uUG9pbnRlckxlYXZlPXtvblRvb2x0aXBQb2ludGVyTGVhdmV9XG4gICAgPlxuICAgICAge2hhc0ludmVydGVkU3ViVGhlbWUgPyAoXG4gICAgICAgIGNvbnRlbnRcbiAgICAgICkgOiAoXG4gICAgICAgIDxDb250YWluZXIgZWxldmF0aW9uPXszfSBib3JkZXJSYWRpdXM9XCJzXCI+XG4gICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIDwvQ29udGFpbmVyPlxuICAgICAgKX1cbiAgICAgIHshaGlkZUFycm93ICYmIChcbiAgICAgICAgPFN0eWxlZEFycm93XG4gICAgICAgICAgZGF0YS1lMmUtdGVzdC1pZD17YCR7ZGF0YUUyZVRlc3RJZH1fYXJyb3dgfVxuICAgICAgICAgIGhvcml6b250YWxQbGFjZW1lbnQ9e3N0eWxlLmhvcml6b250YWxQbGFjZW1lbnR9XG4gICAgICAgICAgdmVydGljYWxQbGFjZW1lbnQ9e3N0eWxlLnZlcnRpY2FsUGxhY2VtZW50fVxuICAgICAgICAgIHNpemU9e2Fycm93U2l6ZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9TdHlsZWRDb250YWluZXI+XG4gICk7XG5cbiAgY29uc3Qgd3JhcHBlckVsbSA9IGhhc0ludmVydGVkU3ViVGhlbWUgPyAoXG4gICAgPFN1YlRoZW1lUHJvdmlkZXIgbmFtZT1cImludmVydGVkXCI+e3Rvb2x0aXBFbG19PC9TdWJUaGVtZVByb3ZpZGVyPlxuICApIDogKFxuICAgIHRvb2x0aXBFbG1cbiAgKTtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKHdyYXBwZXJFbG0sIHBvcnRhbENvbnRhaW5lciB8fCBkb2N1bWVudC5ib2R5KTtcbn1cbiJdfQ== */");
|
|
121
|
+
}, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRvb2x0aXBDb250ZW50LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtSm9CIiwiZmlsZSI6IlRvb2x0aXBDb250ZW50LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBNdXRhYmxlUmVmT2JqZWN0LFxuICBSZWFjdEVsZW1lbnQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgdXNlRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZURvY3VtZW50XCI7XG5pbXBvcnQgeyB1c2VXaW5kb3cgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZVdpbmRvd1wiO1xuaW1wb3J0IHsgU3ViVGhlbWVQcm92aWRlciB9IGZyb20gXCIuLi9TdWJUaGVtZVByb3ZpZGVyL1N1YlRoZW1lUHJvdmlkZXJcIjtcbmltcG9ydCB6SW5kaWNlcyBmcm9tIFwiLi4vLi4vLi4vYnVpbGQtdG9rZW5zL196aW5kZXguanNvblwiO1xuXG5pbXBvcnQge1xuICBBTklNQVRJT05fRElTVEFOQ0UsXG4gIEFSUk9XX1NJWkUsXG4gIEFSUk9XX1NJWkVfQklHLFxuICBESVNUQU5DRV9GUk9NX1RSSUdHRVIsXG4gIGdldEFycm93T2Zmc2V0LFxuICBnZXRUb29sdGlwU3R5bGUsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIFRvb2x0aXBDb250ZW50UHJvcHMgPSB7XG4gIGNvbnRlbnQ6IFJlYWN0RWxlbWVudDtcbiAgdHJpZ2dlclJlZjogTXV0YWJsZVJlZk9iamVjdDxhbnk+O1xuICAvKiBQbGFjZW1lbnQgKi9cbiAgcGxhY2VtZW50PzpcbiAgICB8IFwiYXV0b1wiXG4gICAgfCBcInRvcFwiXG4gICAgfCBcImJvdHRvbVwiXG4gICAgfCBcInRvcC1sZWZ0XCJcbiAgICB8IFwidG9wLXJpZ2h0XCJcbiAgICB8IFwiYm90dG9tLWxlZnRcIlxuICAgIHwgXCJib3R0b20tcmlnaHRcIjtcbiAgLyogQ3VzdG9tIHBvcnRhbCBjb250YWluZXIgdG8gcmVuZGVyIHRvb2x0aXAgaW50byAqL1xuICBwb3J0YWxDb250YWluZXI/OiBIVE1MRWxlbWVudDtcbiAgZGF0YUUyZVRlc3RJZD86IHN0cmluZztcbiAgZGF0YURTSWQ6IHN0cmluZztcbiAgaXNWaXNpYmxlPzogYm9vbGVhbjtcbiAgdG9vbHRpcElkPzogc3RyaW5nO1xuICBcImFyaWEtaGlkZGVuXCI/OiBib29sZWFuO1xuICByb2xlPzogc3RyaW5nO1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgLy8gQ29udGVudCBwYWRkaW5nXG4gIGNvbnRlbnRQYWRkaW5nPzogXCJzXCIgfCBcIm1cIjtcbiAgaGFzSW52ZXJ0ZWRTdWJUaGVtZT86IGJvb2xlYW47XG4gIG1heFdpZHRoPzogbnVtYmVyO1xuICBkZWZhdWx0VmVydGljYWxQbGFjZW1lbnQ/OiBUb29sdGlwU3R5bGVbXCJ2ZXJ0aWNhbFBsYWNlbWVudFwiXTtcbiAgb25Ub29sdGlwUG9pbnRlckVudGVyPzogUmVhY3QuUG9pbnRlckV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uVG9vbHRpcFBvaW50ZXJMZWF2ZT86IFJlYWN0LlBvaW50ZXJFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBoaWRlQXJyb3c/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVG9vbHRpcFN0eWxlID0ge1xuICB0b3A6IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xuICBob3Jpem9udGFsUGxhY2VtZW50OiBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsUGxhY2VtZW50OiBcInRvcFwiIHwgXCJib3R0b21cIjtcbn07XG5cbnR5cGUgU3R5bGVkQ29udGFpbmVyUHJvcHMgPSBQaWNrPFxuICBUb29sdGlwQ29udGVudFByb3BzLFxuICBcImNvbnRlbnRQYWRkaW5nXCIgfCBcIm1heFdpZHRoXCIgfCBcImhhc0ludmVydGVkU3ViVGhlbWVcIlxuPiAmIHtcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogVG9vbHRpcFN0eWxlW1wiaG9yaXpvbnRhbFBsYWNlbWVudFwiXTtcbiAgdmVydGljYWxQbGFjZW1lbnQ6IFRvb2x0aXBTdHlsZVtcInZlcnRpY2FsUGxhY2VtZW50XCJdO1xufTtcblxuY29uc3QgQU5JTUFUSU9OX0RVUkFUSU9OID0gMjAwO1xuY29uc3QgU0hPV19ISURFX0RFTEFZID0gMjAwO1xuY29uc3QgTUFYX0NPTlRFTlRfV0lEVEggPSAyMjQ7XG5cbmNvbnN0IFN0eWxlZENvbnRhaW5lciA9IHN0eWxlZC5kaXY8U3R5bGVkQ29udGFpbmVyUHJvcHM+KFxuICAoe1xuICAgIHRoZW1lLFxuICAgIGhvcml6b250YWxQbGFjZW1lbnQsXG4gICAgdmVydGljYWxQbGFjZW1lbnQsXG4gICAgbWF4V2lkdGgsXG4gICAgY29udGVudFBhZGRpbmcsXG4gICAgaGFzSW52ZXJ0ZWRTdWJUaGVtZSA9IHRydWUsXG4gIH0pID0+IHtcbiAgICBjb25zdCBhbmltYXRpb25EaXN0YW5jZSA9XG4gICAgICB2ZXJ0aWNhbFBsYWNlbWVudCA9PT0gXCJ0b3BcIlxuICAgICAgICA/IGAke0FOSU1BVElPTl9ESVNUQU5DRX1weGBcbiAgICAgICAgOiBgLSR7QU5JTUFUSU9OX0RJU1RBTkNFfXB4YDtcbiAgICBjb25zdCBhbmltYXRpb24gPSBrZXlmcmFtZXMoe1xuICAgICAgdG86IHtcbiAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgIGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwiY2VudGVyXCJcbiAgICAgICAgICAgID8gYHRyYW5zbGF0ZSgtNTAlLCAke2FuaW1hdGlvbkRpc3RhbmNlfSlgXG4gICAgICAgICAgICA6IGB0cmFuc2xhdGVZKCR7YW5pbWF0aW9uRGlzdGFuY2V9KWAsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29udGVudFBhZGRpbmdNYXAgPSB7XG4gICAgICBzOiB0aGVtZS52YXJpYWJsZXMuc2l6ZS5zcGFjaW5nLnh4cyxcbiAgICAgIG06IHRoZW1lLnZhcmlhYmxlcy5zaXplLnNwYWNpbmcucyxcbiAgICB9O1xuXG4gICAgY29uc3QgaW52ZXJ0ZWRTdWJUaGVtZVN0eWxlcyA9IHtcbiAgICAgIHBhZGRpbmc6IGAke3RoZW1lLnZhcmlhYmxlcy5zaXplLnNwYWNpbmcueHN9ICR7dGhlbWUudmFyaWFibGVzLnNpemUuc3BhY2luZy5zfWAsXG4gICAgICAuLi4oY29udGVudFBhZGRpbmcgJiYge1xuICAgICAgICBwYWRkaW5nOiBjb250ZW50UGFkZGluZ01hcFtjb250ZW50UGFkZGluZ10sXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IHpJbmRpY2VzLnRvb2x0aXAudmFsdWUsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgYW5pbWF0aW9uOiBgJHtBTklNQVRJT05fRFVSQVRJT059bXMgZWFzZS1vdXQgZm9yd2FyZHMgJHthbmltYXRpb259YCxcbiAgICAgIG1heFdpZHRoLFxuICAgICAgd2lkdGg6IFwibWF4LWNvbnRlbnRcIixcbiAgICAgIGJveFNpemluZzogXCJib3JkZXItYm94XCIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGhhc0ludmVydGVkU3ViVGhlbWVcbiAgICAgICAgPyB0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5wcmltYXJ5LmRlZmF1bHRcbiAgICAgICAgOiB0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5lbGV2YXRlZC5kZWZhdWx0LFxuICAgICAgYm9yZGVyUmFkaXVzOiBoYXNJbnZlcnRlZFN1YlRoZW1lXG4gICAgICAgID8gdGhlbWUudmFyaWFibGVzLnNpemUuYm9yZGVyUmFkaXVzLnhzXG4gICAgICAgIDogdGhlbWUudmFyaWFibGVzLnNpemUuYm9yZGVyUmFkaXVzLnMsXG5cbiAgICAgIC4uLihoYXNJbnZlcnRlZFN1YlRoZW1lICYmIGludmVydGVkU3ViVGhlbWVTdHlsZXMpLFxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwiY2VudGVyXCIgJiYge1xuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUpXCIsXG4gICAgICB9KSxcbiAgICAgIC4uLighaGFzSW52ZXJ0ZWRTdWJUaGVtZSAmJiB7XG4gICAgICAgIGJveFNoYWRvdzogdGhlbWUudmFsdWVzLmVsZXZhdGlvbi5jLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuKTtcblxudHlwZSBTdHlsZWRBcnJvd1Byb3BzID0gUGljazxUb29sdGlwQ29udGVudFByb3BzLCBcImhhc0ludmVydGVkU3ViVGhlbWVcIj4gJiB7XG4gIHZlcnRpY2FsUGxhY2VtZW50OiBUb29sdGlwU3R5bGVbXCJ2ZXJ0aWNhbFBsYWNlbWVudFwiXTtcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogVG9vbHRpcFN0eWxlW1wiaG9yaXpvbnRhbFBsYWNlbWVudFwiXTtcbiAgc2l6ZT86IDAgfCB0eXBlb2YgQVJST1dfU0laRSB8IHR5cGVvZiBBUlJPV19TSVpFX0JJRztcbn07XG5cbi8vIFRoaXMgY29udGFpbmVyIGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBhcnJvdyBzaGFkb3cgYmx1clxuY29uc3QgQVJST1dfQ09OVEFJTkVSX1dJRFRIID0gNDA7XG5cbmNvbnN0IFN0eWxlZEFycm93ID0gc3R5bGVkLmRpdjxTdHlsZWRBcnJvd1Byb3BzPihcbiAgKHtcbiAgICB0aGVtZSxcbiAgICBoYXNJbnZlcnRlZFN1YlRoZW1lLFxuICAgIHZlcnRpY2FsUGxhY2VtZW50LFxuICAgIGhvcml6b250YWxQbGFjZW1lbnQsXG4gICAgc2l6ZSA9IEFSUk9XX1NJWkUsXG4gIH0pID0+IHtcbiAgICBjb25zdCBvZmZzZXQgPSBnZXRBcnJvd09mZnNldChzaXplKTtcbiAgICBjb25zdCBhZGp1c3RtZW50Rm9yU2hhZG93ID0gaGFzSW52ZXJ0ZWRTdWJUaGVtZSA/IDAgOiAxO1xuICAgIGNvbnN0IGFycm93Q29udGFpbmVySGVpZ2h0ID0gc2l6ZSArIERJU1RBTkNFX0ZST01fVFJJR0dFUjtcbiAgICAvLyBHZXQgYXJyb3cgd2lkdGggYW5kIGhlaWdodCB1c2luZyBweXRob2dvcmFzIHRoZW9yZW0gYW5kIGFkZCAxIHRvIGhlaWdodCB0byBhY2NvdW50IGZvciBkYXJrIG1vZGUgc2hhZG93LlxuICAgIGNvbnN0IGFycm93U2lkZUxlbmd0aCA9IE1hdGguc3FydChcbiAgICAgIHNpemUgKiogMiArIChzaXplICsgYWRqdXN0bWVudEZvclNoYWRvdykgKiogMlxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgIHdpZHRoOiBBUlJPV19DT05UQUlORVJfV0lEVEgsXG4gICAgICBoZWlnaHQ6IGFycm93Q29udGFpbmVySGVpZ2h0LFxuICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG5cbiAgICAgIC4uLih2ZXJ0aWNhbFBsYWNlbWVudCA9PT0gXCJ0b3BcIiAmJiB7XG4gICAgICAgIC8vIHBsYWNlIHRoZSBhcnJvdyBjb250YWluZXIgMXB4IGluc2lkZSB0b29sdGlwIGNvbnRhaW5lciB0byBhY2NvdW50IGZvciBkYXJrIG1vZGUgYm94LXNoYWRvd1xuICAgICAgICB0b3A6IGBjYWxjKDEwMCUgLSAke2FkanVzdG1lbnRGb3JTaGFkb3d9cHgpYCxcbiAgICAgIH0pLFxuXG4gICAgICAuLi4odmVydGljYWxQbGFjZW1lbnQgPT09IFwiYm90dG9tXCIgJiYge1xuICAgICAgICAvLyBwbGFjZSB0aGUgYXJyb3cgY29udGFpbmVyIDFweCBpbnNpZGUgdG9vbHRpcCBjb250YWluZXIgdG8gYWNjb3VudCBmb3IgZGFyayBtb2RlIGJveC1zaGFkb3dcbiAgICAgICAgdG9wOiBgLSR7YXJyb3dDb250YWluZXJIZWlnaHQgLSBhZGp1c3RtZW50Rm9yU2hhZG93fXB4YCxcbiAgICAgIH0pLFxuXG4gICAgICAuLi4oaG9yaXpvbnRhbFBsYWNlbWVudCA9PT0gXCJjZW50ZXJcIiAmJiB7XG4gICAgICAgIGxlZnQ6IFwiNTAlXCIsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLTUwJSlcIixcbiAgICAgIH0pLFxuXG4gICAgICAuLi4oaG9yaXpvbnRhbFBsYWNlbWVudCA9PT0gXCJyaWdodFwiICYmIHtcbiAgICAgICAgbGVmdDogYCR7b2Zmc2V0IC0gKEFSUk9XX0NPTlRBSU5FUl9XSURUSCAvIDIgLSBzaXplKX1weGAsXG4gICAgICB9KSxcblxuICAgICAgLi4uKGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwibGVmdFwiICYmIHtcbiAgICAgICAgcmlnaHQ6IGAke29mZnNldCAtIChBUlJPV19DT05UQUlORVJfV0lEVEggLyAyIC0gc2l6ZSl9cHhgLFxuICAgICAgfSksXG5cbiAgICAgIFwiJjo6YWZ0ZXJcIjoge1xuICAgICAgICBjb250ZW50OiAnXCIgXCInLFxuICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICB0b3A6IHZlcnRpY2FsUGxhY2VtZW50ID09PSBcInRvcFwiID8gMCA6IFwiMTAwJVwiLFxuICAgICAgICBsZWZ0OiBcIjUwJVwiLFxuICAgICAgICB3aWR0aDogYXJyb3dTaWRlTGVuZ3RoLFxuICAgICAgICBoZWlnaHQ6IGFycm93U2lkZUxlbmd0aCxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBoYXNJbnZlcnRlZFN1YlRoZW1lXG4gICAgICAgICAgPyB0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5wcmltYXJ5LmRlZmF1bHRcbiAgICAgICAgICA6IHRoZW1lLnZhbHVlcy5jb2xvci5iYWNrZ3JvdW5kLmVsZXZhdGVkLmRlZmF1bHQsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDQ1ZGVnKVwiLFxuXG4gICAgICAgIC4uLighaGFzSW52ZXJ0ZWRTdWJUaGVtZSAmJiB7XG4gICAgICAgICAgYm94U2hhZG93OiB0aGVtZS52YWx1ZXMuZWxldmF0aW9uLmMsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4pO1xuXG5jb25zdCBpbml0aWFsU3R5bGU6IFRvb2x0aXBTdHlsZSA9IHtcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICB2ZXJ0aWNhbFBsYWNlbWVudDogXCJ0b3BcIixcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogXCJjZW50ZXJcIixcbn07XG5cbmxldCBsYXN0VG9vbHRpcEhpZGVUaW1lc3RhbXAgPSAwO1xuXG4vKiBEaXNhYmxlIGFuaW1hdGlvbiBpZiB0aW1lIGJldHdlZW4gbGFzdCBjbG9zZSBhbmQgbmV3IG9wZW4gaXMgbGVzcyB0aGFuIDUwMG1zICsgU0hPV19ISURFX0RFTEFZICovXG5mdW5jdGlvbiBnZXRBbmltYXRpb25EdXJhdGlvbigpIHtcbiAgbGV0IGFuaW1hdGlvbkR1cmF0aW9uID0gYCR7QU5JTUFUSU9OX0RVUkFUSU9OfW1zYDtcblxuICBpZiAobGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wKSB7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdFRvb2x0aXAgPSBEYXRlLm5vdygpIC0gbGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wO1xuXG4gICAgaWYgKHRpbWVTaW5jZUxhc3RUb29sdGlwIDwgNTAwICsgU0hPV19ISURFX0RFTEFZKSB7XG4gICAgICBhbmltYXRpb25EdXJhdGlvbiA9IFwiMG1zXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbmltYXRpb25EdXJhdGlvbjtcbn1cblxuLyoqIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgdG8gZGlzcGxheSB0aGUgb3ZlcmxheSBmb3IgYm90aCBUb2dnbGV0aXAgYW5kIFRvb2x0aXAgY29tcG9uZW50cyAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgcGxhY2VtZW50ID0gXCJhdXRvXCIsXG4gIGNvbnRlbnQsXG4gIHRvb2x0aXBJZCxcbiAgdHJpZ2dlclJlZixcbiAgcG9ydGFsQ29udGFpbmVyLFxuICBkYXRhRTJlVGVzdElkLFxuICBkYXRhRFNJZCxcbiAgaXNWaXNpYmxlLFxuICBcImFyaWEtaGlkZGVuXCI6IGFyaWFIaWRkZW4sXG4gIHJvbGUsXG4gIHRhYkluZGV4LFxuICBjb250ZW50UGFkZGluZyxcbiAgbWF4V2lkdGggPSBNQVhfQ09OVEVOVF9XSURUSCxcbiAgaGFzSW52ZXJ0ZWRTdWJUaGVtZSA9IHRydWUsXG4gIGRlZmF1bHRWZXJ0aWNhbFBsYWNlbWVudCxcbiAgb25Ub29sdGlwUG9pbnRlckVudGVyLFxuICBvblRvb2x0aXBQb2ludGVyTGVhdmUsXG4gIGhpZGVBcnJvdyA9IGZhbHNlLFxufTogVG9vbHRpcENvbnRlbnRQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IFtzdHlsZSwgc2V0U3R5bGVdID0gdXNlU3RhdGUoaW5pdGlhbFN0eWxlKTtcbiAgY29uc3QgdG9vbHRpcFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZG9jdW1lbnQgPSB1c2VEb2N1bWVudCgpO1xuICBjb25zdCB3aW5kb3cgPSB1c2VXaW5kb3coKTtcblxuICBjb25zdCBhcnJvd1NpemUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaGlkZUFycm93KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0ludmVydGVkU3ViVGhlbWUgPyBBUlJPV19TSVpFIDogQVJST1dfU0laRV9CSUc7XG4gIH0sIFtoYXNJbnZlcnRlZFN1YlRoZW1lLCBoaWRlQXJyb3ddKTtcblxuICBjb25zdCBjYWxjdWxhdGVTdHlsZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodHJpZ2dlclJlZi5jdXJyZW50ICYmIHRvb2x0aXBSZWYuY3VycmVudCkge1xuICAgICAgLy8gY2FsY3VsYXRlIHRvb2x0aXAgc3R5bGVcbiAgICAgIHNldFN0eWxlKFxuICAgICAgICBnZXRUb29sdGlwU3R5bGUoXG4gICAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICAgIGRlZmF1bHRWZXJ0aWNhbFBsYWNlbWVudCxcbiAgICAgICAgICB0cmlnZ2VyUmVmLFxuICAgICAgICAgIHRvb2x0aXBSZWYsXG4gICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgd2luZG93LFxuICAgICAgICAgIGFycm93U2l6ZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSwgW1xuICAgIHRyaWdnZXJSZWYsXG4gICAgdG9vbHRpcFJlZixcbiAgICBkb2N1bWVudCxcbiAgICB3aW5kb3csXG4gICAgcGxhY2VtZW50LFxuICAgIGFycm93U2l6ZSxcbiAgICBkZWZhdWx0VmVydGljYWxQbGFjZW1lbnQsXG4gIF0pO1xuXG4gIC8vIFRoaXMgbGF5b3V0IGVmZmVjdCB0byByZS1yZW5kZXIgd2l0aCB1cGRhdGVkIHBvc2l0aW9uIGFmdGVyIGRldGVybWluaW5nIGNvbnRlbnQgd2lkdGhcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBjYWxjdWxhdGVTdHlsZSgpO1xuICAgIH1cbiAgfSwgW2lzVmlzaWJsZSwgY2FsY3VsYXRlU3R5bGUsIGNvbnRlbnRQYWRkaW5nLCBjb250ZW50XSk7XG5cbiAgLy8gUmUtcG9zaXRpb24gdG9vbHRpcCBpZiBpdCBtb3ZlcyBvdXQgb2YgdGhlIHZpZXdwb3J0IGJ5IDEwJSBhbmQgb24gd2luZG93IHJlc2l6ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIGlzVmlzaWJsZSAmJlxuICAgICAgdG9vbHRpcFJlZi5jdXJyZW50XG4gICAgKSB7XG4gICAgICBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgY2FsY3VsYXRlU3R5bGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRocmVzaG9sZDogMC45LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRvb2x0aXBSZWYuY3VycmVudCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBjYWxjdWxhdGVTdHlsZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBjYWxjdWxhdGVTdHlsZSwgdHJ1ZSk7IC8vIHVzZSBjYXB0dXJlIGhlcmUgdG8gZGV0ZWN0IHNjcm9sbCBvbiBhbnkgcGFyZW50XG4gICAgfSBlbHNlIGlmICghaXNWaXNpYmxlKSB7XG4gICAgICAvLyBsb2cgdGltZSB3aGVuIHRvb2x0aXAgY2xvc2VzXG4gICAgICBsYXN0VG9vbHRpcEhpZGVUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgY2FsY3VsYXRlU3R5bGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgY2FsY3VsYXRlU3R5bGUpO1xuICAgIH07XG4gIH0sIFtpc1Zpc2libGUsIGNhbGN1bGF0ZVN0eWxlLCB3aW5kb3csIHRvb2x0aXBSZWZdKTtcblxuICBpZiAoIWlzVmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgdG9vbHRpcEVsbSA9IChcbiAgICA8U3R5bGVkQ29udGFpbmVyXG4gICAgICBkYXRhLWUyZS10ZXN0LWlkPXtkYXRhRTJlVGVzdElkfVxuICAgICAgZGF0YS1kcy1pZD17ZGF0YURTSWR9XG4gICAgICBzdHlsZT17e1xuICAgICAgICB0b3A6IHN0eWxlLnRvcCxcbiAgICAgICAgbGVmdDogc3R5bGUubGVmdCxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGdldEFuaW1hdGlvbkR1cmF0aW9uKCksXG4gICAgICB9fVxuICAgICAgcmVmPXt0b29sdGlwUmVmfVxuICAgICAgaWQ9e3Rvb2x0aXBJZH1cbiAgICAgIHJvbGU9e3JvbGV9XG4gICAgICBhcmlhLWhpZGRlbj17YXJpYUhpZGRlbn1cbiAgICAgIGhhc0ludmVydGVkU3ViVGhlbWU9e2hhc0ludmVydGVkU3ViVGhlbWV9XG4gICAgICB0YWJJbmRleD17dGFiSW5kZXh9XG4gICAgICBob3Jpem9udGFsUGxhY2VtZW50PXtzdHlsZS5ob3Jpem9udGFsUGxhY2VtZW50fVxuICAgICAgdmVydGljYWxQbGFjZW1lbnQ9e3N0eWxlLnZlcnRpY2FsUGxhY2VtZW50fVxuICAgICAgbWF4V2lkdGg9e21heFdpZHRofVxuICAgICAgY29udGVudFBhZGRpbmc9e2NvbnRlbnRQYWRkaW5nfVxuICAgICAgb25Qb2ludGVyRW50ZXI9e29uVG9vbHRpcFBvaW50ZXJFbnRlcn1cbiAgICAgIG9uUG9pbnRlckxlYXZlPXtvblRvb2x0aXBQb2ludGVyTGVhdmV9XG4gICAgPlxuICAgICAge2NvbnRlbnR9XG4gICAgICB7IWhpZGVBcnJvdyAmJiAoXG4gICAgICAgIDxTdHlsZWRBcnJvd1xuICAgICAgICAgIGRhdGEtZTJlLXRlc3QtaWQ9e2Ake2RhdGFFMmVUZXN0SWR9X2Fycm93YH1cbiAgICAgICAgICBoYXNJbnZlcnRlZFN1YlRoZW1lPXtoYXNJbnZlcnRlZFN1YlRoZW1lfVxuICAgICAgICAgIGhvcml6b250YWxQbGFjZW1lbnQ9e3N0eWxlLmhvcml6b250YWxQbGFjZW1lbnR9XG4gICAgICAgICAgdmVydGljYWxQbGFjZW1lbnQ9e3N0eWxlLnZlcnRpY2FsUGxhY2VtZW50fVxuICAgICAgICAgIHNpemU9e2Fycm93U2l6ZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9TdHlsZWRDb250YWluZXI+XG4gICk7XG5cbiAgY29uc3Qgd3JhcHBlckVsbSA9IGhhc0ludmVydGVkU3ViVGhlbWUgPyAoXG4gICAgPFN1YlRoZW1lUHJvdmlkZXIgbmFtZT1cImludmVydGVkXCI+e3Rvb2x0aXBFbG19PC9TdWJUaGVtZVByb3ZpZGVyPlxuICApIDogKFxuICAgIHRvb2x0aXBFbG1cbiAgKTtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKHdyYXBwZXJFbG0sIHBvcnRhbENvbnRhaW5lciB8fCBkb2N1bWVudC5ib2R5KTtcbn1cbiJdfQ== */");
|
|
101
122
|
const initialStyle = {
|
|
102
123
|
top: 0,
|
|
103
124
|
left: 0,
|
|
@@ -211,11 +232,9 @@ function TooltipContent(_ref3) {
|
|
|
211
232
|
contentPadding: contentPadding,
|
|
212
233
|
onPointerEnter: onTooltipPointerEnter,
|
|
213
234
|
onPointerLeave: onTooltipPointerLeave
|
|
214
|
-
},
|
|
215
|
-
elevation: 3,
|
|
216
|
-
borderRadius: "s"
|
|
217
|
-
}, content), !hideArrow && /*#__PURE__*/React.createElement(StyledArrow, {
|
|
235
|
+
}, content, !hideArrow && /*#__PURE__*/React.createElement(StyledArrow, {
|
|
218
236
|
"data-e2e-test-id": `${dataE2eTestId}_arrow`,
|
|
237
|
+
hasInvertedSubTheme: hasInvertedSubTheme,
|
|
219
238
|
horizontalPlacement: style.horizontalPlacement,
|
|
220
239
|
verticalPlacement: style.verticalPlacement,
|
|
221
240
|
size: arrowSize
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TooltipContent.js","sources":["../../../../../src/components/Tooltip/TooltipContent.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n ReactElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styled from \"@emotion/styled\";\nimport { keyframes } from \"@emotion/react\";\nimport { createPortal } from \"react-dom\";\nimport { useDocument } from \"../../shared/useDocument\";\nimport { useWindow } from \"../../shared/useWindow\";\nimport { SubThemeProvider } from \"../SubThemeProvider/SubThemeProvider\";\nimport zIndices from \"../../../build-tokens/_zindex.json\";\n\nimport {\n ANIMATION_DISTANCE,\n ARROW_SIZE,\n ARROW_SIZE_BIG,\n getArrowOffset,\n getTooltipStyle,\n} from \"./utils\";\nimport { Container } from \"../Container/Container\";\n\nexport type TooltipContentProps = {\n content: ReactElement;\n triggerRef: MutableRefObject<any>;\n /* Placement */\n placement?:\n | \"auto\"\n | \"top\"\n | \"bottom\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n /* Custom portal container to render tooltip into */\n portalContainer?: HTMLElement;\n dataE2eTestId?: string;\n dataDSId: string;\n isVisible?: boolean;\n tooltipId?: string;\n \"aria-hidden\"?: boolean;\n role?: string;\n tabIndex?: number;\n // Content padding\n contentPadding?: \"s\" | \"m\";\n hasInvertedSubTheme?: boolean;\n maxWidth?: number;\n defaultVerticalPlacement?: TooltipStyle[\"verticalPlacement\"];\n onTooltipPointerEnter?: React.PointerEventHandler<HTMLDivElement>;\n onTooltipPointerLeave?: React.PointerEventHandler<HTMLDivElement>;\n hideArrow?: boolean;\n};\n\nexport type TooltipStyle = {\n top: number;\n left: number;\n horizontalPlacement: \"left\" | \"right\" | \"center\";\n verticalPlacement: \"top\" | \"bottom\";\n};\n\ntype StyledContainerProps = Pick<\n TooltipContentProps,\n \"contentPadding\" | \"maxWidth\" | \"hasInvertedSubTheme\"\n> & {\n horizontalPlacement: TooltipStyle[\"horizontalPlacement\"];\n verticalPlacement: TooltipStyle[\"verticalPlacement\"];\n};\n\nconst ANIMATION_DURATION = 200;\nconst SHOW_HIDE_DELAY = 200;\nconst MAX_CONTENT_WIDTH = 224;\n\nconst StyledContainer = styled.div<StyledContainerProps>(\n ({\n theme,\n horizontalPlacement,\n verticalPlacement,\n maxWidth,\n contentPadding,\n hasInvertedSubTheme = true,\n }) => {\n const animationDistance =\n verticalPlacement === \"top\"\n ? `${ANIMATION_DISTANCE}px`\n : `-${ANIMATION_DISTANCE}px`;\n const animation = keyframes({\n to: {\n opacity: 1,\n transform:\n horizontalPlacement === \"center\"\n ? `translate(-50%, ${animationDistance})`\n : `translateY(${animationDistance})`,\n },\n });\n\n const contentPaddingMap = {\n s: theme.variables.size.spacing.xxs,\n m: theme.variables.size.spacing.s,\n };\n\n const invertedSubThemeStyles = {\n padding: `${theme.variables.size.spacing.xs} ${theme.variables.size.spacing.s}`,\n ...(contentPadding && {\n padding: contentPaddingMap[contentPadding],\n }),\n borderRadius: theme.variables.size.borderRadius.xs,\n backgroundColor: theme.values.color.background.primary.default,\n };\n\n return {\n position: \"absolute\",\n zIndex: zIndices.tooltip.value,\n opacity: 0,\n animation: `${ANIMATION_DURATION}ms ease-out forwards ${animation}`,\n maxWidth,\n width: \"initial\",\n boxSizing: \"border-box\",\n ...(hasInvertedSubTheme && invertedSubThemeStyles),\n ...(horizontalPlacement === \"center\" && {\n transform: \"translate(-50%)\",\n }),\n };\n }\n);\n\ntype StyledArrowProps = {\n verticalPlacement: TooltipStyle[\"verticalPlacement\"];\n horizontalPlacement: TooltipStyle[\"horizontalPlacement\"];\n size?: 0 | typeof ARROW_SIZE | typeof ARROW_SIZE_BIG;\n};\n\nconst StyledArrow = styled.div<StyledArrowProps>(\n ({ theme, verticalPlacement, horizontalPlacement, size = ARROW_SIZE }) => {\n const offset = getArrowOffset(size);\n return {\n position: \"absolute\",\n width: 0,\n height: 0,\n borderLeft: `${size}px solid transparent`,\n borderRight: `${size}px solid transparent`,\n\n ...(verticalPlacement === \"top\" && {\n top: \"100%\",\n borderTop: `${size}px solid ${theme.values.color.background.primary.default}`,\n }),\n\n ...(verticalPlacement === \"bottom\" && {\n top: `-${size}px`,\n borderBottom: `${size}px solid ${theme.values.color.background.primary.default}`,\n }),\n\n ...(horizontalPlacement === \"center\" && {\n left: \"50%\",\n transform: \"translate(-50%)\",\n }),\n\n ...(horizontalPlacement === \"right\" && {\n left: `${offset}px`,\n }),\n\n ...(horizontalPlacement === \"left\" && {\n right: `${offset}px`,\n }),\n };\n }\n);\n\nconst initialStyle: TooltipStyle = {\n top: 0,\n left: 0,\n verticalPlacement: \"top\",\n horizontalPlacement: \"center\",\n};\n\nlet lastTooltipHideTimestamp = 0;\n\n/* Disable animation if time between last close and new open is less than 500ms + SHOW_HIDE_DELAY */\nfunction getAnimationDuration() {\n let animationDuration = `${ANIMATION_DURATION}ms`;\n\n if (lastTooltipHideTimestamp) {\n const timeSinceLastTooltip = Date.now() - lastTooltipHideTimestamp;\n\n if (timeSinceLastTooltip < 500 + SHOW_HIDE_DELAY) {\n animationDuration = \"0ms\";\n }\n }\n return animationDuration;\n}\n\n/** This component is used to display the overlay for both Toggletip and Tooltip components */\nexport function TooltipContent({\n placement = \"auto\",\n content,\n tooltipId,\n triggerRef,\n portalContainer,\n dataE2eTestId,\n dataDSId,\n isVisible,\n \"aria-hidden\": ariaHidden,\n role,\n tabIndex,\n contentPadding,\n maxWidth = MAX_CONTENT_WIDTH,\n hasInvertedSubTheme = true,\n defaultVerticalPlacement,\n onTooltipPointerEnter,\n onTooltipPointerLeave,\n hideArrow = false,\n}: TooltipContentProps): React.ReactElement {\n const [style, setStyle] = useState(initialStyle);\n const tooltipRef = useRef(null);\n const document = useDocument();\n const window = useWindow();\n\n const arrowSize = useMemo(() => {\n if (hideArrow) {\n return 0;\n }\n return hasInvertedSubTheme ? ARROW_SIZE : ARROW_SIZE_BIG;\n }, [hasInvertedSubTheme, hideArrow]);\n\n const calculateStyle = useCallback(() => {\n if (triggerRef.current && tooltipRef.current) {\n // calculate tooltip style\n setStyle(\n getTooltipStyle(\n placement,\n defaultVerticalPlacement,\n triggerRef,\n tooltipRef,\n document,\n window,\n arrowSize\n )\n );\n }\n }, [\n triggerRef,\n tooltipRef,\n document,\n window,\n placement,\n arrowSize,\n defaultVerticalPlacement,\n ]);\n\n // This layout effect to re-render with updated position after determining content width\n useLayoutEffect(() => {\n if (isVisible) {\n calculateStyle();\n }\n }, [isVisible, calculateStyle, contentPadding, content]);\n\n // Re-position tooltip if it moves out of the viewport by 10% and on window resize\n useEffect(() => {\n let observer: IntersectionObserver;\n\n if (\n typeof IntersectionObserver !== \"undefined\" &&\n isVisible &&\n tooltipRef.current\n ) {\n observer = new IntersectionObserver(\n (entries) => {\n entries.forEach(() => {\n calculateStyle();\n });\n },\n {\n threshold: 0.9,\n }\n );\n\n observer.observe(tooltipRef.current);\n window.addEventListener(\"resize\", calculateStyle);\n window.addEventListener(\"scroll\", calculateStyle, true); // use capture here to detect scroll on any parent\n } else if (!isVisible) {\n // log time when tooltip closes\n lastTooltipHideTimestamp = Date.now();\n }\n\n return () => {\n if (observer) {\n observer.disconnect();\n }\n window.removeEventListener(\"resize\", calculateStyle);\n window.removeEventListener(\"scroll\", calculateStyle);\n };\n }, [isVisible, calculateStyle, window, tooltipRef]);\n\n if (!isVisible) return null;\n\n const tooltipElm = (\n <StyledContainer\n data-e2e-test-id={dataE2eTestId}\n data-ds-id={dataDSId}\n style={{\n top: style.top,\n left: style.left,\n animationDuration: getAnimationDuration(),\n }}\n ref={tooltipRef}\n id={tooltipId}\n role={role}\n aria-hidden={ariaHidden}\n hasInvertedSubTheme={hasInvertedSubTheme}\n tabIndex={tabIndex}\n horizontalPlacement={style.horizontalPlacement}\n verticalPlacement={style.verticalPlacement}\n maxWidth={maxWidth}\n contentPadding={contentPadding}\n onPointerEnter={onTooltipPointerEnter}\n onPointerLeave={onTooltipPointerLeave}\n >\n {hasInvertedSubTheme ? (\n content\n ) : (\n <Container elevation={3} borderRadius=\"s\">\n {content}\n </Container>\n )}\n {!hideArrow && (\n <StyledArrow\n data-e2e-test-id={`${dataE2eTestId}_arrow`}\n horizontalPlacement={style.horizontalPlacement}\n verticalPlacement={style.verticalPlacement}\n size={arrowSize}\n />\n )}\n </StyledContainer>\n );\n\n const wrapperElm = hasInvertedSubTheme ? (\n <SubThemeProvider name=\"inverted\">{tooltipElm}</SubThemeProvider>\n ) : (\n tooltipElm\n );\n\n return createPortal(wrapperElm, portalContainer || document.body);\n}\n"],"names":["ANIMATION_DURATION","SHOW_HIDE_DELAY","MAX_CONTENT_WIDTH","StyledContainer","_styled","process","env","NODE_ENV","target","label","_ref","theme","horizontalPlacement","verticalPlacement","maxWidth","contentPadding","hasInvertedSubTheme","animationDistance","ANIMATION_DISTANCE","animation","keyframes","to","opacity","transform","contentPaddingMap","s","variables","size","spacing","xxs","m","invertedSubThemeStyles","padding","xs","borderRadius","backgroundColor","values","color","background","primary","default","position","zIndex","zIndices","tooltip","value","width","boxSizing","StyledArrow","_ref2","ARROW_SIZE","offset","getArrowOffset","height","borderLeft","borderRight","top","borderTop","borderBottom","left","right","initialStyle","lastTooltipHideTimestamp","getAnimationDuration","animationDuration","timeSinceLastTooltip","Date","now","TooltipContent","_ref3","placement","content","tooltipId","triggerRef","portalContainer","dataE2eTestId","dataDSId","isVisible","ariaHidden","role","tabIndex","defaultVerticalPlacement","onTooltipPointerEnter","onTooltipPointerLeave","hideArrow","style","setStyle","useState","tooltipRef","useRef","document","useDocument","window","useWindow","arrowSize","useMemo","ARROW_SIZE_BIG","calculateStyle","useCallback","current","getTooltipStyle","useLayoutEffect","useEffect","observer","IntersectionObserver","entries","forEach","threshold","observe","addEventListener","disconnect","removeEventListener","tooltipElm","React","createElement","ref","id","onPointerEnter","onPointerLeave","Container","elevation","wrapperElm","SubThemeProvider","name","createPortal","body"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TooltipContent.js","sources":["../../../../../src/components/Tooltip/TooltipContent.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n ReactElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styled from \"@emotion/styled\";\nimport { keyframes } from \"@emotion/react\";\nimport { createPortal } from \"react-dom\";\nimport { useDocument } from \"../../shared/useDocument\";\nimport { useWindow } from \"../../shared/useWindow\";\nimport { SubThemeProvider } from \"../SubThemeProvider/SubThemeProvider\";\nimport zIndices from \"../../../build-tokens/_zindex.json\";\n\nimport {\n ANIMATION_DISTANCE,\n ARROW_SIZE,\n ARROW_SIZE_BIG,\n DISTANCE_FROM_TRIGGER,\n getArrowOffset,\n getTooltipStyle,\n} from \"./utils\";\n\nexport type TooltipContentProps = {\n content: ReactElement;\n triggerRef: MutableRefObject<any>;\n /* Placement */\n placement?:\n | \"auto\"\n | \"top\"\n | \"bottom\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n /* Custom portal container to render tooltip into */\n portalContainer?: HTMLElement;\n dataE2eTestId?: string;\n dataDSId: string;\n isVisible?: boolean;\n tooltipId?: string;\n \"aria-hidden\"?: boolean;\n role?: string;\n tabIndex?: number;\n // Content padding\n contentPadding?: \"s\" | \"m\";\n hasInvertedSubTheme?: boolean;\n maxWidth?: number;\n defaultVerticalPlacement?: TooltipStyle[\"verticalPlacement\"];\n onTooltipPointerEnter?: React.PointerEventHandler<HTMLDivElement>;\n onTooltipPointerLeave?: React.PointerEventHandler<HTMLDivElement>;\n hideArrow?: boolean;\n};\n\nexport type TooltipStyle = {\n top: number;\n left: number;\n horizontalPlacement: \"left\" | \"right\" | \"center\";\n verticalPlacement: \"top\" | \"bottom\";\n};\n\ntype StyledContainerProps = Pick<\n TooltipContentProps,\n \"contentPadding\" | \"maxWidth\" | \"hasInvertedSubTheme\"\n> & {\n horizontalPlacement: TooltipStyle[\"horizontalPlacement\"];\n verticalPlacement: TooltipStyle[\"verticalPlacement\"];\n};\n\nconst ANIMATION_DURATION = 200;\nconst SHOW_HIDE_DELAY = 200;\nconst MAX_CONTENT_WIDTH = 224;\n\nconst StyledContainer = styled.div<StyledContainerProps>(\n ({\n theme,\n horizontalPlacement,\n verticalPlacement,\n maxWidth,\n contentPadding,\n hasInvertedSubTheme = true,\n }) => {\n const animationDistance =\n verticalPlacement === \"top\"\n ? `${ANIMATION_DISTANCE}px`\n : `-${ANIMATION_DISTANCE}px`;\n const animation = keyframes({\n to: {\n opacity: 1,\n transform:\n horizontalPlacement === \"center\"\n ? `translate(-50%, ${animationDistance})`\n : `translateY(${animationDistance})`,\n },\n });\n\n const contentPaddingMap = {\n s: theme.variables.size.spacing.xxs,\n m: theme.variables.size.spacing.s,\n };\n\n const invertedSubThemeStyles = {\n padding: `${theme.variables.size.spacing.xs} ${theme.variables.size.spacing.s}`,\n ...(contentPadding && {\n padding: contentPaddingMap[contentPadding],\n }),\n };\n\n return {\n position: \"absolute\",\n zIndex: zIndices.tooltip.value,\n opacity: 0,\n animation: `${ANIMATION_DURATION}ms ease-out forwards ${animation}`,\n maxWidth,\n width: \"max-content\",\n boxSizing: \"border-box\",\n backgroundColor: hasInvertedSubTheme\n ? theme.values.color.background.primary.default\n : theme.values.color.background.elevated.default,\n borderRadius: hasInvertedSubTheme\n ? theme.variables.size.borderRadius.xs\n : theme.variables.size.borderRadius.s,\n\n ...(hasInvertedSubTheme && invertedSubThemeStyles),\n ...(horizontalPlacement === \"center\" && {\n transform: \"translate(-50%)\",\n }),\n ...(!hasInvertedSubTheme && {\n boxShadow: theme.values.elevation.c,\n }),\n };\n }\n);\n\ntype StyledArrowProps = Pick<TooltipContentProps, \"hasInvertedSubTheme\"> & {\n verticalPlacement: TooltipStyle[\"verticalPlacement\"];\n horizontalPlacement: TooltipStyle[\"horizontalPlacement\"];\n size?: 0 | typeof ARROW_SIZE | typeof ARROW_SIZE_BIG;\n};\n\n// This container is large enough to contain the arrow shadow blur\nconst ARROW_CONTAINER_WIDTH = 40;\n\nconst StyledArrow = styled.div<StyledArrowProps>(\n ({\n theme,\n hasInvertedSubTheme,\n verticalPlacement,\n horizontalPlacement,\n size = ARROW_SIZE,\n }) => {\n const offset = getArrowOffset(size);\n const adjustmentForShadow = hasInvertedSubTheme ? 0 : 1;\n const arrowContainerHeight = size + DISTANCE_FROM_TRIGGER;\n // Get arrow width and height using pythogoras theorem and add 1 to height to account for dark mode shadow.\n const arrowSideLength = Math.sqrt(\n size ** 2 + (size + adjustmentForShadow) ** 2\n );\n\n return {\n position: \"absolute\",\n width: ARROW_CONTAINER_WIDTH,\n height: arrowContainerHeight,\n overflow: \"hidden\",\n\n ...(verticalPlacement === \"top\" && {\n // place the arrow container 1px inside tooltip container to account for dark mode box-shadow\n top: `calc(100% - ${adjustmentForShadow}px)`,\n }),\n\n ...(verticalPlacement === \"bottom\" && {\n // place the arrow container 1px inside tooltip container to account for dark mode box-shadow\n top: `-${arrowContainerHeight - adjustmentForShadow}px`,\n }),\n\n ...(horizontalPlacement === \"center\" && {\n left: \"50%\",\n transform: \"translate(-50%)\",\n }),\n\n ...(horizontalPlacement === \"right\" && {\n left: `${offset - (ARROW_CONTAINER_WIDTH / 2 - size)}px`,\n }),\n\n ...(horizontalPlacement === \"left\" && {\n right: `${offset - (ARROW_CONTAINER_WIDTH / 2 - size)}px`,\n }),\n\n \"&::after\": {\n content: '\" \"',\n position: \"absolute\",\n top: verticalPlacement === \"top\" ? 0 : \"100%\",\n left: \"50%\",\n width: arrowSideLength,\n height: arrowSideLength,\n backgroundColor: hasInvertedSubTheme\n ? theme.values.color.background.primary.default\n : theme.values.color.background.elevated.default,\n transform: \"translate(-50%, -50%) rotate(45deg)\",\n\n ...(!hasInvertedSubTheme && {\n boxShadow: theme.values.elevation.c,\n }),\n },\n };\n }\n);\n\nconst initialStyle: TooltipStyle = {\n top: 0,\n left: 0,\n verticalPlacement: \"top\",\n horizontalPlacement: \"center\",\n};\n\nlet lastTooltipHideTimestamp = 0;\n\n/* Disable animation if time between last close and new open is less than 500ms + SHOW_HIDE_DELAY */\nfunction getAnimationDuration() {\n let animationDuration = `${ANIMATION_DURATION}ms`;\n\n if (lastTooltipHideTimestamp) {\n const timeSinceLastTooltip = Date.now() - lastTooltipHideTimestamp;\n\n if (timeSinceLastTooltip < 500 + SHOW_HIDE_DELAY) {\n animationDuration = \"0ms\";\n }\n }\n return animationDuration;\n}\n\n/** This component is used to display the overlay for both Toggletip and Tooltip components */\nexport function TooltipContent({\n placement = \"auto\",\n content,\n tooltipId,\n triggerRef,\n portalContainer,\n dataE2eTestId,\n dataDSId,\n isVisible,\n \"aria-hidden\": ariaHidden,\n role,\n tabIndex,\n contentPadding,\n maxWidth = MAX_CONTENT_WIDTH,\n hasInvertedSubTheme = true,\n defaultVerticalPlacement,\n onTooltipPointerEnter,\n onTooltipPointerLeave,\n hideArrow = false,\n}: TooltipContentProps): React.ReactElement {\n const [style, setStyle] = useState(initialStyle);\n const tooltipRef = useRef(null);\n const document = useDocument();\n const window = useWindow();\n\n const arrowSize = useMemo(() => {\n if (hideArrow) {\n return 0;\n }\n return hasInvertedSubTheme ? ARROW_SIZE : ARROW_SIZE_BIG;\n }, [hasInvertedSubTheme, hideArrow]);\n\n const calculateStyle = useCallback(() => {\n if (triggerRef.current && tooltipRef.current) {\n // calculate tooltip style\n setStyle(\n getTooltipStyle(\n placement,\n defaultVerticalPlacement,\n triggerRef,\n tooltipRef,\n document,\n window,\n arrowSize\n )\n );\n }\n }, [\n triggerRef,\n tooltipRef,\n document,\n window,\n placement,\n arrowSize,\n defaultVerticalPlacement,\n ]);\n\n // This layout effect to re-render with updated position after determining content width\n useLayoutEffect(() => {\n if (isVisible) {\n calculateStyle();\n }\n }, [isVisible, calculateStyle, contentPadding, content]);\n\n // Re-position tooltip if it moves out of the viewport by 10% and on window resize\n useEffect(() => {\n let observer: IntersectionObserver;\n\n if (\n typeof IntersectionObserver !== \"undefined\" &&\n isVisible &&\n tooltipRef.current\n ) {\n observer = new IntersectionObserver(\n (entries) => {\n entries.forEach(() => {\n calculateStyle();\n });\n },\n {\n threshold: 0.9,\n }\n );\n\n observer.observe(tooltipRef.current);\n window.addEventListener(\"resize\", calculateStyle);\n window.addEventListener(\"scroll\", calculateStyle, true); // use capture here to detect scroll on any parent\n } else if (!isVisible) {\n // log time when tooltip closes\n lastTooltipHideTimestamp = Date.now();\n }\n\n return () => {\n if (observer) {\n observer.disconnect();\n }\n window.removeEventListener(\"resize\", calculateStyle);\n window.removeEventListener(\"scroll\", calculateStyle);\n };\n }, [isVisible, calculateStyle, window, tooltipRef]);\n\n if (!isVisible) return null;\n\n const tooltipElm = (\n <StyledContainer\n data-e2e-test-id={dataE2eTestId}\n data-ds-id={dataDSId}\n style={{\n top: style.top,\n left: style.left,\n animationDuration: getAnimationDuration(),\n }}\n ref={tooltipRef}\n id={tooltipId}\n role={role}\n aria-hidden={ariaHidden}\n hasInvertedSubTheme={hasInvertedSubTheme}\n tabIndex={tabIndex}\n horizontalPlacement={style.horizontalPlacement}\n verticalPlacement={style.verticalPlacement}\n maxWidth={maxWidth}\n contentPadding={contentPadding}\n onPointerEnter={onTooltipPointerEnter}\n onPointerLeave={onTooltipPointerLeave}\n >\n {content}\n {!hideArrow && (\n <StyledArrow\n data-e2e-test-id={`${dataE2eTestId}_arrow`}\n hasInvertedSubTheme={hasInvertedSubTheme}\n horizontalPlacement={style.horizontalPlacement}\n verticalPlacement={style.verticalPlacement}\n size={arrowSize}\n />\n )}\n </StyledContainer>\n );\n\n const wrapperElm = hasInvertedSubTheme ? (\n <SubThemeProvider name=\"inverted\">{tooltipElm}</SubThemeProvider>\n ) : (\n tooltipElm\n );\n\n return createPortal(wrapperElm, portalContainer || document.body);\n}\n"],"names":["ANIMATION_DURATION","SHOW_HIDE_DELAY","MAX_CONTENT_WIDTH","StyledContainer","_styled","process","env","NODE_ENV","target","label","_ref","theme","horizontalPlacement","verticalPlacement","maxWidth","contentPadding","hasInvertedSubTheme","animationDistance","ANIMATION_DISTANCE","animation","keyframes","to","opacity","transform","contentPaddingMap","s","variables","size","spacing","xxs","m","invertedSubThemeStyles","padding","xs","position","zIndex","zIndices","tooltip","value","width","boxSizing","backgroundColor","values","color","background","primary","default","elevated","borderRadius","boxShadow","elevation","c","ARROW_CONTAINER_WIDTH","StyledArrow","_ref2","ARROW_SIZE","offset","getArrowOffset","adjustmentForShadow","arrowContainerHeight","DISTANCE_FROM_TRIGGER","arrowSideLength","Math","sqrt","height","overflow","top","left","right","content","initialStyle","lastTooltipHideTimestamp","getAnimationDuration","animationDuration","timeSinceLastTooltip","Date","now","TooltipContent","_ref3","placement","tooltipId","triggerRef","portalContainer","dataE2eTestId","dataDSId","isVisible","ariaHidden","role","tabIndex","defaultVerticalPlacement","onTooltipPointerEnter","onTooltipPointerLeave","hideArrow","style","setStyle","useState","tooltipRef","useRef","document","useDocument","window","useWindow","arrowSize","useMemo","ARROW_SIZE_BIG","calculateStyle","useCallback","current","getTooltipStyle","useLayoutEffect","useEffect","observer","IntersectionObserver","entries","forEach","threshold","observe","addEventListener","disconnect","removeEventListener","tooltipElm","React","createElement","ref","id","onPointerEnter","onPointerLeave","wrapperElm","SubThemeProvider","name","createPortal","body"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserHighlightTooltip.js","sources":["../../../../../src/components/UserHighlightTooltip/UserHighlightTooltip.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { TooltipContentProps } from \"../Tooltip/TooltipContent\";\nimport { TooltipContent } from \"../Tooltip/TooltipContent\";\n\nexport type UserHighlightTooltipProps = Pick<\n TooltipContentProps,\n \"content\" | \"placement\" | \"portalContainer\" | \"contentPadding\" | \"maxWidth\"\n> & {\n \"data-e2e-test-id\"?: string;\n onVisibilityChange?: (isVisible: boolean) => void;\n triggerElements: HTMLElement[];\n selectedRange?: Range;\n};\n\nconst SHOW_HIDE_DELAY = 200;\n\nexport function UserHighlightTooltip({\n content,\n contentPadding = \"m\",\n placement = \"auto\",\n maxWidth,\n portalContainer,\n \"data-e2e-test-id\": dataE2eTestId,\n triggerElements,\n selectedRange,\n onVisibilityChange,\n}: UserHighlightTooltipProps): React.ReactElement {\n const tooltipId = useMemo(\n () => `DSUserHighlightTooltip_${Math.floor(Date.now() * Math.random())}`,\n []\n );\n\n const isTooltipHovered = useRef(false);\n const showTooltipTimeoutId = useRef(null);\n const hideTooltipTimeoutId = useRef(null);\n const triggerHovered = useRef(false);\n const rangeRef = useRef<Range>(null);\n\n useEffect(() => {\n if (selectedRange) {\n rangeRef.current = selectedRange;\n } else {\n const range = document.createRange();\n range.setStart(triggerElements[0], 0);\n range.setEnd(triggerElements[triggerElements.length - 1], 1);\n rangeRef.current = range;\n }\n }, [triggerElements, selectedRange]);\n\n const [tooltipVisible, setTooltipVisible] = useState(false);\n\n const toggleVisibility = useCallback(\n (status: boolean) => {\n setTooltipVisible(status);\n\n if (onVisibilityChange) {\n onVisibilityChange(status);\n }\n },\n [onVisibilityChange]\n );\n\n useEffect(() => {\n if (selectedRange) {\n toggleVisibility(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleTooltipPointerEnter = () => {\n isTooltipHovered.current = true;\n };\n\n const hideTooltipAfterDelay = useCallback(() => {\n // Delay removing tooltip from DOM to allow hover over highlight element || tooltip element\n hideTooltipTimeoutId.current = setTimeout(() => {\n if (\n !triggerHovered.current &&\n !isTooltipHovered.current &&\n tooltipVisible\n ) {\n toggleVisibility(false);\n }\n }, SHOW_HIDE_DELAY);\n }, [toggleVisibility, tooltipVisible]);\n\n const handleTooltipPointerLeave = () => {\n clearTimeout(hideTooltipTimeoutId.current);\n isTooltipHovered.current = false;\n\n hideTooltipAfterDelay();\n };\n\n const handleTriggerPointerEnter = useCallback(() => {\n triggerHovered.current = true;\n if (!tooltipVisible) {\n clearTimeout(showTooltipTimeoutId.current);\n // Delay show tooltip to prevent flickering when mouse moves quickly over trigger\n showTooltipTimeoutId.current = setTimeout(() => {\n if (!tooltipVisible && triggerHovered.current) {\n toggleVisibility(true);\n }\n }, SHOW_HIDE_DELAY);\n }\n }, [toggleVisibility, tooltipVisible]);\n\n const handleTriggerPointerLeave = useCallback(() => {\n clearTimeout(hideTooltipTimeoutId.current);\n triggerHovered.current = false;\n\n hideTooltipAfterDelay();\n }, [hideTooltipAfterDelay]);\n\n useEffect(\n () => () => {\n // clear timers\n clearTimeout(showTooltipTimeoutId.current);\n clearTimeout(hideTooltipTimeoutId.current);\n },\n []\n );\n\n // event listeners\n useEffect(() => {\n triggerElements.forEach((node) => {\n node.addEventListener(\"pointerenter\", handleTriggerPointerEnter);\n node.addEventListener(\"pointerleave\", handleTriggerPointerLeave);\n });\n return () => {\n triggerElements.forEach((node) => {\n node.removeEventListener(\"pointerenter\", handleTriggerPointerEnter);\n node.removeEventListener(\"pointerleave\", handleTriggerPointerLeave);\n });\n };\n }, [handleTriggerPointerEnter, handleTriggerPointerLeave, triggerElements]);\n\n useEffect(() => {\n triggerElements.forEach((node) => {\n if (tooltipVisible) {\n node.setAttribute(\"aria-describedby\", tooltipId);\n } else {\n node.removeAttribute(\"aria-describedby\");\n }\n });\n }, [tooltipId, tooltipVisible, triggerElements]);\n\n if (!rangeRef.current) return null;\n\n return (\n <TooltipContent\n dataDSId=\"UserHighlightTooltip\"\n content={content}\n placement={placement}\n portalContainer={portalContainer}\n dataE2eTestId={dataE2eTestId}\n isVisible={tooltipVisible}\n tooltipId={tooltipId}\n triggerRef={rangeRef}\n aria-hidden\n role=\"tooltip\"\n contentPadding={contentPadding}\n maxWidth={maxWidth}\n onTooltipPointerEnter={handleTooltipPointerEnter}\n onTooltipPointerLeave={handleTooltipPointerLeave}\n />\n );\n}\n"],"names":["SHOW_HIDE_DELAY","UserHighlightTooltip","_ref","content","contentPadding","placement","maxWidth","portalContainer","dataE2eTestId","triggerElements","selectedRange","onVisibilityChange","tooltipId","useMemo","Math","floor","Date","now","random","isTooltipHovered","useRef","showTooltipTimeoutId","hideTooltipTimeoutId","triggerHovered","rangeRef","useEffect","current","range","document","createRange","setStart","setEnd","length","tooltipVisible","setTooltipVisible","useState","toggleVisibility","useCallback","status","handleTooltipPointerEnter","hideTooltipAfterDelay","setTimeout","handleTooltipPointerLeave","clearTimeout","handleTriggerPointerEnter","handleTriggerPointerLeave","forEach","node","addEventListener","removeEventListener","setAttribute","removeAttribute","React","createElement","TooltipContent","dataDSId","isVisible","triggerRef","role","onTooltipPointerEnter","onTooltipPointerLeave"],"mappings":";;;AAoBA,MAAMA,eAAe,GAAG,GAAG,CAAA;AAEpB,SAASC,oBAAoBA,CAAAC,IAAA,EAUc;EAAA,IAVb;IACnCC,OAAO;AACPC,IAAAA,cAAc,GAAG,GAAG;AACpBC,IAAAA,SAAS,GAAG,MAAM;IAClBC,QAAQ;IACRC,eAAe;AACf,IAAA,kBAAkB,EAAEC,aAAa;IACjCC,eAAe;IACfC,aAAa;AACbC,IAAAA,kBAAAA;AACyB,GAAC,GAAAT,IAAA,CAAA;EAC1B,MAAMU,SAAS,GAAGC,OAAO,CACvB,MAAO,0BAAyBC,IAAI,CAACC,KAAK,CAACC,IAAI,CAACC,GAAG,EAAE,GAAGH,IAAI,CAACI,MAAM,EAAE,CAAE,CAAA,CAAC,EACxE,EACF,CAAC,CAAA;AAED,EAAA,MAAMC,gBAAgB,GAAGC,MAAM,CAAC,KAAK,CAAC,CAAA;AACtC,EAAA,MAAMC,oBAAoB,GAAGD,MAAM,CAAC,IAAI,CAAC,CAAA;AACzC,EAAA,MAAME,oBAAoB,GAAGF,MAAM,CAAC,IAAI,CAAC,CAAA;AACzC,EAAA,MAAMG,cAAc,GAAGH,MAAM,CAAC,KAAK,CAAC,CAAA;AACpC,EAAA,MAAMI,QAAQ,GAAGJ,MAAM,CAAQ,IAAI,CAAC,CAAA;AAEpCK,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIf,aAAa,EAAE;MACjBc,QAAQ,CAACE,OAAO,GAAGhB,aAAa,CAAA;AAClC,KAAC,MAAM;AACL,MAAA,MAAMiB,KAAK,GAAGC,QAAQ,CAACC,WAAW,EAAE,CAAA;MACpCF,KAAK,CAACG,QAAQ,CAACrB,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACrCkB,MAAAA,KAAK,CAACI,MAAM,CAACtB,eAAe,CAACA,eAAe,CAACuB,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;MAC5DR,QAAQ,CAACE,OAAO,GAAGC,KAAK,CAAA;AAC1B,KAAA;AACF,GAAC,EAAE,CAAClB,eAAe,EAAEC,aAAa,CAAC,CAAC,CAAA;EAEpC,MAAM,CAACuB,cAAc,EAAEC,iBAAiB,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAE3D,EAAA,MAAMC,gBAAgB,GAAGC,WAAW,CACjCC,MAAe,IAAK;IACnBJ,iBAAiB,CAACI,MAAM,CAAC,CAAA;AAEzB,IAAA,IAAI3B,kBAAkB,EAAE;MACtBA,kBAAkB,CAAC2B,MAAM,CAAC,CAAA;AAC5B,KAAA;AACF,GAAC,EACD,CAAC3B,kBAAkB,CACrB,CAAC,CAAA;AAEDc,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIf,aAAa,EAAE;MACjB0B,gBAAgB,CAAC,IAAI,CAAC,CAAA;AACxB,KAAA;AACA;GACD,EAAE,EAAE,CAAC,CAAA;EAEN,MAAMG,yBAAyB,GAAGA,MAAM;IACtCpB,gBAAgB,CAACO,OAAO,GAAG,IAAI,CAAA;GAChC,CAAA;AAED,EAAA,MAAMc,qBAAqB,GAAGH,WAAW,CAAC,MAAM;AAC9C;AACAf,IAAAA,oBAAoB,CAACI,OAAO,GAAGe,UAAU,CAAC,MAAM;MAC9C,IACE,CAAClB,cAAc,CAACG,OAAO,IACvB,CAACP,gBAAgB,CAACO,OAAO,IACzBO,cAAc,EACd;QACAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;AACzB,OAAA;KACD,EAAEpC,eAAe,CAAC,CAAA;AACrB,GAAC,EAAE,CAACoC,gBAAgB,EAAEH,cAAc,CAAC,CAAC,CAAA;EAEtC,MAAMS,yBAAyB,GAAGA,MAAM;AACtCC,IAAAA,YAAY,CAACrB,oBAAoB,CAACI,OAAO,CAAC,CAAA;IAC1CP,gBAAgB,CAACO,OAAO,GAAG,KAAK,CAAA;AAEhCc,IAAAA,qBAAqB,EAAE,CAAA;GACxB,CAAA;AAED,EAAA,MAAMI,yBAAyB,GAAGP,WAAW,CAAC,MAAM;IAClDd,cAAc,CAACG,OAAO,GAAG,IAAI,CAAA;IAC7B,IAAI,CAACO,cAAc,EAAE;AACnBU,MAAAA,YAAY,CAACtB,oBAAoB,CAACK,OAAO,CAAC,CAAA;AAC1C;AACAL,MAAAA,oBAAoB,CAACK,OAAO,GAAGe,UAAU,CAAC,MAAM;AAC9C,QAAA,IAAI,CAACR,cAAc,IAAIV,cAAc,CAACG,OAAO,EAAE;UAC7CU,gBAAgB,CAAC,IAAI,CAAC,CAAA;AACxB,SAAA;OACD,EAAEpC,eAAe,CAAC,CAAA;AACrB,KAAA;AACF,GAAC,EAAE,CAACoC,gBAAgB,EAAEH,cAAc,CAAC,CAAC,CAAA;AAEtC,EAAA,MAAMY,yBAAyB,GAAGR,WAAW,CAAC,MAAM;AAClDM,IAAAA,YAAY,CAACrB,oBAAoB,CAACI,OAAO,CAAC,CAAA;IAC1CH,cAAc,CAACG,OAAO,GAAG,KAAK,CAAA;AAE9Bc,IAAAA,qBAAqB,EAAE,CAAA;AACzB,GAAC,EAAE,CAACA,qBAAqB,CAAC,CAAC,CAAA;EAE3Bf,SAAS,CACP,MAAM,MAAM;AACV;AACAkB,IAAAA,YAAY,CAACtB,oBAAoB,CAACK,OAAO,CAAC,CAAA;AAC1CiB,IAAAA,YAAY,CAACrB,oBAAoB,CAACI,OAAO,CAAC,CAAA;GAC3C,EACD,EACF,CAAC,CAAA;;AAED;AACAD,EAAAA,SAAS,CAAC,MAAM;AACdhB,IAAAA,eAAe,CAACqC,OAAO,CAAEC,IAAI,IAAK;AAChCA,MAAAA,IAAI,CAACC,gBAAgB,CAAC,cAAc,EAAEJ,yBAAyB,CAAC,CAAA;AAChEG,MAAAA,IAAI,CAACC,gBAAgB,CAAC,cAAc,EAAEH,yBAAyB,CAAC,CAAA;AAClE,KAAC,CAAC,CAAA;AACF,IAAA,OAAO,MAAM;AACXpC,MAAAA,eAAe,CAACqC,OAAO,CAAEC,IAAI,IAAK;AAChCA,QAAAA,IAAI,CAACE,mBAAmB,CAAC,cAAc,EAAEL,yBAAyB,CAAC,CAAA;AACnEG,QAAAA,IAAI,CAACE,mBAAmB,CAAC,cAAc,EAAEJ,yBAAyB,CAAC,CAAA;AACrE,OAAC,CAAC,CAAA;KACH,CAAA;GACF,EAAE,CAACD,yBAAyB,EAAEC,yBAAyB,EAAEpC,eAAe,CAAC,CAAC,CAAA;AAE3EgB,EAAAA,SAAS,CAAC,MAAM;AACdhB,IAAAA,eAAe,CAACqC,OAAO,CAAEC,IAAI,IAAK;AAChC,MAAA,IAAId,cAAc,EAAE;AAClBc,QAAAA,IAAI,CAACG,YAAY,CAAC,kBAAkB,EAAEtC,SAAS,CAAC,CAAA;AAClD,OAAC,MAAM;AACLmC,QAAAA,IAAI,CAACI,eAAe,CAAC,kBAAkB,CAAC,CAAA;AAC1C,OAAA;AACF,KAAC,CAAC,CAAA;GACH,EAAE,CAACvC,SAAS,EAAEqB,cAAc,EAAExB,eAAe,CAAC,CAAC,CAAA;AAEhD,EAAA,IAAI,CAACe,QAAQ,CAACE,OAAO,EAAE,OAAO,IAAI,CAAA;AAElC,EAAA,oBACE0B,KAAA,CAAAC,aAAA,CAACC,cAAc,EAAA;AACbC,IAAAA,QAAQ,EAAC,sBAAsB;AAC/BpD,IAAAA,OAAO,EAAEA,OAAQ;AACjBE,IAAAA,SAAS,EAAEA,SAAU;AACrBE,IAAAA,eAAe,EAAEA,eAAgB;AACjCC,IAAAA,aAAa,EAAEA,aAAc;AAC7BgD,IAAAA,SAAS,EAAEvB,cAAe;AAC1BrB,IAAAA,SAAS,EAAEA,SAAU;AACrB6C,IAAAA,UAAU,EAAEjC,QAAS;IACrB,aAAW,EAAA,IAAA;AACXkC,IAAAA,IAAI,EAAC,SAAS;AACdtD,IAAAA,cAAc,EAAEA,cAAe;AAC/BE,IAAAA,QAAQ,EAAEA,QAAS;AACnBqD,IAAAA,qBAAqB,EAAEpB,yBAA0B;AACjDqB,IAAAA,qBAAqB,EAAElB,yBAAAA;AAA0B,GAClD,CAAC,CAAA;AAEN;;;;"}
|
|
1
|
+
{"version":3,"file":"UserHighlightTooltip.js","sources":["../../../../../src/components/UserHighlightTooltip/UserHighlightTooltip.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { TooltipContentProps } from \"../Tooltip/TooltipContent\";\nimport { TooltipContent } from \"../Tooltip/TooltipContent\";\n\nexport type UserHighlightTooltipProps = Pick<\n TooltipContentProps,\n \"content\" | \"placement\" | \"portalContainer\" | \"contentPadding\" | \"maxWidth\"\n> & {\n \"data-e2e-test-id\"?: string;\n onVisibilityChange?: (isVisible: boolean) => void;\n triggerElements: HTMLElement[];\n selectedRange?: Range;\n};\n\nconst SHOW_HIDE_DELAY = 200;\n\nexport function UserHighlightTooltip({\n content,\n contentPadding = \"s\",\n placement = \"auto\",\n maxWidth,\n portalContainer,\n \"data-e2e-test-id\": dataE2eTestId,\n triggerElements,\n selectedRange,\n onVisibilityChange,\n}: UserHighlightTooltipProps): React.ReactElement {\n const tooltipId = useMemo(\n () => `DSUserHighlightTooltip_${Math.floor(Date.now() * Math.random())}`,\n []\n );\n\n const isTooltipHovered = useRef(false);\n const showTooltipTimeoutId = useRef(null);\n const hideTooltipTimeoutId = useRef(null);\n const triggerHovered = useRef(false);\n const rangeRef = useRef<Range>(null);\n\n useEffect(() => {\n if (selectedRange) {\n rangeRef.current = selectedRange;\n } else {\n const range = document.createRange();\n range.setStart(triggerElements[0], 0);\n range.setEnd(triggerElements[triggerElements.length - 1], 1);\n rangeRef.current = range;\n }\n }, [triggerElements, selectedRange]);\n\n const [tooltipVisible, setTooltipVisible] = useState(false);\n\n const toggleVisibility = useCallback(\n (status: boolean) => {\n setTooltipVisible(status);\n\n if (onVisibilityChange) {\n onVisibilityChange(status);\n }\n },\n [onVisibilityChange]\n );\n\n useEffect(() => {\n if (selectedRange) {\n toggleVisibility(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleTooltipPointerEnter = () => {\n isTooltipHovered.current = true;\n };\n\n const hideTooltipAfterDelay = useCallback(() => {\n // Delay removing tooltip from DOM to allow hover over highlight element || tooltip element\n hideTooltipTimeoutId.current = setTimeout(() => {\n if (\n !triggerHovered.current &&\n !isTooltipHovered.current &&\n tooltipVisible\n ) {\n toggleVisibility(false);\n }\n }, SHOW_HIDE_DELAY);\n }, [toggleVisibility, tooltipVisible]);\n\n const handleTooltipPointerLeave = () => {\n clearTimeout(hideTooltipTimeoutId.current);\n isTooltipHovered.current = false;\n\n hideTooltipAfterDelay();\n };\n\n const handleTriggerPointerEnter = useCallback(() => {\n triggerHovered.current = true;\n if (!tooltipVisible) {\n clearTimeout(showTooltipTimeoutId.current);\n // Delay show tooltip to prevent flickering when mouse moves quickly over trigger\n showTooltipTimeoutId.current = setTimeout(() => {\n if (!tooltipVisible && triggerHovered.current) {\n toggleVisibility(true);\n }\n }, SHOW_HIDE_DELAY);\n }\n }, [toggleVisibility, tooltipVisible]);\n\n const handleTriggerPointerLeave = useCallback(() => {\n clearTimeout(hideTooltipTimeoutId.current);\n triggerHovered.current = false;\n\n hideTooltipAfterDelay();\n }, [hideTooltipAfterDelay]);\n\n useEffect(\n () => () => {\n // clear timers\n clearTimeout(showTooltipTimeoutId.current);\n clearTimeout(hideTooltipTimeoutId.current);\n },\n []\n );\n\n // event listeners\n useEffect(() => {\n triggerElements.forEach((node) => {\n node.addEventListener(\"pointerenter\", handleTriggerPointerEnter);\n node.addEventListener(\"pointerleave\", handleTriggerPointerLeave);\n });\n return () => {\n triggerElements.forEach((node) => {\n node.removeEventListener(\"pointerenter\", handleTriggerPointerEnter);\n node.removeEventListener(\"pointerleave\", handleTriggerPointerLeave);\n });\n };\n }, [handleTriggerPointerEnter, handleTriggerPointerLeave, triggerElements]);\n\n useEffect(() => {\n triggerElements.forEach((node) => {\n if (tooltipVisible) {\n node.setAttribute(\"aria-describedby\", tooltipId);\n } else {\n node.removeAttribute(\"aria-describedby\");\n }\n });\n }, [tooltipId, tooltipVisible, triggerElements]);\n\n if (!rangeRef.current) return null;\n\n return (\n <TooltipContent\n dataDSId=\"UserHighlightTooltip\"\n content={content}\n placement={placement}\n portalContainer={portalContainer}\n dataE2eTestId={dataE2eTestId}\n isVisible={tooltipVisible}\n tooltipId={tooltipId}\n triggerRef={rangeRef}\n aria-hidden\n role=\"tooltip\"\n contentPadding={contentPadding}\n maxWidth={maxWidth}\n onTooltipPointerEnter={handleTooltipPointerEnter}\n onTooltipPointerLeave={handleTooltipPointerLeave}\n />\n );\n}\n"],"names":["SHOW_HIDE_DELAY","UserHighlightTooltip","_ref","content","contentPadding","placement","maxWidth","portalContainer","dataE2eTestId","triggerElements","selectedRange","onVisibilityChange","tooltipId","useMemo","Math","floor","Date","now","random","isTooltipHovered","useRef","showTooltipTimeoutId","hideTooltipTimeoutId","triggerHovered","rangeRef","useEffect","current","range","document","createRange","setStart","setEnd","length","tooltipVisible","setTooltipVisible","useState","toggleVisibility","useCallback","status","handleTooltipPointerEnter","hideTooltipAfterDelay","setTimeout","handleTooltipPointerLeave","clearTimeout","handleTriggerPointerEnter","handleTriggerPointerLeave","forEach","node","addEventListener","removeEventListener","setAttribute","removeAttribute","React","createElement","TooltipContent","dataDSId","isVisible","triggerRef","role","onTooltipPointerEnter","onTooltipPointerLeave"],"mappings":"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"}
|
package/build/esm/src/index.d.ts
CHANGED